fn main() {
println!("cargo:rerun-if-env-changed=VSAG_LIB_PATH");
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rustc-link-lib=dylib=vsag");
if let Some(lib_path) = vsag_lib_path() {
println!("cargo:rustc-link-search=native={lib_path}",);
}
}
#[cfg(feature = "vendored")]
macro_rules! define_config_based_on_features {
($config:ident, $($feature:expr),*) => {
$(
$config.define(
$feature.to_uppercase().replace("-", "_"),
if cfg!(feature = $feature) {
"ON"
} else {
"OFF"
},
);
)*
};
}
fn vsag_lib_path() -> Option<String> {
#[cfg(feature = "vendored")]
{
let mut config = cmake::Config::new("vsag-sys");
config.env("TARGET", "");
define_config_based_on_features!(
config,
"enable-intel-mkl",
"enable-libcxx",
"enable-cxx11-abi"
);
let dst = config.build();
for path in ["lib64", "lib"] {
let lib = dst.join(path);
if lib.join("libvsag.so").exists() {
return Some(lib.display().to_string());
}
}
}
std::env::var("VSAG_LIB_PATH").map_or(None, |v| Some(v.to_string()))
}