ci: Enable llvm-link-static feature for bpf-linker

Rust CI does not provide dynamic libLLVM tarballs for macOS—only static
ones. Since recent versions of bpf-linker require explicit linkage
configuration for libLLVM, enable the `llvm-link-static` feature to
ensure correct static linking.

Make sure bpf-linker's build.rs sees the downloaded LLVM by adding it
to PATH. On macOS, set the `{CXXSTDLIB,ZLIB}_PATH` variables to point
to the brew prefixes with static libraries it needs.

Given that now we link statically all libLLVM's dependencies and macOS
provides only dynamic zlib, we need to install static zlib from brew.
This commit is contained in:
Michal R
2025-12-05 15:47:33 +01:00
parent 7a3c03e178
commit ab187058d8
2 changed files with 14 additions and 1 deletions

View File

@@ -279,6 +279,10 @@ jobs:
brew bundle
echo $(brew --prefix curl)/bin >> $GITHUB_PATH
echo $(brew --prefix llvm)/bin >> $GITHUB_PATH
# Point bpf-linker's build.rs to the brew prefixes with static
# libraries it needs.
echo "CXXSTDLIB_PATH=$(brew --prefix llvm)/lib/c++" >> $GITHUB_ENV
echo "ZLIB_PATH=$(brew --prefix zlib)/lib" >> $GITHUB_ENV
# https://github.com/actions/setup-python/issues/577
find /usr/local/bin -type l -exec sh -c 'readlink -f "$1" \
@@ -328,6 +332,7 @@ jobs:
;;
macOS)
target=${arch}-apple-darwin
echo "LLVM_LINK_FEATURE=llvm-link-static" >> $GITHUB_ENV
;;
*)
echo "::error::Unsupported runner OS: ${{ runner.os }}"
@@ -341,8 +346,13 @@ jobs:
# NB: rustc doesn't ship libLLVM.so on macOS, so disable proxying (default feature). We also
# --force so that bpf-linker gets always relinked against the latest LLVM downloaded above.
#
# Add the downloaded LLVM to PATH for this build step.
#
# Do this on all system (not just macOS) to avoid relying on rustc-provided libLLVM.so.
- run: cargo install --git https://github.com/aya-rs/bpf-linker.git bpf-linker --no-default-features --features llvm-21 --force
- run: |
cargo install \
--git https://github.com/aya-rs/bpf-linker.git bpf-linker \
--no-default-features --features "llvm-21,${LLVM_LINK_FEATURE}" --force
- uses: actions/cache@v4
with:

View File

@@ -12,6 +12,9 @@ brew "lynx"
brew "pkg-config"
brew "qemu"
# macOS provides only dynamic zlib. Install the static one.
brew "zlib"
# We need a musl C toolchain to compile our `test-distro` since some of our
# dependencies have build scripts that compile C code (i.e xz2).
tap "filosottile/musl-cross"