argon2-sys 0.1.0

Bindings to the argon2 C reference implementation
Documentation
use std::env;

#[cfg(feature = "simd")]
const SIMD: bool = true;

#[cfg(not(feature = "simd"))]
const SIMD: bool = false;

const FILES: &[&str] = &[
    "argon2/src/argon2.c",
    "argon2/src/core.c",
    "argon2/src/blake2/blake2b.c",
    "argon2/src/encoding.c",
    "argon2/src/thread.c",
    if SIMD {
        "argon2/src/opt.c"
    } else {
        "argon2/src/ref.c"
    },
];

const INCLUDE: &str = "argon2/include";

fn main() {
    let mut builder = cc::Build::new();
    builder
        .files(FILES)
        .include(INCLUDE)
        .flag_if_supported("-pthread")
        .flag_if_supported("-std=c89")
        .warnings(false)
        .extra_warnings(false);

    if SIMD {
        builder.flag_if_supported("-march=native");
    }

    let opt_level = env::var("OPT_LEVEL").unwrap();
    let opt_level = opt_level.parse::<usize>().unwrap();
    if opt_level < 3 {
        builder.flag_if_supported("-g");
    }

    builder.compile("argon2");
}