Go to file
Tamir Duberstein 20ce988ecf Document cross-compilation on macOS
The instructions in the book are now out of date for projects generated
with this template. Since the instructions are much shorter these days,
put them in the README.
.cargo Move dependencies to workspace
.github Test execution of projects
xtask Replace xtask builds with build scripts
{{project-name}} Test execution of projects
{{project-name}}-common Move dependencies to workspace
{{project-name}}-ebpf Test execution of projects
.gitignore chore: remove Cargo.lock from .gitignore ()
Cargo.toml Replace xtask builds with build scripts
README.md Document cross-compilation on macOS
cargo-generate.toml Remove branch specifications
pre-script.rhai include and use clap only if needed
rustfmt.toml Add rustfmt to CI
test.sh Test execution of projects

README.md

{{project-name}}

Prerequisites

  1. stable rust toolchains: rustup toolchain install stable
  2. nightly rust toolchains: rustup toolchain install nightly --component rust-src
  3. (if cross-compiling) rustup target: rustup target add ${ARCH}-unknown-linux-musl
  4. (if cross-compiling) LLVM: (e.g.) brew install llvm (on macOS)
  5. (if cross-compiling) C toolchain: (e.g.) brew install filosottile/musl-cross/musl-cross (on macOS)
  6. bpf-linker: cargo install bpf-linker (--no-default-features on macOS)

Build & Run

Use cargo build, cargo check, etc. as normal. Run your program with xtask run.

Cargo build scripts are used to automatically build the eBPF correctly and include it in the program. When not using xtask run, eBPF code generation is skipped for a faster developer experience; this compromise necessitates the use of xtask to actually build the eBPF.

Cross-compiling on macOS

Cross compilation should work on both Intel and Apple Silicon Macs.

AYA_BUILD_EBPF=true \
CC=${ARCH}-linux-musl-gcc \
RUSTFLAGS="-C linker=${ARCH}-linux-musl-gcc" \
  cargo build --package {{project-name}} --release --target=${ARCH}-unknown-linux-musl

The cross-compiled program target/${ARCH}-unknown-linux-musl/release/{{project-name}} can be copied to a Linux server or VM and run there.