fn main() {
if std::env::var("DOCS_RS").is_ok() {
return;
}
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
let target_env = std::env::var("CARGO_CFG_TARGET_ENV").unwrap_or_default();
let is_linux_elf = target_os == "linux" && target_env == "gnu";
let target_feature = std::env::var("CARGO_CFG_TARGET_FEATURE").unwrap_or_default();
let features: Vec<&str> = target_feature.split(',').collect();
let required_v3_features = [
"avx", "avx2", "bmi1", "bmi2", "f16c", "fma", "lzcnt", "movbe",
];
let missing_features: Vec<&str> = required_v3_features
.iter()
.copied()
.filter(|&req| !features.iter().any(|f| f.trim() == req))
.collect();
if !missing_features.is_empty() {
let missing_str = missing_features.join(", ");
let msg = format!(
"NeuralAmpModeler-rs requires full x86-64-v3 target support. \
Missing required feature(s): {missing_str}. \
Set RUSTFLAGS=\"-Ctarget-cpu=x86-64-v3\" to compile. \
Detected features: {target_feature}"
);
println!("cargo:warning={msg}");
std::process::exit(1);
}
if is_linux_elf {
let manifest_dir = env!("CARGO_MANIFEST_DIR");
println!("cargo:rustc-link-arg=-Wl,--undefined-version");
println!(
"cargo:rustc-link-arg=-Wl,--version-script={manifest_dir}/.cargo/hide-libm-shadow.map"
);
println!("cargo:rerun-if-changed=.cargo/hide-libm-shadow.map");
}
}