pqcrypto-internals 0.2.2

bindings to common cryptography
Documentation
extern crate cc;

use std::path::Path;

fn main() {
    let includepath = Path::new("include").canonicalize().unwrap();
    println!("cargo:includepath={}", includepath.to_str().unwrap());

    let cfiledir = Path::new("cfiles");
    let common_files = vec![
        cfiledir.join("fips202.c"),
        cfiledir.join("aes.c"),
        cfiledir.join("sha2.c"),
        cfiledir.join("nistseedexpander.c"),
        cfiledir.join("sp800-185.c"),
    ];

    cc::Build::new()
        .include(&includepath)
        .files(common_files.into_iter())
        .compile("pqclean_common");

    if cfg!(target_arch = "x86") || cfg!(target_arch = "x86_64") {
        let mut builder = cc::Build::new();
        if cfg!(target_env = "msvc") {
            builder.flag("/arch:AVX2");
        } else {
            builder.flag("-mavx2");
        };
        builder
            .file(
                &cfiledir
                    .join("keccak4x")
                    .join("KeccakP-1600-times4-SIMD256.c"),
            )
            .compile("keccak4x");
        println!("cargo:rustc-link-lib=keccak4x");
    }

    println!("cargo:rustc-link-lib=pqclean_common");
}