use std::env; fn main() { println!("cargo:rerun-if-changed=build.rs"); let target = env::var("TARGET").expect("TARGET was not set"); if target.contains("android") { let build = cc::Build::new(); // Since ndk r23 beta 3 `libgcc` was replaced with `libunwind` thus // check if we have `libunwind` available and if so use it. Otherwise // fall back to `libgcc` to support older ndk versions. let has_unwind = build.is_flag_supported("-lunwind").expect("Unable to invoke compiler"); if has_unwind { println!("cargo:rustc-link-lib=unwind"); } else { println!("cargo:rustc-link-lib=gcc"); } // Android's unwinding library depends on dl_iterate_phdr in `libdl`. println!("cargo:rustc-link-lib=dl"); } else if target.contains("freebsd") { println!("cargo:rustc-link-lib=gcc_s"); } else if target.contains("netbsd") { println!("cargo:rustc-link-lib=gcc_s"); } else if target.contains("openbsd") { if target.contains("sparc64") { println!("cargo:rustc-link-lib=gcc"); } else { println!("cargo:rustc-link-lib=c++abi"); } } else if target.contains("solaris") { println!("cargo:rustc-link-lib=gcc_s"); } else if target.contains("illumos") { println!("cargo:rustc-link-lib=gcc_s"); } else if target.contains("dragonfly") { println!("cargo:rustc-link-lib=gcc_pic"); } else if target.contains("pc-windows-gnu") { // This is handled in the target spec with late_link_args_[static|dynamic] } else if target.contains("uwp-windows-gnu") { println!("cargo:rustc-link-lib=unwind"); } else if target.contains("haiku") { println!("cargo:rustc-link-lib=gcc_s"); } else if target.contains("redox") { // redox is handled in lib.rs } }