lc3-sys 0.1.0

Unsafe rust bindings to the lc3 audio compression library
Documentation
use bindgen::{CargoCallbacks, MacroTypeVariation};
use std::env;
use std::path::PathBuf;

fn main() {
    let dst = PathBuf::from(env::var_os("OUT_DIR").unwrap());

    let c_files = [
        "attdet.c", "bits.c", "bwdet.c", "energy.c", "lc3.c", "ltpf.c", "mdct.c", "plc.c", "sns.c",
        "spec.c", "tables.c", "tns.c",
    ];

    let mut ccomp = cc::Build::new();

    ccomp.include("liblc3/include");
    println!("cargo:include=liblc3/include");
    println!("cargo:rustc-link-lib=static=liblc3");
    let link_dir = dst.join("lib").to_str().map(str::to_string).unwrap();
    println!("cargo:rustc-link-search={link_dir}");
    println!("cargo:static=1");

    for path in c_files {
        ccomp.file(format!("liblc3/src/{path}"));
    }

    ccomp.define("FLOATING_POINT", None).define("EXPORT", "");
    ccomp.warnings(false);
    ccomp.out_dir(dst.join("lib"));
    ccomp.compile("liblc3");

    let bindings = bindgen::Builder::default()
        .default_macro_constant_type(MacroTypeVariation::Signed)
        .header("liblc3/include/lc3.h")
        .parse_callbacks(Box::new(CargoCallbacks::new()))
        .generate()
        .expect("Unable to generate bindings");

    let out_path = PathBuf::from(env::var_os("OUT_DIR").unwrap()).join("bindings.rs");
    bindings
        .write_to_file(out_path)
        .expect("Failed to write bindings");
}