ort2-sys 0.1.1

onnxruntime wrapper c/c++ api sys library
Documentation
#![allow(unused)]
use bindgen::builder;

fn main() {
    let _ = dotenv::dotenv();

    println!("cargo::rerun-if-env-changed={}", ORT_INC_PATH);
    println!("cargo::rerun-if-env-changed={}", ORT_LIB_PATH);

    #[cfg(feature = "bindgen")]
    {
        gen();
    }

    link();
}

fn link() {
    if let Ok(lib) = std::env::var(ORT_LIB_PATH) {
        println!("cargo::rustc-link-search={}", lib);
    }
    println!("cargo::rustc-link-lib=onnxruntime");
}

fn gen() {
    let mut builder = builder();

    if let Ok(inc) = std::env::var(ORT_INC_PATH) {
        let header = format!("{}/{}", inc, ORT_C_API_HEADER);
        builder = builder.clang_arg(format!("-I{}", inc)).header(header);
    } else {
        builder = builder.header(ORT_C_API_HEADER);
    }

    let bindings = builder
        .default_enum_style(bindgen::EnumVariation::Rust {
            non_exhaustive: true,
        })
        .generate()
        .expect("failed to generate bindings");

    let tr = triplet().expect("failed to get triplet");
    let out = format!("{}/src/{}.rs", env!("CARGO_MANIFEST_DIR"), tr);
    bindings
        .write_to_file(out)
        .expect("failed to write bindings");
}

fn triplet() -> Option<String> {
    #[cfg(all(target_os = "macos", target_arch = "aarch64"))]
    {
        return Some("macos-aarch64".into());
    }

    #[cfg(all(target_os = "linux", target_arch = "x86_64"))]
    {
        return Some("linux-x86_64".into());
    }

    #[cfg(all(target_os = "windows", target_arch = "x86_64"))]
    {
        return Some("windows-x86_64".into());
    }

    None
}

static ORT_LIB_PATH: &'static str = "ORT_LIB_PATH";
static ORT_INC_PATH: &'static str = "ORT_INC_PATH";
static ORT_C_API_HEADER: &'static str = "onnxruntime_c_api.h";