#![feature(exit_status_error)]

use std::env::var;
use std::path::Path;
use std::process::Command;

fn main() {
    if cfg!(feature = "cuda") {
        let out_dir = var("OUT_DIR").unwrap();
        Command::new("nvcc")
            .args(&["src/rtdefs.cu", "-c", "-o"])
            .arg(&format!("{}/rtdefs.o", out_dir))
            .status()
            .expect("PANIC: NVCC failed when building runtime. Is NVCC installed?")
            .exit_ok()
            .expect("NVCC did not succeed");
        Command::new("ar")
            .current_dir(&Path::new(&out_dir))
            .args(&["crus", "librtdefs.a", "rtdefs.o"])
            .status()
            .unwrap()
            .exit_ok()
            .expect("ar did not succeed");

        println!("cargo::rustc-link-search=native={}", out_dir);
        println!("cargo::rustc-link-search=native=/usr/lib/x86_64-linux-gnu/");
        println!("cargo::rustc-link-search=native=/usr/local/cuda/lib64");
        println!("cargo::rustc-link-search=native=/opt/cuda/lib/");
        println!("cargo::rustc-link-lib=static=rtdefs");
        println!("cargo::rustc-link-lib=cudart");
        println!("cargo::rustc-link-lib=cublas");
        println!("cargo::rerun-if-changed=src/rtdefs.cu");
    }
}