mirror of
https://github.com/bspeice/aeron-rs
synced 2025-07-15 20:54:52 -04:00
Start on an aeron-rs crate
This commit is contained in:
61
aeron_driver-sys/build.rs
Normal file
61
aeron_driver-sys/build.rs
Normal file
@ -0,0 +1,61 @@
|
||||
use cmake::Config;
|
||||
|
||||
use std::env;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::fs::canonicalize;
|
||||
|
||||
pub enum LinkType {
|
||||
Dynamic,
|
||||
Static
|
||||
}
|
||||
|
||||
impl LinkType {
|
||||
fn detect() -> LinkType {
|
||||
if cfg!(feature = "static") {
|
||||
LinkType::Static
|
||||
} else {
|
||||
LinkType::Dynamic
|
||||
}
|
||||
}
|
||||
|
||||
fn link_lib(&self) -> &'static str {
|
||||
match self {
|
||||
LinkType::Dynamic => "dylib=",
|
||||
LinkType::Static => "static="
|
||||
}
|
||||
}
|
||||
|
||||
fn target_name(&self) -> &'static str {
|
||||
match self {
|
||||
LinkType::Dynamic => "aeron_driver",
|
||||
LinkType::Static => "aeron_driver_static"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
println!("cargo:rerun-if-changed=build.rs");
|
||||
println!("cargo:rerun-if-changed=bindings.h");
|
||||
|
||||
let aeron_path = canonicalize(Path::new("./aeron")).unwrap();
|
||||
let header_path = aeron_path.join("aeron-driver/src/main/c");
|
||||
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
|
||||
|
||||
let link_type = LinkType::detect();
|
||||
println!("cargo:rustc-link-lib={}{}", link_type.link_lib(), link_type.target_name());
|
||||
let lib_dir = Config::new(&aeron_path)
|
||||
.build_target(link_type.target_name())
|
||||
.build();
|
||||
println!("cargo:rustc-link-search=native={}", lib_dir.join("build/lib").display());
|
||||
|
||||
println!("cargo:include={}", header_path.display());
|
||||
let bindings = bindgen::Builder::default()
|
||||
.clang_arg(&format!("-I{}", header_path.display()))
|
||||
.header("bindings.h")
|
||||
.generate()
|
||||
.expect("Unable to generate aeron_driver bindings");
|
||||
|
||||
bindings
|
||||
.write_to_file(out_path.join("bindings.rs"))
|
||||
.expect("Couldn't write bindings!");
|
||||
}
|
Reference in New Issue
Block a user