miniring 1.0.0

liburing mini bindings
Documentation
use std::env;
use std::path::Path;
use std::process::Command;

fn main() {
    println!("cargo:rerun-if-changed=liburing");
    assert!(cfg!(target_os = "linux"));
    let src = Path::new("liburing")
        .canonicalize()
        .unwrap();
    let out = Path::new(&env::var("OUT_DIR").unwrap())
        .canonicalize()
        .unwrap();
    let build = out.join("liburing");
    Command::new("rm")
        .arg("-rf")
        .arg(&build)
        .status()
        .unwrap();
    Command::new("cp")
        .arg("-r")
        .arg(&src)
        .arg(&build)
        .status()
        .unwrap();
    Command::new("make")
        .arg("-C")
        .arg(&build)
        .status()
        .unwrap();
    let build_bin = build.join("src/liburing-ffi.a");
    let link_bin = out.join("liburing-ffi-miniring.a");
    Command::new("mv")
        .arg(build_bin)
        .arg(link_bin)
        .status()
        .unwrap();
    println!("cargo:rustc-link-search={}",out.display());
    println!("cargo:rustc-link-lib=uring-ffi-miniring");
    let include = build.join("src/include");
    let ffi_c = build.join("src/ffi.c");
    let bindings = bindgen::builder()
        .clang_arg(format!("-F{}",include.display()))
        .header(ffi_c.to_str().unwrap())
        .merge_extern_blocks(true)
        .explicit_padding(true)
        .default_enum_style(bindgen::EnumVariation::Rust { non_exhaustive: false })
        .derive_debug(false)
        .derive_default(false)
        .derive_copy(true)
        .use_core()
        .opaque_type("io_uring")
        .opaque_type("io_uring_sqe")
        .no_copy("io_uring")
        .generate()
        .unwrap();
    bindings.write_to_file(out.join("bindings.rs"))
        .unwrap();
}