Files
poulpy/base2k/build.rs
Jean-Philippe Bossuat 1ac719ce7e refactoring
2025-01-27 16:23:32 +01:00

56 lines
1.8 KiB
Rust

use bindgen;
use std::env;
use std::fs;
use std::path::absolute;
use std::path::PathBuf;
use std::time::SystemTime;
fn main() {
// Path to the C header file
let header_paths: [&str; 2] = [
"spqlios-arithmetic/spqlios/coeffs/coeffs_arithmetic.h",
"spqlios-arithmetic/spqlios/arithmetic/vec_znx_arithmetic.h",
];
let out_path: PathBuf = PathBuf::from(env::var("OUT_DIR").unwrap());
let bindings_file = out_path.join("bindings.rs");
let regenerate: bool = header_paths.iter().any(|header| {
let header_metadata: SystemTime = fs::metadata(header)
.and_then(|m| m.modified())
.unwrap_or(SystemTime::UNIX_EPOCH);
let bindings_metadata: SystemTime = fs::metadata(&bindings_file)
.and_then(|m| m.modified())
.unwrap_or(SystemTime::UNIX_EPOCH);
header_metadata > bindings_metadata
});
if regenerate {
// Generate the Rust bindings
let mut builder: bindgen::Builder = bindgen::Builder::default();
for header in header_paths {
builder = builder.header(header);
}
let bindings = builder
.generate_comments(false) // Optional: includes comments in bindings
.generate_inline_functions(true) // Optional: includes inline functions
.generate()
.expect("Unable to generate bindings");
// Write the bindings to the OUT_DIR
bindings
.write_to_file(&bindings_file)
.expect("Couldn't write bindings!");
}
println!(
"cargo:rustc-link-search=native={}",
absolute("./spqlios-arithmetic/build/spqlios")
.unwrap()
.to_str()
.unwrap()
);
println!("cargo:rustc-link-lib=static=spqlios"); //"cargo:rustc-link-lib=dylib=spqlios"
}