fn main() {
validate_backend_features();
println!("cargo:rerun-if-changed=build.rs");
}
fn validate_backend_features() {
let gpu_backends = [
cfg!(feature = "cuda"),
cfg!(feature = "metal"),
cfg!(feature = "vulkan"),
];
let enabled_count = gpu_backends.iter().filter(|&&enabled| enabled).count();
if enabled_count > 1 {
println!("cargo:warning=Multiple GPU backends are enabled. This may cause conflicts.");
println!("cargo:warning=It's recommended to use only one GPU backend at a time.");
println!(
"cargo:warning=Enabled backends: cuda={}, metal={}, vulkan={}",
cfg!(feature = "cuda"),
cfg!(feature = "metal"),
cfg!(feature = "vulkan")
);
}
#[cfg(all(target_os = "macos", feature = "cuda"))]
println!("cargo:warning=CUDA feature enabled on macOS. CUDA is not supported on macOS.");
#[cfg(all(target_os = "windows", feature = "metal"))]
println!("cargo:warning=Metal feature enabled on Windows. Metal is only supported on macOS.");
#[cfg(all(target_os = "linux", feature = "metal"))]
println!("cargo:warning=Metal feature enabled on Linux. Metal is only supported on macOS.");
if cfg!(all(target_os = "macos", feature = "metal")) {
println!("cargo:rustc-env=EMBELLAMA_BACKEND=metal");
} else if cfg!(all(not(target_os = "macos"), feature = "cuda")) {
println!("cargo:rustc-env=EMBELLAMA_BACKEND=cuda");
} else if cfg!(feature = "vulkan") {
println!("cargo:rustc-env=EMBELLAMA_BACKEND=vulkan");
} else if cfg!(feature = "openmp") {
println!("cargo:rustc-env=EMBELLAMA_BACKEND=openmp");
} else if cfg!(feature = "native") {
println!("cargo:rustc-env=EMBELLAMA_BACKEND=native");
} else {
println!("cargo:rustc-env=EMBELLAMA_BACKEND=cpu");
}
}