#![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";