blob: 22cfa7854b0e76c0ace696cf07a39ac9d3033030 [file] [log] [blame]
Haibo Huang029e5972020-07-15 21:35:42 -07001//! This build script detects target platforms that lack proper support for
2//! atomics and sets `cfg` flags accordingly.
3
4use std::env;
Joel Galenson30e3e1c2021-04-02 16:02:24 -07005use std::str;
Haibo Huang029e5972020-07-15 21:35:42 -07006
7fn main() {
Joel Galenson30e3e1c2021-04-02 16:02:24 -07008 let target = match rustc_target() {
9 Some(target) => target,
10 None => return,
11 };
Haibo Huang029e5972020-07-15 21:35:42 -070012
Joel Galenson30e3e1c2021-04-02 16:02:24 -070013 if target_has_atomic_cas(&target) {
Haibo Huang029e5972020-07-15 21:35:42 -070014 println!("cargo:rustc-cfg=atomic_cas");
15 }
16
Joel Galenson30e3e1c2021-04-02 16:02:24 -070017 if target_has_atomics(&target) {
18 println!("cargo:rustc-cfg=has_atomics");
19 }
20
Haibo Huang029e5972020-07-15 21:35:42 -070021 println!("cargo:rerun-if-changed=build.rs");
22}
Joel Galenson30e3e1c2021-04-02 16:02:24 -070023
24fn target_has_atomic_cas(target: &str) -> bool {
25 match &target[..] {
26 "thumbv6m-none-eabi"
27 | "msp430-none-elf"
28 | "riscv32i-unknown-none-elf"
29 | "riscv32imc-unknown-none-elf" => false,
30 _ => true,
31 }
32}
33
34fn target_has_atomics(target: &str) -> bool {
35 match &target[..] {
36 "msp430-none-elf" | "riscv32i-unknown-none-elf" | "riscv32imc-unknown-none-elf" => false,
37 _ => true,
38 }
39}
40
41fn rustc_target() -> Option<String> {
42 env::var("TARGET").ok()
43}