use std::path::PathBuf;
fn main() -> anyhow::Result<()> {
#[cfg(feature = "build_donna")]
build_bindings()?;
#[cfg(feature = "build_donna")]
build_lib()?;
Ok(())
}
#[cfg(feature = "build_donna")]
fn build_bindings() -> anyhow::Result<()> {
let out_path = PathBuf::from(std::env::var("OUT_DIR").unwrap());
let bindings = bindgen::Builder::default()
.clang_arg("-Ivendor/ed25519-donna")
.header("wrapper.h")
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.ctypes_prefix("cty")
.allowlist_type("ed25519_.*")
.allowlist_type("curved25519_.*")
.allowlist_function("ed25519_.*")
.allowlist_function("curve25519_.*")
.allowlist_function("curved25519_.*")
.array_pointers_in_arguments(true)
.generate()
.expect("Unable to generate bindings");
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
Ok(())
}
#[cfg(feature = "build_donna")]
fn build_lib() -> anyhow::Result<()> {
println!("cargo:rerun-if-changed=tests/extensions.c");
cc::Build::new()
.include("vendor/ed25519-donna")
.file("vendor/ed25519-donna/ed25519.c")
.file("tests/extensions.c")
.define("ED25519_REFHASH", "1")
.define("ED25519_TEST", "1")
.warnings(false)
.compile("libed25519_donna.a");
Ok(())
}