extern crate bindgen; use std::env; use std::path::PathBuf; fn main() { let target_os = env::var("CARGO_CFG_TARGET_OS").expect("Unknown target OS"); let (link_lib, include_path) = match target_os.as_str() { "windows" => ("xiapi64","C:/XIMEA/API/xiAPI"), "linux" => ("m3api", "/opt/XIMEA/include"), "macos" => ("m3api","/Library/Frameworks/m3api.framework/Headers"), x => panic!("Unknown platform: {x}"), }; println!("cargo:rerun-if-changed=wrapper.h"); if target_os.as_str() == "macos" { println!("cargo:rustc-link-search=framework=/Library/Frameworks"); println!("cargo:rustc-link-lib=framework=m3api"); } else { println!("cargo:rustc-link-lib={}", link_lib); } if target_os.as_str() == "windows" { println!("cargo:rustc-link-search={}",include_path); } let bindings = bindgen::Builder::default() .header("wrapper.h") .clang_arg(format!("-I{}", include_path)) .constified_enum_module(".*") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .derive_default(true) .generate() .expect("Unable to generate bindings"); let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); bindings .write_to_file(out_path.join("bindings.rs")) .expect("Couldn't write bindings!"); }