use std::env;
use std::path::PathBuf;
fn main() {
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
let mut base_dir = manifest_dir.join("sppark");
if !base_dir.exists() {
base_dir = manifest_dir
.parent()
.expect("can't access parent of current directory")
.into();
println!(
"cargo:rerun-if-changed={}",
base_dir.join("ec").to_string_lossy()
);
println!(
"cargo:rerun-if-changed={}",
base_dir.join("ff").to_string_lossy()
);
println!(
"cargo:rerun-if-changed={}",
base_dir.join("msm").to_string_lossy()
);
println!(
"cargo:rerun-if-changed={}",
base_dir.join("util").to_string_lossy()
);
}
println!("cargo:ROOT={}", base_dir.to_string_lossy());
let nvcc = match env::var("NVCC") {
Ok(var) => which::which(var),
Err(_) => which::which("nvcc"),
};
if nvcc.is_ok() {
let util_dir = base_dir.join("util");
let mut nvcc = cc::Build::new();
nvcc.cuda(true);
nvcc.include(base_dir);
nvcc.file("src/lib.cpp")
.file(util_dir.join("all_gpus.cpp"))
.compile("sppark_cuda");
println!("cargo:rerun-if-changed=src/lib.cpp");
println!("cargo:rustc-cfg=feature=\"cuda\"");
}
println!("cargo:rerun-if-env-changed=NVCC");
}