diff --git a/.github/workflows/build-aya-bpf.yml b/.github/workflows/build-aya-bpf.yml index 68d85c59..c196c960 100644 --- a/.github/workflows/build-aya-bpf.yml +++ b/.github/workflows/build-aya-bpf.yml @@ -15,6 +15,14 @@ env: jobs: build: + strategy: + matrix: + arch: + - x86_64 + - aarch64 + - arm + # Disable riscv64 due to missing pt_regs handling in aya-bpf/args.rs + # - riscv64 runs-on: ubuntu-20.04 steps: @@ -28,7 +36,17 @@ jobs: - uses: Swatinem/rust-cache@v1 - name: Build - run: cargo build --manifest-path bpf/Cargo.toml --verbose + env: + CARGO_CFG_BPF_TARGET_ARCH: ${{ matrix.arch }} + run: | + pushd bpf + cargo build --workspace --exclude aya-bpf-macros --verbose + popd - name: Run tests - run: RUST_BACKTRACE=full cargo test --manifest-path bpf/Cargo.toml --verbose + env: + CARGO_CFG_BPF_TARGET_ARCH: ${{ matrix.arch }} + run: | + pushd bpf + cargo test --workspace --exclude aya-bpf-macros --verbose + popd diff --git a/.github/workflows/build-aya.yml b/.github/workflows/build-aya.yml index 82eb94b1..e8dc8582 100644 --- a/.github/workflows/build-aya.yml +++ b/.github/workflows/build-aya.yml @@ -15,16 +15,31 @@ env: jobs: build: + strategy: + matrix: + arch: + - x86_64-unknown-linux-gnu + - aarch64-unknown-linux-gnu + - armv7-unknown-linux-gnueabi + - riscv64gc-unknown-none-elf runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: Swatinem/rust-cache@v1 + - name: Prereqs + run: cargo install cross --git https://github.com/cross-rs/cross - name: Build - run: cargo build --verbose + run: cross build --verbose - - name: Run tests - run: RUST_BACKTRACE=full cargo test --verbose + - name: Run test + run: RUST_BACKTRACE=full cross test --verbose + + - name: Build bpf macros + run: cross build --manifest-path ./bpf/Cargo.toml -p aya-bpf-macros --verbose + + - name: Test bpf macros + run: RUST_BACKTRACE=full cross test --manifest-path ./bpf/Cargo.toml -p aya-bpf-macros --verbose test: runs-on: ubuntu-20.04 diff --git a/bpf/aya-bpf-bindings/build.rs b/bpf/aya-bpf-bindings/build.rs index 1f0c9eb1..a8a2c261 100644 --- a/bpf/aya-bpf-bindings/build.rs +++ b/bpf/aya-bpf-bindings/build.rs @@ -1,7 +1,10 @@ use std::env; fn main() { - if env::var("CARGO_CFG_BPF_TARGET_ARCH").is_err() { + 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 arch = arch.split_once('-').map_or(&*arch, |x| x.0); println!("cargo:rustc-cfg=bpf_target_arch=\"{}\"", arch); diff --git a/bpf/aya-bpf-cty/build.rs b/bpf/aya-bpf-cty/build.rs index 1f0c9eb1..a8a2c261 100644 --- a/bpf/aya-bpf-cty/build.rs +++ b/bpf/aya-bpf-cty/build.rs @@ -1,7 +1,10 @@ use std::env; fn main() { - if env::var("CARGO_CFG_BPF_TARGET_ARCH").is_err() { + 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 arch = arch.split_once('-').map_or(&*arch, |x| x.0); println!("cargo:rustc-cfg=bpf_target_arch=\"{}\"", arch); diff --git a/bpf/aya-bpf/build.rs b/bpf/aya-bpf/build.rs index 1f0c9eb1..a8a2c261 100644 --- a/bpf/aya-bpf/build.rs +++ b/bpf/aya-bpf/build.rs @@ -1,7 +1,10 @@ use std::env; fn main() { - if env::var("CARGO_CFG_BPF_TARGET_ARCH").is_err() { + 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 arch = arch.split_once('-').map_or(&*arch, |x| x.0); println!("cargo:rustc-cfg=bpf_target_arch=\"{}\"", arch); diff --git a/bpf/aya-bpf/src/args.rs b/bpf/aya-bpf/src/args.rs index 2146e047..8929c7a3 100644 --- a/bpf/aya-bpf/src/args.rs +++ b/bpf/aya-bpf/src/args.rs @@ -116,18 +116,18 @@ impl FromPtRegs for *const T { } } -#[cfg(bpf_target_arch = "armv7")] +#[cfg(bpf_target_arch = "arm")] impl FromPtRegs for *const T { fn from_argument(ctx: &pt_regs, n: usize) -> Option { if n <= 6 { - Some(ctx.uregs.regs[n] as *const _) + Some(ctx.uregs[n] as *const _) } else { None } } fn from_retval(ctx: &pt_regs) -> Option { - Some(ctx.uregs.regs[0] as *const _) + Some(ctx.uregs[0] as *const _) } } @@ -135,14 +135,14 @@ impl FromPtRegs for *const T { impl FromPtRegs for *const T { fn from_argument(ctx: &pt_regs, n: usize) -> Option { if n <= 7 { - Some(ctx.regs.regs[n] as *const _) + Some(ctx.regs[n] as *const _) } else { None } } fn from_retval(ctx: &pt_regs) -> Option { - Some(ctx.regs.regs[0] as *const _) + Some(ctx.regs[0] as *const _) } } @@ -165,18 +165,18 @@ impl FromPtRegs for *mut T { } } -#[cfg(bpf_target_arch = "armv7")] +#[cfg(bpf_target_arch = "arm")] impl FromPtRegs for *mut T { fn from_argument(ctx: &pt_regs, n: usize) -> Option { if n <= 6 { - Some(ctx.uregs.regs[n] as *mut _) + Some(ctx.uregs[n] as *mut _) } else { None } } fn from_retval(ctx: &pt_regs) -> Option { - Some(ctx.uregs.regs[0] as *mut _) + Some(ctx.uregs[0] as *mut _) } } @@ -184,14 +184,14 @@ impl FromPtRegs for *mut T { impl FromPtRegs for *mut T { fn from_argument(ctx: &pt_regs, n: usize) -> Option { if n <= 7 { - Some(ctx.regs.regs[n] as *mut _) + Some(ctx.regs[n] as *mut _) } else { None } } fn from_retval(ctx: &pt_regs) -> Option { - Some(ctx.regs.regs[0] as *mut _) + Some(ctx.regs[0] as *mut _) } } @@ -217,18 +217,18 @@ macro_rules! impl_from_pt_regs { } } - #[cfg(bpf_target_arch = "armv7")] + #[cfg(bpf_target_arch = "arm")] impl FromPtRegs for $type { fn from_argument(ctx: &pt_regs, n: usize) -> Option { if n <= 6 { - Some(ctx.uregs.regs[n] as *const $type as _) + Some(ctx.uregs[n] as *const $type as _) } else { None } } fn from_retval(ctx: &pt_regs) -> Option { - Some(ctx.uregs.regs[0] as *const $type as _) + Some(ctx.uregs[0] as *const $type as _) } } @@ -236,14 +236,14 @@ macro_rules! impl_from_pt_regs { impl FromPtRegs for $type { fn from_argument(ctx: &pt_regs, n: usize) -> Option { if n <= 7 { - Some(ctx.regs.regs[n] as *const $type as _) + Some(ctx.regs[n] as *const $type as _) } else { None } } fn from_retval(ctx: &pt_regs) -> Option { - Some(ctx.regs.regs[0] as *const $type as _) + Some(ctx.regs[0] as *const $type as _) } } };