arnaucube
arnaucube/miden-cryptoPublic Self-hosted repository
miden-crypto/build.rs
build.rsRaw
 1fn main() {
 2    #[cfg(feature = "std")]
 3    compile_rpo_falcon();
 4
 5    #[cfg(target_feature = "sve")]
 6    compile_arch_arm64_sve();
 7}
 8
 9#[cfg(feature = "std")]
10fn compile_rpo_falcon() {
11    use std::path::PathBuf;
12
13    const RPO_FALCON_PATH: &str = "src/dsa/rpo_falcon512/falcon_c";
14
15    println!("cargo:rerun-if-changed={RPO_FALCON_PATH}/falcon.h");
16    println!("cargo:rerun-if-changed={RPO_FALCON_PATH}/falcon.c");
17    println!("cargo:rerun-if-changed={RPO_FALCON_PATH}/rpo.h");
18    println!("cargo:rerun-if-changed={RPO_FALCON_PATH}/rpo.c");
19
20    let target_dir: PathBuf = ["PQClean", "crypto_sign", "falcon-512", "clean"].iter().collect();
21    let common_dir: PathBuf = ["PQClean", "common"].iter().collect();
22
23    let scheme_files = glob::glob(target_dir.join("*.c").to_str().unwrap()).unwrap();
24    let common_files = glob::glob(common_dir.join("*.c").to_str().unwrap()).unwrap();
25
26    cc::Build::new()
27        .include(&common_dir)
28        .include(target_dir)
29        .files(scheme_files.into_iter().map(|p| p.unwrap().to_string_lossy().into_owned()))
30        .files(common_files.into_iter().map(|p| p.unwrap().to_string_lossy().into_owned()))
31        .file(format!("{RPO_FALCON_PATH}/falcon.c"))
32        .file(format!("{RPO_FALCON_PATH}/rpo.c"))
33        .flag("-O3")
34        .compile("rpo_falcon512");
35}
36
37#[cfg(target_feature = "sve")]
38fn compile_arch_arm64_sve() {
39    const RPO_SVE_PATH: &str = "arch/arm64-sve/rpo";
40
41    println!("cargo:rerun-if-changed={RPO_SVE_PATH}/library.c");
42    println!("cargo:rerun-if-changed={RPO_SVE_PATH}/library.h");
43    println!("cargo:rerun-if-changed={RPO_SVE_PATH}/rpo_hash.h");
44
45    cc::Build::new()
46        .file(format!("{RPO_SVE_PATH}/library.c"))
47        .flag("-march=armv8-a+sve")
48        .flag("-O3")
49        .compile("rpo_sve");
50}