wiringop-rs/build.rs

46 lines
1.2 KiB
Rust

use std::{
env::{self, set_current_dir},
fs,
path::PathBuf,
};
fn main() {
let wiringop_path = PathBuf::from(
env::var("WIRINGOP_PATH").expect("could not retrieve wiringOP path from env"),
)
.canonicalize()
.expect("cannot canonicalize path");
let mut cc = cc::Build::new();
cc.files(
glob::glob(&format!("{}/wiringPi/*.c", wiringop_path.to_str().unwrap()))
.unwrap()
.filter_map(|e| e.ok()),
)
.include(format!("{}/wiringPi/", wiringop_path.to_str().unwrap()));
let target = std::env::var("TARGET").unwrap();
if target.starts_with("aarch64") {
cc.flag("-O2");
}
cc.static_flag(true).compile("wiringop");
let builder = bindgen::Builder::default()
.header("./ffi/wrapper.h")
.detect_include_paths(true);
let bindings = builder
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.generate()
.expect("unable to generate bindings");
let out_path = PathBuf::from(env::var("OUT_DIR").expect("failed to get out dir for bindings"))
.join("bindings.rs");
bindings
.write_to_file(out_path)
.expect("couldn't write bindings");
}