//! This build script detects target platforms that lack proper support for | |
//! atomics and sets `cfg` flags accordingly. | |
use std::env; | |
use std::str; | |
fn main() { | |
let target = match rustc_target() { | |
Some(target) => target, | |
None => return, | |
}; | |
if target_has_atomic_cas(&target) { | |
println!("cargo:rustc-cfg=atomic_cas"); | |
} | |
if target_has_atomics(&target) { | |
println!("cargo:rustc-cfg=has_atomics"); | |
} | |
println!("cargo:rerun-if-changed=build.rs"); | |
} | |
fn target_has_atomic_cas(target: &str) -> bool { | |
match &target[..] { | |
"thumbv6m-none-eabi" | |
| "msp430-none-elf" | |
| "riscv32i-unknown-none-elf" | |
| "riscv32imc-unknown-none-elf" => false, | |
_ => true, | |
} | |
} | |
fn target_has_atomics(target: &str) -> bool { | |
match &target[..] { | |
"thumbv4t-none-eabi" | |
| "msp430-none-elf" | |
| "riscv32i-unknown-none-elf" | |
| "riscv32imc-unknown-none-elf" => false, | |
_ => true, | |
} | |
} | |
fn rustc_target() -> Option<String> { | |
env::var("TARGET").ok() | |
} |