zenu-cuda-kernel-sys 0.1.0

CUDA kernel bindings for Rust
extern crate bindgen;
extern crate cc;

fn main() {
    let cuda_files = vec![
        "kernel/array_scalar.cu",
        "kernel/element_wise.cu",
        "kernel/memory_access.cu",
        "kernel/array_array.cu",
        "kernel/activations.cu",
    ];

    for cuda_file in &cuda_files {
        println!("cargo:rerun-if-changed={cuda_file}");
    }
    println!("cargo:rerun-if-changed=kernel/kernel.h");
    println!("cargo:rerun-if-changed=build.rs");

    cc::Build::new()
        .cuda(true)
        .cpp(true)
        .flag("-std=c++11")
        .flag("-cudart=shared")
        .flag("--expt-relaxed-constexpr")
        .files(cuda_files)
        .include("kernel/")
        .compile("libkernel.a");

    println!("cargo:rustc-link-lib=kernel");
    println!("cargo:rustc-link-lib=static=kernel");
    println!(
        "cargo:rustc-link-search=native={}",
        std::env::var("OUT_DIR").unwrap()
    );

    let bindings = bindgen::Builder::default()
        .ctypes_prefix("::libc")
        .size_t_is_usize(true)
        .clang_arg("-I")
        .clang_arg("/usr/local/cuda/include".to_string())
        .header("kernel/kernel.h")
        .default_alias_style(bindgen::AliasVariation::TypeAlias)
        .derive_default(true)
        .derive_eq(true)
        .derive_hash(true)
        .derive_ord(true)
        .generate()
        .expect("Unable to generate bindings");

    bindings
        .write_to_file("src/bindings.rs")
        .expect("Couldn't write bindings!");
}