ngt-sys 2.2.2

Native bindings to the NGT library.
Documentation
use std::env;
use std::path::PathBuf;

fn main() {
    let out_dir = env::var("OUT_DIR").unwrap();

    let mut config = cmake::Config::new("NGT");
    if env::var("CARGO_FEATURE_SHARED_MEM").is_ok() {
        config.define("NGT_SHARED_MEMORY_ALLOCATOR", "ON");
    }
    if env::var("CARGO_FEATURE_LARGE_DATA").is_ok() {
        config.define("NGT_LARGE_DATASET", "ON");
    }
    if env::var("CARGO_FEATURE_QUANTIZED").is_err() {
        config.define("NGT_QBG_DISABLED", "ON");
    } else {
        config.define("CMAKE_BUILD_TYPE", "Release");
        if env::var("CARGO_FEATURE_QG_OPTIM").is_ok() {
            config.define("NGTQG_NO_ROTATION", "ON");
            config.define("NGTQG_ZERO_GLOBAL", "ON");
        }
    }
    let dst = config.build();

    println!("cargo:rustc-link-search=native={}/lib", dst.display());
    #[cfg(not(feature = "static"))]
    {
        println!("cargo:rustc-link-lib=dylib=ngt");
    }
    #[cfg(feature = "static")]
    {
        cpp_build::Config::new()
            .include(format!("{}/lib", out_dir))
            .build("src/lib.rs");
        println!("cargo:rustc-link-lib=static=ngt");
        println!("cargo:rustc-link-lib=gomp");

        if env::var("CARGO_FEATURE_QUANTIZED").is_ok() {
            println!("cargo:rustc-link-lib=blas");
            println!("cargo:rustc-link-lib=lapack");
        }
    }

    let capi_header = if cfg!(feature = "quantized") {
        format!("{}/include/NGT/NGTQ/Capi.h", dst.display())
    } else {
        format!("{}/include/NGT/Capi.h", dst.display())
    };

    let out_path = PathBuf::from(out_dir);
    let bindings = bindgen::Builder::default()
        .clang_arg(format!("-I{}/include", dst.display()))
        .header(capi_header)
        .generate()
        .expect("Unable to generate bindings");
    bindings
        .write_to_file(out_path.join("bindings.rs"))
        .expect("Couldn't write bindings");
}