use std::env;
use std::path::PathBuf;
fn main() {
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
println!("cargo:include={}", manifest_dir.join("include").display());
if env::var_os("CARGO_FEATURE_NO_LINK").is_some() {
return;
}
let lib_dir = env::var("BASERT_LIB_DIR")
.or_else(|_| env::var("BASERT_LIB_PATH"))
.map(PathBuf::from)
.unwrap_or_else(|_| {
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
manifest_dir.join("..").join("..").join("..").join("build")
});
let lib_dir = lib_dir.canonicalize().unwrap_or_else(|_| {
println!(
"cargo:warning=BaseRT library directory not found: {}. Set BASERT_LIB_DIR or build with `make shared`.",
lib_dir.display()
);
lib_dir
});
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
let dylib_file = match target_os.as_str() {
"macos" => "libbaseRT.dylib",
"windows" => "baseRT.dll",
_ => "libbaseRT.so", };
println!("cargo:rustc-link-search=native={}", lib_dir.display());
if cfg!(feature = "static") {
println!("cargo:rustc-link-lib=static=baseRT_engine");
if target_os == "macos" {
println!("cargo:rustc-link-lib=framework=Metal");
println!("cargo:rustc-link-lib=framework=Foundation");
println!("cargo:rustc-link-lib=framework=MetalPerformanceShaders");
println!("cargo:rustc-link-lib=framework=Accelerate");
println!("cargo:rustc-link-lib=framework=IOKit");
println!("cargo:rustc-link-lib=c++");
}
println!(
"cargo:rerun-if-changed={}",
lib_dir.join("libbaseRT_engine.a").display()
);
} else {
println!("cargo:rustc-link-lib=dylib=baseRT");
if target_os != "windows" {
println!("cargo:rustc-link-arg=-Wl,-rpath,{}", lib_dir.display());
}
println!(
"cargo:rerun-if-changed={}",
lib_dir.join(dylib_file).display()
);
}
println!("cargo:rerun-if-env-changed=BASERT_LIB_DIR");
println!("cargo:rerun-if-env-changed=BASERT_LIB_PATH");
}