From f610453ec234921c07aeb4d5401d0a8940d513df Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Sat, 25 Oct 2025 15:48:09 -0400 Subject: [PATCH] ebpf: extract CARGO_CFG_BPF_TARGET_ARCH logic --- aya-build/src/lib.rs | 33 +++++++++++++++++++++++++++++++ ebpf/aya-ebpf-bindings/Cargo.toml | 3 +++ ebpf/aya-ebpf-bindings/build.rs | 28 +------------------------- ebpf/aya-ebpf-cty/Cargo.toml | 3 +++ ebpf/aya-ebpf-cty/build.rs | 30 ++-------------------------- ebpf/aya-ebpf/Cargo.toml | 1 + ebpf/aya-ebpf/build.rs | 32 ++---------------------------- xtask/public-api/aya-build.txt | 1 + 8 files changed, 46 insertions(+), 85 deletions(-) diff --git a/aya-build/src/lib.rs b/aya-build/src/lib.rs index a67e21b5..89ba9d74 100644 --- a/aya-build/src/lib.rs +++ b/aya-build/src/lib.rs @@ -186,3 +186,36 @@ impl<'a> Toolchain<'a> { } } } + +/// Emit cfg flags that describe the desired BPF target architecture. +pub fn emit_bpf_target_arch_cfg() { + println!("cargo:rerun-if-env-changed=CARGO_CFG_BPF_TARGET_ARCH"); + let bpf_target_arch = env::var_os("CARGO_CFG_BPF_TARGET_ARCH"); + let target_arch = env::var_os("CARGO_CFG_TARGET_ARCH"); + let arch = if let Some(bpf_target_arch) = bpf_target_arch.as_ref() { + bpf_target_arch.to_str().unwrap() + } else { + let target_arch = target_arch.as_ref().unwrap().to_str().unwrap(); + if target_arch.starts_with("riscv64") { + "riscv64" + } else { + target_arch + } + }; + println!("cargo:rustc-cfg=bpf_target_arch=\"{arch}\""); + + print!("cargo::rustc-check-cfg=cfg(bpf_target_arch, values("); + for value in [ + "aarch64", + "arm", + "loongarch64", + "mips", + "powerpc64", + "riscv64", + "s390x", + "x86_64", + ] { + print!("\"{value}\","); + } + println!("))"); +} diff --git a/ebpf/aya-ebpf-bindings/Cargo.toml b/ebpf/aya-ebpf-bindings/Cargo.toml index 81ffbf60..a75b8d0a 100644 --- a/ebpf/aya-ebpf-bindings/Cargo.toml +++ b/ebpf/aya-ebpf-bindings/Cargo.toml @@ -14,3 +14,6 @@ workspace = true [dependencies] aya-ebpf-cty = { version = "^0.2.2", path = "../aya-ebpf-cty" } + +[build-dependencies] +aya-build = { version = "^0.1.2", path = "../../aya-build" } diff --git a/ebpf/aya-ebpf-bindings/build.rs b/ebpf/aya-ebpf-bindings/build.rs index 75f4031d..98827069 100644 --- a/ebpf/aya-ebpf-bindings/build.rs +++ b/ebpf/aya-ebpf-bindings/build.rs @@ -1,29 +1,3 @@ -use std::env; - fn main() { - println!("cargo:rerun-if-env-changed=CARGO_CFG_BPF_TARGET_ARCH"); - if let Ok(arch) = env::var("CARGO_CFG_BPF_TARGET_ARCH") { - println!("cargo:rustc-cfg=bpf_target_arch=\"{arch}\""); - } else { - let arch = env::var("HOST").unwrap(); - let mut arch = arch.split_once('-').map_or(&*arch, |x| x.0); - if arch.starts_with("riscv64") { - arch = "riscv64"; - } - println!("cargo:rustc-cfg=bpf_target_arch=\"{arch}\""); - } - print!("cargo::rustc-check-cfg=cfg(bpf_target_arch, values("); - for arch in [ - "aarch64", - "arm", - "loongarch64", - "mips", - "powerpc64", - "riscv64", - "s390x", - "x86_64", - ] { - print!("\"{arch}\","); - } - println!("))"); + aya_build::emit_bpf_target_arch_cfg() } diff --git a/ebpf/aya-ebpf-cty/Cargo.toml b/ebpf/aya-ebpf-cty/Cargo.toml index d3be7374..a848b6aa 100644 --- a/ebpf/aya-ebpf-cty/Cargo.toml +++ b/ebpf/aya-ebpf-cty/Cargo.toml @@ -14,3 +14,6 @@ rust-version.workspace = true [lints] workspace = true + +[build-dependencies] +aya-build = { version = "^0.1.2", path = "../../aya-build" } diff --git a/ebpf/aya-ebpf-cty/build.rs b/ebpf/aya-ebpf-cty/build.rs index 7f190273..e19ca950 100644 --- a/ebpf/aya-ebpf-cty/build.rs +++ b/ebpf/aya-ebpf-cty/build.rs @@ -1,31 +1,5 @@ -use std::env; - fn main() { - println!("cargo:rerun-if-env-changed=CARGO_CFG_BPF_TARGET_ARCH"); - if let Ok(arch) = env::var("CARGO_CFG_BPF_TARGET_ARCH") { - println!("cargo:rustc-cfg=bpf_target_arch=\"{arch}\""); - } else { - let arch = env::var("HOST").unwrap(); - let mut arch = arch.split_once('-').map_or(&*arch, |x| x.0); - if arch.starts_with("riscv64") { - arch = "riscv64"; - } - println!("cargo:rustc-cfg=bpf_target_arch=\"{arch}\""); - } - print!("cargo::rustc-check-cfg=cfg(bpf_target_arch, values("); - for arch in [ - "aarch64", - "arm", - "loongarch64", - "mips", - "powerpc64", - "riscv64", - "s390x", - "x86_64", - ] { - print!("\"{arch}\","); - } - println!("))"); - println!("cargo::rustc-check-cfg=cfg(target_arch, values(\"asmjs\",\"nvptx\",\"xtensa\"))"); + + aya_build::emit_bpf_target_arch_cfg() } diff --git a/ebpf/aya-ebpf/Cargo.toml b/ebpf/aya-ebpf/Cargo.toml index c15afbef..e2067982 100644 --- a/ebpf/aya-ebpf/Cargo.toml +++ b/ebpf/aya-ebpf/Cargo.toml @@ -19,4 +19,5 @@ aya-ebpf-cty = { version = "^0.2.2", path = "../aya-ebpf-cty" } aya-ebpf-macros = { version = "^0.1.1", path = "../../aya-ebpf-macros" } [build-dependencies] +aya-build = { version = "^0.1.2", path = "../../aya-build" } rustversion = { workspace = true } diff --git a/ebpf/aya-ebpf/build.rs b/ebpf/aya-ebpf/build.rs index b38c385b..255b9959 100644 --- a/ebpf/aya-ebpf/build.rs +++ b/ebpf/aya-ebpf/build.rs @@ -1,36 +1,8 @@ fn main() { - println!("cargo:rerun-if-env-changed=CARGO_CFG_BPF_TARGET_ARCH"); - println!("cargo:rerun-if-env-changed=HOST"); - - print!("cargo::rustc-check-cfg=cfg(bpf_target_arch, values("); - for arch in [ - "aarch64", - "arm", - "loongarch64", - "mips", - "powerpc64", - "riscv64", - "s390x", - "x86_64", - ] { - print!("\"{arch}\","); - } - println!("))"); - - if let Some(arch) = std::env::var_os("CARGO_CFG_BPF_TARGET_ARCH") { - let arch = arch.to_str().unwrap(); - println!("cargo:rustc-cfg=bpf_target_arch=\"{arch}\""); - } else if let Some(host) = std::env::var_os("HOST") { - let host = host.to_str().unwrap(); - let mut arch = host.split_once('-').map_or(host, |(arch, _rest)| arch); - if arch.starts_with("riscv64") { - arch = "riscv64"; - } - println!("cargo:rustc-cfg=bpf_target_arch=\"{arch}\""); - } - println!("cargo::rustc-check-cfg=cfg(generic_const_exprs)"); check_rust_version(); + + aya_build::emit_bpf_target_arch_cfg() } #[rustversion::nightly] diff --git a/xtask/public-api/aya-build.txt b/xtask/public-api/aya-build.txt index f5db5050..bf7a479b 100644 --- a/xtask/public-api/aya-build.txt +++ b/xtask/public-api/aya-build.txt @@ -28,3 +28,4 @@ pub fn aya_build::Toolchain<'a>::borrow_mut(&mut self) -> &mut T impl core::convert::From for aya_build::Toolchain<'a> pub fn aya_build::Toolchain<'a>::from(t: T) -> T pub fn aya_build::build_ebpf(packages: impl core::iter::traits::collect::IntoIterator, toolchain: aya_build::Toolchain<'_>) -> anyhow::Result<()> +pub fn aya_build::emit_bpf_target_arch_cfg()