4 println!("cargo:rerun-if-changed=build.rs");
5 let target = env::var("TARGET").expect("TARGET was not set");
7 if target.contains("android") {
8 let build = cc::Build::new();
10 // Since ndk r23 beta 3 `libgcc` was replaced with `libunwind` thus
11 // check if we have `libunwind` available and if so use it. Otherwise
12 // fall back to `libgcc` to support older ndk versions.
13 let has_unwind = build.is_flag_supported("-lunwind").expect("Unable to invoke compiler");
16 println!("cargo:rustc-link-lib=unwind");
18 println!("cargo:rustc-link-lib=gcc");
21 // Android's unwinding library depends on dl_iterate_phdr in `libdl`.
22 println!("cargo:rustc-link-lib=dl");
23 } else if target.contains("freebsd") {
24 println!("cargo:rustc-link-lib=gcc_s");
25 } else if target.contains("netbsd") {
26 println!("cargo:rustc-link-lib=gcc_s");
27 } else if target.contains("openbsd") {
28 if target.contains("sparc64") {
29 println!("cargo:rustc-link-lib=gcc");
31 println!("cargo:rustc-link-lib=c++abi");
33 } else if target.contains("solaris") {
34 println!("cargo:rustc-link-lib=gcc_s");
35 } else if target.contains("illumos") {
36 println!("cargo:rustc-link-lib=gcc_s");
37 } else if target.contains("dragonfly") {
38 println!("cargo:rustc-link-lib=gcc_pic");
39 } else if target.ends_with("pc-windows-gnu") {
40 // This is handled in the target spec with late_link_args_[static|dynamic]
41 } else if target.contains("uwp-windows-gnu") {
42 println!("cargo:rustc-link-lib=unwind");
43 } else if target.contains("haiku") {
44 println!("cargo:rustc-link-lib=gcc_s");
45 } else if target.contains("redox") {
46 // redox is handled in lib.rs