fn main() {
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 has_avx2 = features.iter().any(|f| f.trim() == "avx2");
let has_fma = features.iter().any(|f| f.trim() == "fma");
if !has_avx2 || !has_fma {
let msg = format!(
"NeuralAmpModeler-rs requires x86-64-v3 (avx2+fma). \
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");
}
}