chuda 0.1.1

CUDA-accelerated high quality truecolour ANSI image renderer
use std::{env, path::PathBuf, process::Command};
fn main() {
    println!("cargo:rerun-if-changed=cuda/renderer.cu");
    let out = PathBuf::from(env::var_os("OUT_DIR").unwrap());
    let obj = out.join("renderer.o");
    let lib = out.join("librenderer_cuda.a");
    check(
        Command::new("nvcc")
            .args([
                "-O3",
                "--use_fast_math",
                "-std=c++17",
                "-Xcompiler",
                "-fPIC",
                "-c",
                "cuda/renderer.cu",
                "-o",
            ])
            .arg(&obj),
    );
    check(Command::new("ar").arg("crus").arg(&lib).arg(&obj));
    println!("cargo:rustc-link-search=native={}", out.display());
    println!("cargo:rustc-link-search=native=/usr/local/cuda/lib64");
    println!("cargo:rustc-link-lib=static=renderer_cuda");
    println!("cargo:rustc-link-lib=dylib=cudart");
    println!("cargo:rustc-link-lib=dylib=stdc++");
}
fn check(command: &mut Command) {
    let status = command
        .status()
        .unwrap_or_else(|e| panic!("failed to run {command:?}: {e}"));
    assert!(status.success(), "command failed: {command:?}");
}