1 // The rustc-cfg listed below are considered public API, but it is *unstable* 2 // and outside of the normal semver guarantees: 3 // 4 // - `crossbeam_no_atomic` 5 // Assume the target does *not* support any atomic operations. 6 // This is usually detected automatically by the build script, but you may 7 // need to enable it manually when building for custom targets or using 8 // non-cargo build systems that don't run the build script. 9 // 10 // With the exceptions mentioned above, the rustc-cfg emitted by the build 11 // script are *not* public API. 12 13 #![warn(rust_2018_idioms)] 14 15 use std::env; 16 17 include!("no_atomic.rs"); 18 include!("build-common.rs"); 19 main()20fn main() { 21 println!("cargo:rerun-if-changed=no_atomic.rs"); 22 23 let target = match env::var("TARGET") { 24 Ok(target) => convert_custom_linux_target(target), 25 Err(e) => { 26 println!( 27 "cargo:warning={}: unable to get TARGET environment variable: {}", 28 env!("CARGO_PKG_NAME"), 29 e 30 ); 31 return; 32 } 33 }; 34 35 // Note that this is `no_`*, not `has_*`. This allows treating as the latest 36 // stable rustc is used when the build script doesn't run. This is useful 37 // for non-cargo build systems that don't run the build script. 38 if NO_ATOMIC.contains(&&*target) { 39 println!("cargo:rustc-cfg=crossbeam_no_atomic"); 40 } 41 42 // `cfg(sanitize = "..")` is not stabilized. 43 let sanitize = env::var("CARGO_CFG_SANITIZE").unwrap_or_default(); 44 if sanitize.contains("thread") { 45 println!("cargo:rustc-cfg=crossbeam_sanitize_thread"); 46 } 47 } 48