extern crate bindgen;
use std::env;
use std::path::PathBuf;
fn build_capi() {
cc::Build::new()
.file("capi/src/api.c")
.include("capi/src")
.flag("-Wno-nullability-completeness")
.compile("libaccelerate_sparse.a")
}
fn main() {
build_capi();
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
let sdk_root = PathBuf::from("/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk");
let mut framework_path = sdk_root.clone();
framework_path.push("System/Library/Frameworks");
let mut include_path = framework_path.clone();
include_path.push("Accelerate.framework/Headers");
println!("cargo:rustc-link-search=native={}", out_path.display());
println!("cargo:rustc-link-lib=static=accelerate_sparse");
println!("cargo:rustc-link-lib=framework=Accelerate");
println!("cargo:rerun-if-changed=capi");
let bindings = bindgen::Builder::default()
.header("capi/src/api.h")
.clang_arg(&format!("-F{}", framework_path.display()))
.clang_arg(&format!("-I{}", include_path.display()))
.clang_arg("-fblocks")
.generate_block(true)
.block_extern_crate(true)
.allowlist_function("Sparse.*")
.allowlist_type("Sparse.*")
.allowlist_var("Sparse.*")
.generate_comments(false) .layout_tests(false) .parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.generate()
.expect("Unable to generate bindings");
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}