|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +set -xeuo pipefail |
| 4 | + |
| 5 | +export LLVM_VERSION=${LLVM_VERSION:-21} |
| 6 | +export LIBBPF_REVISION=${LIBBPF_REVISION:-master} |
| 7 | +export BPFTOOL_REVISION=${BPFTOOL_REVISION:-main} |
| 8 | + |
| 9 | +# Assume Ubuntu/Debian |
| 10 | +export DEBIAN_FRONTEND=noninteractive |
| 11 | +sudo -E apt-get -y update |
| 12 | + |
| 13 | +# Install LLVM |
| 14 | +sudo -E apt-get --no-install-recommends -y install \ |
| 15 | + curl git gnupg lsb-release software-properties-common wget |
| 16 | +wget https://apt.llvm.org/llvm.sh |
| 17 | +chmod +x llvm.sh |
| 18 | +sudo -E ./llvm.sh ${LLVM_VERSION} |
| 19 | +rm llvm.sh |
| 20 | + |
| 21 | +sudo update-alternatives --install \ |
| 22 | + /usr/bin/clang clang /usr/bin/clang-${LLVM_VERSION} 10 |
| 23 | +sudo update-alternatives --set clang /usr/bin/clang-${LLVM_VERSION} |
| 24 | +sudo update-alternatives --install \ |
| 25 | + /usr/bin/llvm-strip llvm-strip /usr/bin/llvm-strip-${LLVM_VERSION} 10 |
| 26 | +sudo update-alternatives --set llvm-strip /usr/bin/llvm-strip-${LLVM_VERSION} |
| 27 | +sudo update-alternatives --install \ |
| 28 | + /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-${LLVM_VERSION} 10 |
| 29 | +sudo update-alternatives --set llvm-ar /usr/bin/llvm-ar-${LLVM_VERSION} |
| 30 | + |
| 31 | +# Install Go |
| 32 | +export GO_VERSION=${GO_VERSION:-1.25.3} |
| 33 | +ARCH=$(uname -m) |
| 34 | +case $ARCH in |
| 35 | + x86_64) GO_ARCH=amd64 ;; |
| 36 | + aarch64) GO_ARCH=arm64 ;; |
| 37 | + *) echo "Unsupported architecture: $ARCH"; exit 1 ;; |
| 38 | +esac |
| 39 | +curl -fsSL https://go.dev/dl/go${GO_VERSION}.linux-${GO_ARCH}.tar.gz | sudo tar -C /usr/local -xzf - |
| 40 | +echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee /etc/profile.d/go.sh |
| 41 | +export PATH=$PATH:/usr/local/go/bin |
| 42 | +# Persist Go PATH for subsequent GitHub Actions steps |
| 43 | +echo "/usr/local/go/bin" >> $GITHUB_PATH |
| 44 | + |
| 45 | +# Install libs and other deps |
| 46 | +sudo -E apt-get --no-install-recommends -y install \ |
| 47 | + build-essential libssl-dev libelf-dev libzstd-dev libseccomp-dev \ |
| 48 | + libbfd-dev libcap-dev jq pkg-config protobuf-compiler |
| 49 | + |
| 50 | +# Build and install libbpf |
| 51 | +export LIBBPF_ROOT=$(mktemp -d libbpf.XXXX) |
| 52 | +git clone https://github.com/libbpf/libbpf.git $LIBBPF_ROOT |
| 53 | +pushd $LIBBPF_ROOT |
| 54 | +git reset --hard $LIBBPF_REVISION |
| 55 | +make -C src -j$(nproc) |
| 56 | +make -C src install |
| 57 | +sudo ln -s /usr/lib64/pkgconfig/libbpf.pc /usr/lib/pkgconfig/libbpf.pc |
| 58 | +popd |
| 59 | +rm -rf $LIBBPF_ROOT |
| 60 | + |
| 61 | +# Build and install bpftool |
| 62 | +export BPFTOOL_ROOT=$(mktemp -d bpftool.XXXX) |
| 63 | +git clone --recurse-submodules https://github.com/libbpf/bpftool.git $BPFTOOL_ROOT |
| 64 | +pushd $BPFTOOL_ROOT |
| 65 | +git reset --hard $BPFTOOL_REVISION |
| 66 | +git submodule update --init |
| 67 | +make LLVM=1 LLVM_VERSION=-${LLVM_VERSION} -C src -j$(nproc) |
| 68 | +make LLVM=1 LLVM_VERSION=-${LLVM_VERSION} -C src install |
| 69 | +popd |
| 70 | +rm -rf $BPFTOOL_ROOT |
0 commit comments