// The rustc-cfg listed below are considered public API, but it is *unstable* // and outside of the normal semver guarantees: // // - `crossbeam_no_atomic` // Assume the target does *not* support any atomic operations. // This is usually detected automatically by the build script, but you may // need to enable it manually when building for custom targets or using // non-cargo build systems that don't run the build script. // // With the exceptions mentioned above, the rustc-cfg emitted by the build // script are *not* public API. #![warn(rust_2018_idioms)] use std::env; include!("no_atomic.rs"); include!("build-common.rs"); fn main() { println!("cargo:rerun-if-changed=no_atomic.rs"); println!("cargo:rustc-check-cfg=cfg(crossbeam_no_atomic,crossbeam_sanitize_thread)"); let target = match env::var("TARGET") { Ok(target) => convert_custom_linux_target(target), Err(e) => { println!( "cargo:warning={}: unable to get TARGET environment variable: {}", env!("CARGO_PKG_NAME"), e ); return; } }; // Note that this is `no_`*, not `has_*`. This allows treating as the latest // stable rustc is used when the build script doesn't run. This is useful // for non-cargo build systems that don't run the build script. if NO_ATOMIC.contains(&&*target) { println!("cargo:rustc-cfg=crossbeam_no_atomic"); } // `cfg(sanitize = "..")` is not stabilized. let sanitize = env::var("CARGO_CFG_SANITIZE").unwrap_or_default(); if sanitize.contains("thread") { println!("cargo:rustc-cfg=crossbeam_sanitize_thread"); } }