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
15use std::env;
16
17include!("no_atomic.rs");
18include!("build-common.rs");
19
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