spoa-sys 0.2.1

Low-level bindings to the spoa C++ library.
Documentation
use walkdir::WalkDir;

fn main() {
    println!("cargo:rerun-if-changed=build.rs");

    let use_simde = if std::env::var("CARGO_FEATURE_SIMDE").is_ok() {
        "ON"
    } else {
        "OFF"
    };

    let dst = cmake::Config::new("spoa")
        .define("spoa_build_exe", "OFF")
        .define("spoa_build_tests", "OFF")
        .define("spoa_optimize_for_native", "OFF")
        .define("spoa_use_simde", use_simde)
        .build();
    let lib64 = dst.join("lib64");
    let lib = dst.join("lib");
    println!("cargo:rustc-link-search=native={}", lib64.display());
    println!("cargo:rustc-link-search=native={}", lib.display());
    println!("cargo:rustc-link-lib=static=spoa");

    println!("cargo:rerun-if-changed=spoa/CMakeLists.txt");
    for entry in WalkDir::new("spoa").into_iter().filter_map(Result::ok) {
        if let Some(ext) = entry.path().extension() {
            if ext == "hpp" || ext == "cpp" {
                println!("cargo:rerun-if-changed={}", entry.path().display());
            }
        }
    }

    println!("cargo:rerun-if-changed=include/bindings.hpp");
    println!("cargo:rerun-if-changed=src/bindings.cpp");
    println!("cargo:rerun-if-changed=src/lib.rs");

    cxx_build::bridge("src/lib.rs")
        .flag("-std=c++11")
        .file("src/bindings.cpp")
        .compile("spoa_sys");
}