43 lines
1 KiB
Rust
43 lines
1 KiB
Rust
use std::process::Command;
|
|
|
|
fn main() {
|
|
println!("cargo:rerun-if-changed=kernels/");
|
|
|
|
if std::env::var("CARGO_FEATURE_CUDA").is_ok() {
|
|
compile_kernels();
|
|
}
|
|
}
|
|
|
|
fn compile_kernels() {
|
|
let out_dir = std::env::var("OUT_DIR").unwrap();
|
|
|
|
let kernels = ["test_kernels"];
|
|
|
|
for name in kernels {
|
|
let src = format!("kernels/{}.cu", name);
|
|
let dst = format!("{}/{}.ptx", out_dir, name);
|
|
|
|
println!("cargo:rerun-if-changed={}", src);
|
|
|
|
let status = Command::new("nvcc")
|
|
.args([
|
|
"-ptx",
|
|
"-o",
|
|
&dst,
|
|
&src,
|
|
"--gpu-architecture=sm_75", // Adjust for your GPU
|
|
"-O3",
|
|
"--use_fast_math",
|
|
])
|
|
.status()
|
|
.expect("Failed to run nvcc");
|
|
|
|
if !status.success() {
|
|
panic!("nvcc failed on {}", src);
|
|
}
|
|
|
|
println!("cargo:warning=Compiled {} -> {}", src, dst);
|
|
}
|
|
|
|
println!("cargo:rustc-env=KERNEL_PTX_DIR={}", out_dir);
|
|
}
|