use std::env;
use std::fs;
use std::path::PathBuf;
fn main() {
let out_dir = PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR is set by cargo"));
let target = out_dir.join("netwatch_sdk_ebpf.o");
let manifest_dir =
PathBuf::from(env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR set"));
let local_build = manifest_dir.join("target/bpf/netwatch_sdk_ebpf.o");
let prebuilt = manifest_dir.join("pre-built/netwatch_sdk_ebpf.o");
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed={}", local_build.display());
println!("cargo:rerun-if-changed={}", prebuilt.display());
let ebpf_feature = env::var("CARGO_FEATURE_EBPF").is_ok();
let source = if !ebpf_feature {
None
} else if local_build.exists() && fs::metadata(&local_build).map(|m| m.len() > 0).unwrap_or(false) {
Some(local_build.clone())
} else if prebuilt.exists() && fs::metadata(&prebuilt).map(|m| m.len() > 0).unwrap_or(false) {
Some(prebuilt.clone())
} else {
None
};
match source {
Some(path) => {
if let Err(e) = fs::copy(&path, &target) {
eprintln!(
"warning: failed to copy {} → {}: {e}; writing empty placeholder",
path.display(),
target.display()
);
let _ = fs::write(&target, []);
}
}
None => {
let _ = fs::write(&target, []);
}
}
}