1a2e6e8b4Sopenharmony_ciuse std::env; 2a2e6e8b4Sopenharmony_ciuse std::fs; 3a2e6e8b4Sopenharmony_ciuse std::path::PathBuf; 4a2e6e8b4Sopenharmony_ci 5a2e6e8b4Sopenharmony_cifn main() { 6a2e6e8b4Sopenharmony_ci println!("cargo:rerun-if-changed=build.rs"); 7a2e6e8b4Sopenharmony_ci 8a2e6e8b4Sopenharmony_ci let libstdcxx = cfg!(feature = "libstdc++"); 9a2e6e8b4Sopenharmony_ci let libcxx = cfg!(feature = "libc++"); 10a2e6e8b4Sopenharmony_ci let nothing = cfg!(feature = "nothing"); 11a2e6e8b4Sopenharmony_ci 12a2e6e8b4Sopenharmony_ci if nothing { 13a2e6e8b4Sopenharmony_ci return; 14a2e6e8b4Sopenharmony_ci } 15a2e6e8b4Sopenharmony_ci 16a2e6e8b4Sopenharmony_ci if libstdcxx && libcxx { 17a2e6e8b4Sopenharmony_ci println!( 18a2e6e8b4Sopenharmony_ci "cargo:warning=-lstdc++ and -lc++ are both requested, \ 19a2e6e8b4Sopenharmony_ci using the platform's default" 20a2e6e8b4Sopenharmony_ci ); 21a2e6e8b4Sopenharmony_ci } 22a2e6e8b4Sopenharmony_ci 23a2e6e8b4Sopenharmony_ci match (libstdcxx, libcxx) { 24a2e6e8b4Sopenharmony_ci (true, false) => println!("cargo:rustc-link-lib=stdc++"), 25a2e6e8b4Sopenharmony_ci (false, true) => println!("cargo:rustc-link-lib=c++"), 26a2e6e8b4Sopenharmony_ci (false, false) | (true, true) => { 27a2e6e8b4Sopenharmony_ci // The platform's default. 28a2e6e8b4Sopenharmony_ci let out_dir = env::var_os("OUT_DIR").expect("missing OUT_DIR"); 29a2e6e8b4Sopenharmony_ci let path = PathBuf::from(out_dir).join("dummy.cc"); 30a2e6e8b4Sopenharmony_ci fs::write(&path, "int rust_link_cplusplus;\n").unwrap(); 31a2e6e8b4Sopenharmony_ci cc::Build::new().cpp(true).file(&path).compile("link-cplusplus"); 32a2e6e8b4Sopenharmony_ci } 33a2e6e8b4Sopenharmony_ci } 34a2e6e8b4Sopenharmony_ci} 35