]> git.lizzy.rs Git - rust.git/blob - library/std/build.rs
Auto merge of #73265 - mark-i-m:mv-std, r=Mark-Simulacrum,mark-i-m
[rust.git] / library / std / build.rs
1 use std::env;
2
3 fn main() {
4     println!("cargo:rerun-if-changed=build.rs");
5     let target = env::var("TARGET").expect("TARGET was not set");
6     if target.contains("linux") {
7         if target.contains("android") {
8             println!("cargo:rustc-link-lib=dl");
9             println!("cargo:rustc-link-lib=log");
10             println!("cargo:rustc-link-lib=gcc");
11         } else if !target.contains("musl") {
12             println!("cargo:rustc-link-lib=dl");
13             println!("cargo:rustc-link-lib=rt");
14             println!("cargo:rustc-link-lib=pthread");
15         }
16     } else if target.contains("freebsd") {
17         println!("cargo:rustc-link-lib=execinfo");
18         println!("cargo:rustc-link-lib=pthread");
19     } else if target.contains("netbsd") {
20         println!("cargo:rustc-link-lib=pthread");
21         println!("cargo:rustc-link-lib=rt");
22     } else if target.contains("dragonfly") || target.contains("openbsd") {
23         println!("cargo:rustc-link-lib=pthread");
24     } else if target.contains("solaris") {
25         println!("cargo:rustc-link-lib=socket");
26         println!("cargo:rustc-link-lib=posix4");
27         println!("cargo:rustc-link-lib=pthread");
28         println!("cargo:rustc-link-lib=resolv");
29     } else if target.contains("illumos") {
30         println!("cargo:rustc-link-lib=socket");
31         println!("cargo:rustc-link-lib=posix4");
32         println!("cargo:rustc-link-lib=pthread");
33         println!("cargo:rustc-link-lib=resolv");
34         println!("cargo:rustc-link-lib=nsl");
35         // Use libumem for the (malloc-compatible) allocator
36         println!("cargo:rustc-link-lib=umem");
37     } else if target.contains("apple-darwin") {
38         println!("cargo:rustc-link-lib=System");
39
40         // res_init and friends require -lresolv on macOS/iOS.
41         // See #41582 and http://blog.achernya.com/2013/03/os-x-has-silly-libsystem.html
42         println!("cargo:rustc-link-lib=resolv");
43     } else if target.contains("apple-ios") {
44         println!("cargo:rustc-link-lib=System");
45         println!("cargo:rustc-link-lib=objc");
46         println!("cargo:rustc-link-lib=framework=Security");
47         println!("cargo:rustc-link-lib=framework=Foundation");
48         println!("cargo:rustc-link-lib=resolv");
49     } else if target.contains("uwp") {
50         println!("cargo:rustc-link-lib=ws2_32");
51         // For BCryptGenRandom
52         println!("cargo:rustc-link-lib=bcrypt");
53     } else if target.contains("windows") {
54         println!("cargo:rustc-link-lib=advapi32");
55         println!("cargo:rustc-link-lib=ws2_32");
56         println!("cargo:rustc-link-lib=userenv");
57     } else if target.contains("fuchsia") {
58         println!("cargo:rustc-link-lib=zircon");
59         println!("cargo:rustc-link-lib=fdio");
60     } else if target.contains("cloudabi") {
61         if cfg!(feature = "backtrace") {
62             println!("cargo:rustc-link-lib=unwind");
63         }
64         println!("cargo:rustc-link-lib=c");
65         println!("cargo:rustc-link-lib=compiler_rt");
66     } else if (target.contains("sgx") && target.contains("fortanix"))
67         || target.contains("hermit")
68         || target.contains("l4re")
69         || target.contains("redox")
70         || target.contains("haiku")
71         || target.contains("vxworks")
72         || target.contains("wasm32")
73         || target.contains("asmjs")
74     {
75         // These platforms don't have any special requirements.
76     } else {
77         // This is for Cargo's build-std support, to mark std as unstable for
78         // typically no_std platforms.
79         // This covers:
80         // - os=none ("bare metal" targets)
81         // - mipsel-sony-psp
82         // - nvptx64-nvidia-cuda
83         // - avr-unknown-unknown
84         // - tvos (aarch64-apple-tvos, x86_64-apple-tvos)
85         // - uefi (x86_64-unknown-uefi, i686-unknown-uefi)
86         // - JSON targets
87         // - Any new targets that have not been explicitly added above.
88         println!("cargo:rustc-cfg=feature=\"restricted-std\"");
89     }
90     println!("cargo:rustc-env=STD_ENV_ARCH={}", env::var("CARGO_CFG_TARGET_ARCH").unwrap());
91 }