From 7153b262ee3e9ff57a622686c9756b6e7c61df1d Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Mon, 14 Oct 2024 12:34:51 -0400 Subject: [PATCH] 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. --- README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c870678..9bc3d2d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,11 @@ ## Prerequisites -1. Install bpf-linker: `cargo install bpf-linker` +1. stable rust toolchains: `rustup toolchain install stable` +1. nightly rust toolchains: `rustup toolchain install nightly --component rust-src` +1. (if cross-compiling) [rustup target](https://doc.rust-lang.org/nightly/rustc/platform-support.html#tier-1-with-host-tools): `rustup target add ${ARCH}-unknown-linux-musl` +1. (if cross-compiling) LLVM: (e.g.) `brew install llvm` (on macOS) +1. bpf-linker: `cargo install bpf-linker` (`--no-default-features` on macOS) ## Build & Run @@ -11,3 +15,15 @@ Use `cargo build`, `cargo check`, etc. as normal. Run your program with `xtask r 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. + +```bash +AYA_BUILD_EBPF=true cargo build --package {{project-name}} \ + --release --target=${ARCH}-unknown-linux-musl \ + --config 'target.${ARCH}-unknown-linux-musl.linker = "rust-lld"' +``` +The cross-compiled program `target/${ARCH}-unknown-linux-musl/release/{{project-name}}` can be +copied to a Linux server or VM and run there.