use std::env;
use std::path::PathBuf;
use cmake::Config;
fn main() {
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
println!("cargo:rerun-if-changed=vendor/*");
fs_extra::dir::copy(
"vendor/",
&out_dir,
&fs_extra::dir::CopyOptions::new().overwrite(true),
)
.expect("Failed to copy vendor directory");
let libdir_path = out_dir
.join("vendor")
.canonicalize()
.expect("cannot canonicalize path");
let headers_path = libdir_path.join("include/libobsensor/ObSensor.h");
let build_destination = Config::new(&libdir_path)
.define("CMAKE_POLICY_VERSION_MINIMUM", "3.5")
.define("OB_INSTALL_EXAMPLES_SOURCE", "OFF")
.define("OB_BUILD_EXAMPLES", "OFF")
.define("OB_BUILD_TESTS", "OFF")
.define("OB_BUILD_DOCS", "OFF")
.define("OB_BUILD_TOOLS", "OFF")
.build();
println!(
"cargo:rustc-link-search=native={}",
build_destination.join("lib").display()
);
println!("cargo:rustc-link-lib=dylib=OrbbecSDK");
let bindings = bindgen::Builder::default()
.header(headers_path.to_str().unwrap())
.clang_arg(format!("-I{}", libdir_path.join("include/").display()))
.generate()
.expect("Unable to generate bindings");
let _ = fs_extra::dir::remove(&out_dir.join("vendor"));
let out_path = out_dir.join("bindings.rs");
bindings
.write_to_file(out_path)
.expect("Couldn't write bindings!");
}