use std::env;
fn split_list(value: &str) -> Vec<String> {
value
.split([';', ':', ',', ' '])
.filter(|s| !s.trim().is_empty())
.map(|s| s.trim().to_string())
.collect()
}
fn main() {
if env::var("CARGO_FEATURE_BLAS_LAPACK").is_err() {
return;
}
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
if target_os == "macos" {
return;
}
if let Ok(vcpkg_root) = env::var("VCPKG_ROOT") {
let triplet = env::var("VCPKGRS_TRIPLET")
.ok()
.or_else(|| env::var("VCPKG_DEFAULT_TRIPLET").ok())
.unwrap_or_else(|| "x64-windows".to_string());
let lib_path = format!("{vcpkg_root}/installed/{triplet}/lib");
println!("cargo:rustc-link-search=native={lib_path}");
println!("cargo:rerun-if-env-changed=VCPKG_ROOT");
println!("cargo:rerun-if-env-changed=VCPKGRS_TRIPLET");
println!("cargo:rerun-if-env-changed=VCPKG_DEFAULT_TRIPLET");
}
if let Ok(openblas_dir) = env::var("OPENBLAS_DIR") {
println!("cargo:rustc-link-search=native={openblas_dir}/lib");
println!("cargo:rerun-if-env-changed=OPENBLAS_DIR");
}
if let Ok(lapack_lib_dir) = env::var("LAPACK_LIB_DIR") {
println!("cargo:rustc-link-search=native={lapack_lib_dir}");
println!("cargo:rerun-if-env-changed=LAPACK_LIB_DIR");
}
if let Ok(lapack_libs) = env::var("LAPACK_LIBS") {
for lib in split_list(&lapack_libs) {
println!("cargo:rustc-link-lib={lib}");
}
println!("cargo:rerun-if-env-changed=LAPACK_LIBS");
} else {
if target_os == "windows" {
println!("cargo:rustc-link-lib=lapack");
println!("cargo:rustc-link-lib=openblas");
}
}
if let Ok(blas_lib_dir) = env::var("BLAS_LIB_DIR") {
println!("cargo:rustc-link-search=native={blas_lib_dir}");
println!("cargo:rerun-if-env-changed=BLAS_LIB_DIR");
}
if let Ok(blas_libs) = env::var("BLAS_LIBS") {
for lib in split_list(&blas_libs) {
println!("cargo:rustc-link-lib={lib}");
}
println!("cargo:rerun-if-env-changed=BLAS_LIBS");
} else {
println!("cargo:rustc-link-lib=openblas");
}
}