extern crate cc;
#[cfg(feature = "bindgen")] extern crate bindgen;
use std::env;
#[cfg(feature = "bindgen")] use std::path::PathBuf;
fn main() {
let mut cc = cc::Build::new();
if env::var("CARGO_CFG_TARGET_POINTER_WIDTH") == Ok("32".into())
|| env::var("CARGO_CFG_TARGET_ENV") == Ok("msvc".into())
{
cc
.shared_flag(true)
.define("KRML_NOUINT128", None)
.flag_if_supported("-Wno-unused-function")
.file("hacl-c/FStar.c");
}
cc
.flag_if_supported(
if cc::Build::new().get_compiler().is_like_gnu() || cc::Build::new().get_compiler().is_like_clang()
{ "-std=gnu11" } else { "-std=c11" }
)
.include("hacl-c")
.flag_if_supported("-fwrapv")
.flag_if_supported("-fomit-frame-pointer")
.flag_if_supported("-funroll-loops")
.files(&[
"hacl-c/Hacl_Salsa20.c",
"hacl-c/Hacl_Poly1305_32.c",
"hacl-c/Hacl_Poly1305_64.c",
"hacl-c/Hacl_Chacha20.c",
"hacl-c/AEAD_Poly1305_64.c",
"hacl-c/Hacl_Chacha20Poly1305.c",
"hacl-c/Hacl_HMAC_SHA2_256.c",
"hacl-c/Hacl_SHA2_256.c",
"hacl-c/Hacl_SHA2_384.c",
"hacl-c/Hacl_SHA2_512.c",
"hacl-c/Hacl_Ed25519.c",
"hacl-c/Hacl_Curve25519.c",
"hacl-c/kremlib.c",
"hacl-c/Hacl_Policies.c",
"hacl-c/NaCl.c"
])
.flag_if_supported("-Wno-unused-parameter")
.flag_if_supported("-Wno-unused-variable")
.compile("hacl");
#[cfg(all(feature = "bindgen", feature = "overwrite"))]
let outdir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap())
.join("src")
.join("imp");
#[cfg(all(feature = "bindgen", not(feature = "overwrite")))]
let outdir = PathBuf::from(env::var("OUT_DIR").unwrap());
#[cfg(feature = "bindgen")]
macro_rules! bindgen {
( @bind $input:expr => $output:expr , $white:expr ) => {
bindgen::Builder::default()
.header($input)
.ctypes_prefix("crate::libc")
.use_core()
.whitelist_type($white)
.whitelist_function($white)
.whitelist_var($white)
.generate().unwrap()
.write_to_file(outdir.join($output)).unwrap();
};
( $( $input:expr => $output:expr , $white:expr );* ) => {
$(
bindgen!(@bind $input => $output, $white);
)*
}
}
#[cfg(feature = "bindgen")]
bindgen!{
"hacl-c/AEAD_Poly1305_64.h" => "aead_poly1305.rs", "AEAD_Poly1305_.+";
"hacl-c/Hacl_Salsa20.h" => "salsa20.rs", "Hacl_Salsa20_.+";
"hacl-c/Hacl_Chacha20.h" => "chacha20.rs", "Hacl_Chacha20_.+";
"hacl-c/Hacl_Poly1305_64.h" => "poly1305.rs", "Hacl_Poly1305_.+";
"hacl-c/Hacl_HMAC_SHA2_256.h" => "hmac_sha2_256.rs", "hmac.*";
"hacl-c/Hacl_SHA2_256.h" => "sha2_256.rs", "Hacl_SHA2_256_.+";
"hacl-c/Hacl_SHA2_384.h" => "sha2_384.rs", "Hacl_SHA2_384_.+";
"hacl-c/Hacl_SHA2_512.h" => "sha2_512.rs", "Hacl_SHA2_512_.+";
"hacl-c/Hacl_Ed25519.h" => "ed25519.rs", "Hacl_Ed25519_.+";
"hacl-c/Hacl_Curve25519.h" => "curve25519.rs", "Hacl_Curve25519_.+";
"hacl-c/Hacl_Chacha20Poly1305.h" => "chacha20poly1305.rs", "Hacl_Chacha20Poly1305_.+";
"hacl-c/Hacl_Policies.h" => "hacl_policies.rs", "Hacl_Policies_.+";
"hacl-c/NaCl.h" => "nacl.rs", "NaCl_.+"
};
}