szs 0.3.7

Lightweight crate for SZS ("Yaz0") compression/decompression used in the Nintendo GameCube/Wii games. The library provides C, C++ and C# bindings. YAY0 ("SZP") is supported, too.
Documentation
#[cfg(feature = "run_bindgen")]
extern crate bindgen;
extern crate cc;

#[cfg(feature = "run_bindgen")]
use std::env;
#[cfg(feature = "run_bindgen")]
use std::path::PathBuf;

fn main() {
    println!(
        "cargo:rustc-env=TARGET={}",
        std::env::var("TARGET").unwrap()
    );

    let mut build = cc::Build::new();
    build.cpp(true);

    let compiler = build.get_compiler();
    if !compiler.is_like_gnu() && !compiler.is_like_clang() {
        build.flag("/std:c++latest");
        build.flag("/O2");
    } else {
        build.flag("-std=c++2b");
        build.flag("-O3");
    }

    #[cfg(target_arch = "x86_64")]
    build.flag("-DARCH_X64=1");

    build.include(".").include("src");
    build.file("src/SZS.cpp");
    build.file("src/CTGP.cpp");
    build.file("src/bindings.cpp");
    build.compile("szs.a");

    #[cfg(feature = "run_bindgen")]
    {
        let bindings = bindgen::Builder::default()
            .header("src/bindings.h")
            .clang_arg("-fvisibility=default")
            .parse_callbacks(Box::new(bindgen::CargoCallbacks))
            .generate()
            .expect("Unable to generate bindings");

        let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
        bindings
            .write_to_file(out_path.join("bindings.rs"))
            .expect("Couldn't write bindings");
    }
}