fn build_ebpf()

in nfm-controller/build.rs [44:85]


fn build_ebpf(release: bool) {
    let metadata = MetadataCommand::new()
        .manifest_path("../Cargo.toml")
        .exec()
        .expect("Failed to get cargo metadata");

    let target_dir = Path::new("..").canonicalize().unwrap().join("target/ebpf");
    let target_triple = metadata.workspace_metadata["bpf_target"]
        .as_str()
        .expect("Failed to get BPF target triple");

    let bpf_obj_path = target_dir
        .join(target_triple)
        .join(if release { "release" } else { "debug" })
        .join("nfm-bpf");
    println!(
        "cargo:rustc-env=BPF_OBJECT_PATH={}",
        bpf_obj_path.to_str().unwrap()
    );

    let target_trip_arg = format!("--target={}", &target_triple);
    let target_dir_arg = format!("--target-dir={}", target_dir.to_str().unwrap());
    let mut args = vec![
        "build",
        "--manifest-path=../nfm-bpf/Cargo.toml",
        &target_trip_arg,
        &target_dir_arg,
        "-Z",
        "build-std=core",
    ];
    if release {
        args.push("--release");
    }
    let status = Command::new("cargo")
        .env("RUSTC_BOOTSTRAP", "1")
        .env("RUSTFLAGS", "")
        .args(&args)
        .status()
        .expect("Failed to build eBPF program");
    assert!(status.success());
    println!("cargo:rerun-if-changed=../nfm-bpf/**");
}