Browse Source

ebpf: extract CARGO_CFG_BPF_TARGET_ARCH logic

Tamir Duberstein 6 days ago
parent
commit
f610453ec2

+ 33 - 0
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!("))");
+}

+ 3 - 0
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" }

+ 1 - 27
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()
 }

+ 3 - 0
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" }

+ 2 - 28
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()
 }

+ 1 - 0
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 }

+ 2 - 30
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]

+ 1 - 0
xtask/public-api/aya-build.txt

@@ -28,3 +28,4 @@ pub fn aya_build::Toolchain<'a>::borrow_mut(&mut self) -> &mut T
 impl<T> core::convert::From<T> 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<Item = cargo_metadata::Package>, toolchain: aya_build::Toolchain<'_>) -> anyhow::Result<()>
+pub fn aya_build::emit_bpf_target_arch_cfg()