12d8ae3abSopenharmony_ci//! This build script detects target platforms that lack proper support for
22d8ae3abSopenharmony_ci//! atomics and sets `cfg` flags accordingly.
32d8ae3abSopenharmony_ci
42d8ae3abSopenharmony_ciuse std::env;
52d8ae3abSopenharmony_ciuse std::str;
62d8ae3abSopenharmony_ci
72d8ae3abSopenharmony_cifn main() {
82d8ae3abSopenharmony_ci    let target = match rustc_target() {
92d8ae3abSopenharmony_ci        Some(target) => target,
102d8ae3abSopenharmony_ci        None => return,
112d8ae3abSopenharmony_ci    };
122d8ae3abSopenharmony_ci
132d8ae3abSopenharmony_ci    if target_has_atomic_cas(&target) {
142d8ae3abSopenharmony_ci        println!("cargo:rustc-cfg=atomic_cas");
152d8ae3abSopenharmony_ci    }
162d8ae3abSopenharmony_ci
172d8ae3abSopenharmony_ci    if target_has_atomics(&target) {
182d8ae3abSopenharmony_ci        println!("cargo:rustc-cfg=has_atomics");
192d8ae3abSopenharmony_ci    }
202d8ae3abSopenharmony_ci
212d8ae3abSopenharmony_ci    println!("cargo:rerun-if-changed=build.rs");
222d8ae3abSopenharmony_ci}
232d8ae3abSopenharmony_ci
242d8ae3abSopenharmony_cifn target_has_atomic_cas(target: &str) -> bool {
252d8ae3abSopenharmony_ci    match &target[..] {
262d8ae3abSopenharmony_ci        "thumbv6m-none-eabi"
272d8ae3abSopenharmony_ci        | "msp430-none-elf"
282d8ae3abSopenharmony_ci        | "riscv32i-unknown-none-elf"
292d8ae3abSopenharmony_ci        | "riscv32imc-unknown-none-elf" => false,
302d8ae3abSopenharmony_ci        _ => true,
312d8ae3abSopenharmony_ci    }
322d8ae3abSopenharmony_ci}
332d8ae3abSopenharmony_ci
342d8ae3abSopenharmony_cifn target_has_atomics(target: &str) -> bool {
352d8ae3abSopenharmony_ci    match &target[..] {
362d8ae3abSopenharmony_ci        "thumbv4t-none-eabi"
372d8ae3abSopenharmony_ci        | "msp430-none-elf"
382d8ae3abSopenharmony_ci        | "riscv32i-unknown-none-elf"
392d8ae3abSopenharmony_ci        | "riscv32imc-unknown-none-elf" => false,
402d8ae3abSopenharmony_ci        _ => true,
412d8ae3abSopenharmony_ci    }
422d8ae3abSopenharmony_ci}
432d8ae3abSopenharmony_ci
442d8ae3abSopenharmony_cifn rustc_target() -> Option<String> {
452d8ae3abSopenharmony_ci    env::var("TARGET").ok()
462d8ae3abSopenharmony_ci}
47