use std::env;
use std::path::PathBuf;
use std::process::Command;
fn main() {
let src_dir = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap());
let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap());
let out_dir_str = out_dir.to_str().unwrap();
if cfg!(target_os = "linux") {
let status = Command::new("make")
.arg("install")
.env("BUILD_STATIC_ONLY", "y")
.env("PREFIX", "/")
.env("LIBDIR", "")
.env("OBJDIR", out_dir.join("obj").to_str().unwrap())
.env("DESTDIR", out_dir_str)
.env("CFLAGS", "-g -O2 -Werror -Wall -fPIC")
.current_dir(src_dir.join("libbpf/src"))
.status()
.unwrap();
assert!(status.success());
let status = Command::new("make")
.arg("clean")
.current_dir(src_dir.join("libbpf/src"))
.status()
.unwrap();
assert!(status.success());
cc::Build::new()
.file("libbpf_sys.c")
.include(src_dir.join("libbpf/include"))
.include(src_dir.join("libbpf/include/uapi"))
.warnings(false)
.flag("-O2")
.out_dir(out_dir_str)
.compile("libbpf_sys.rs");
println!("cargo:rustc-link-search=native={}", out_dir_str);
println!("cargo:rustc-link-lib=elf");
println!("cargo:rustc-link-lib=z");
println!("cargo:rustc-link-lib=static=bpf");
}
}
fn _create_binding(name: &str) {
let bind = bindgen::Builder::default()
.header(&format!("{}.h", name))
.layout_tests(false)
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.generate()
.expect(&format!("Unable to generate {}", name));
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bind
.write_to_file(out_path.join(&format!("{}.rs", name)))
.expect(&format!("Couldn't write {} binding!", name));
}