silk-codec 0.1.0

Multi-architecture silk-codec bindings for Rust
Documentation
use std::env;
use std::path::PathBuf;

#[cfg(any(
    target_arch = "x86",
    target_arch = "x86_64",
    target_arch = "aarch64",
    target_arch = "powerpc64"
))]
static SILK_SDK_PATH: &str = "silk/src/SILK_SDK_SRC_FLP_v1.0.9";

#[cfg(target_arch = "arm")]
static SILK_SDK_PATH: &str = "silk/src/SILK_SDK_SRC_ARM_v1.0.9";

#[cfg(target_arch = "powerpc")]
static SILK_SDK_PATH: &str = "silk/src/SILK_SDK_SRC_FIX_v1.0.9";

fn main() {
    let interface_path = format!("{SILK_SDK_PATH}/interface");
    let src_path = format!("{SILK_SDK_PATH}/src");
    let mut files = Vec::new();
    files.extend(
        glob::glob(&format!("{src_path}/*.c"))
            .unwrap()
            .map(|path| path.unwrap().to_path_buf()),
    );
    files.extend(
        glob::glob(&format!("{src_path}/*.S"))
            .unwrap()
            .map(|path| path.unwrap().to_path_buf()),
    );
    cc::Build::new()
        .includes([src_path.as_str(), interface_path.as_str()])
        .files(files)
        .compile("silk");

    println!("cargo:rustc-link-lib=static=silk");

    let bindings = bindgen::Builder::default()
        .header(format!("{interface_path}/SKP_Silk_control.h"))
        .header(format!("{interface_path}/SKP_Silk_errors.h"))
        .header(format!("{interface_path}/SKP_Silk_SDK_API.h"))
        .header(format!("{interface_path}/SKP_Silk_typedef.h"))
        .parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
        .generate()
        .expect("Unable to generate bindings");

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