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();
}