Skip to content

Commit

Permalink
When building for linux, replace all vendors with 'unknown'
Browse files Browse the repository at this point in the history
Some build systems such as the Yocto project define custom
rust targets, of the form 'arch-somevendor-linux-gnu/musl'
(only the 'somevendor' part is custom, the rest matches rust's
definitions).

This causes mismatches with crossbeam's lists of targets
which are built from the standard rust target list, and
always have 'unknown' as the vendor.

This change simply replaces such custom vendors with 'unknown' when
the third component of the target is 'linux'.
  • Loading branch information
Alexander Kanavin committed Nov 1, 2022
1 parent 46d0aeb commit 6ad4fcf
Show file tree
Hide file tree
Showing 9 changed files with 25 additions and 4 deletions.
13 changes: 13 additions & 0 deletions build-common.rs
@@ -0,0 +1,13 @@
// The target triplets have the form of 'arch-vendor-system'.
//
// When building for Linux (e.g. the 'system' part is
// 'linux-something'), replace the vendor with 'unknown'
// so that mapping to rust standard targets happens correctly.
fn convert_custom_linux_target(target: String) -> String {
let mut parts: Vec<&str> = target.split("-").collect();
let system = parts[2];
if system == "linux" {
parts[1] = "unknown";
};
return parts.join("-");
}
1 change: 1 addition & 0 deletions crossbeam-epoch/build-common.rs
3 changes: 2 additions & 1 deletion crossbeam-epoch/build.rs
Expand Up @@ -15,10 +15,11 @@
use std::env;

include!("no_atomic.rs");
include!("build-common.rs");

fn main() {
let target = match env::var("TARGET") {
Ok(target) => target,
Ok(target) => convert_custom_linux_target(target),
Err(e) => {
println!(
"cargo:warning={}: unable to get TARGET environment variable: {}",
Expand Down
1 change: 1 addition & 0 deletions crossbeam-queue/build-common.rs
3 changes: 2 additions & 1 deletion crossbeam-queue/build.rs
Expand Up @@ -15,10 +15,11 @@
use std::env;

include!("no_atomic.rs");
include!("build-common.rs");

fn main() {
let target = match env::var("TARGET") {
Ok(target) => target,
Ok(target) => convert_custom_linux_target(target),
Err(e) => {
println!(
"cargo:warning={}: unable to get TARGET environment variable: {}",
Expand Down
1 change: 1 addition & 0 deletions crossbeam-skiplist/build-common.rs
3 changes: 2 additions & 1 deletion crossbeam-skiplist/build.rs
Expand Up @@ -15,10 +15,11 @@
use std::env;

include!("no_atomic.rs");
include!("build-common.rs");

fn main() {
let target = match env::var("TARGET") {
Ok(target) => target,
Ok(target) => convert_custom_linux_target(target),
Err(e) => {
println!(
"cargo:warning={}: unable to get TARGET environment variable: {}",
Expand Down
1 change: 1 addition & 0 deletions crossbeam-utils/build-common.rs
3 changes: 2 additions & 1 deletion crossbeam-utils/build.rs
Expand Up @@ -27,10 +27,11 @@
use std::env;

include!("no_atomic.rs");
include!("build-common.rs");

fn main() {
let target = match env::var("TARGET") {
Ok(target) => target,
Ok(target) => convert_custom_linux_target(target),
Err(e) => {
println!(
"cargo:warning={}: unable to get TARGET environment variable: {}",
Expand Down

0 comments on commit 6ad4fcf

Please sign in to comment.