extern crate cmake;
use cmake::Config;
use std::env;
use std::path::PathBuf;
fn main() {
let mut config = Config::new("src/mlx-c");
config.very_verbose(true);
config.define("CMAKE_INSTALL_PREFIX", ".");
#[cfg(debug_assertions)]
{
config.define("CMAKE_BUILD_TYPE", "Debug");
}
#[cfg(not(debug_assertions))]
{
config.define("CMAKE_BUILD_TYPE", "Release");
}
config.define("MLX_BUILD_METAL", "OFF");
config.define("MLX_BUILD_ACCELERATE", "OFF");
#[cfg(feature = "metal")]
{
config.define("MLX_BUILD_METAL", "ON");
}
#[cfg(feature = "accelerate")]
{
config.define("MLX_BUILD_ACCELERATE", "ON");
}
let dst = config.build();
println!("cargo:rustc-link-search=native={}/build/lib", dst.display());
println!("cargo:rustc-link-lib=static=mlx");
println!("cargo:rustc-link-lib=static=mlxc");
println!("cargo:rustc-link-lib=c++");
println!("cargo:rustc-link-lib=dylib=objc");
println!("cargo:rustc-link-lib=framework=Foundation");
#[cfg(feature = "metal")]
{
println!("cargo:rustc-link-lib=framework=Metal");
}
#[cfg(feature = "accelerate")]
{
println!("cargo:rustc-link-lib=framework=Accelerate");
}
let bindings = bindgen::Builder::default()
.header("src/mlx-c/mlx/c/mlx.h")
.header("src/mlx-c/mlx/c/linalg.h")
.header("src/mlx-c/mlx/c/error.h")
.header("src/mlx-c/mlx/c/transforms_impl.h")
.clang_arg("-Isrc/mlx-c")
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.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!");
}