blob: 7fcda866c86eb2cbabb30bc4b583fe29d1923faa [file] [log] [blame]
name: build
on:
pull_request:
paths:
- '.github/workflows/build.yaml'
- 'docs/**'
- 'include/**'
- 'libbpf/**'
- 'src/**'
push:
branches:
- master
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.after }}
cancel-in-progress: true
jobs:
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, ubuntu-22.04]
runs-on: ${{ matrix.os }}
env:
FEATURES: .llvm and .skeletons
steps:
- name: Checkout repository
uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
with:
submodules: true
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libbfd-dev libcap-dev libelf-dev libiberty-dev python3-docutils
# clang/LLVM are already installed, but we're missing some aliases.
CLANG_VERSION="$(echo '__clang_major__' | clang -E - | tail -n 1)"
sudo update-alternatives \
--install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-"${CLANG_VERSION}" 50 \
--slave /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-"${CLANG_VERSION}" \
--slave /usr/bin/llvm-strip llvm-strip /usr/bin/llvm-strip-"${CLANG_VERSION}"
echo "CLANG_VERSION=${CLANG_VERSION}" >> "${GITHUB_ENV}"
- name: Build bpftool (default LLVM disassembler)
run: |
make -j -C src V=1
./src/bpftool 2>&1 | grep -q Usage
./src/bpftool -p version | \
tee /dev/stderr | \
jq --exit-status ".features | ${FEATURES}"
- name: Build bpftool, with clang
run: |
make -C src clean
LLVM=1 make -j -C src V=1
./src/bpftool 2>&1 | grep -q Usage
./src/bpftool -p version | \
tee /dev/stderr | \
jq --exit-status ".features | ${FEATURES}"
- name: Build bpftool, with fallback to libbfd disassembler
run: |
sudo apt-get remove -y llvm-"${CLANG_VERSION}"-dev
make -C src clean
make -j -C src V=1
./src/bpftool 2>&1 | grep -q Usage
./src/bpftool -p version | \
tee /dev/stderr | \
jq --exit-status ".features | .libbfd and (.llvm | not)"
- name: Build bpftool, with libbfd, static build
run: |
make -C src clean
EXTRA_CFLAGS=--static make -j -C src V=1
./src/bpftool 2>&1 | grep -q Usage
./src/bpftool -p version | \
tee /dev/stderr | \
jq --exit-status ".features | .libbfd and (.llvm | not)"
ldd ./src/bpftool 2>&1 | \
tee /dev/stderr | \
grep -q 'not a dynamic executable'
- name: Build bpftool's documentation
run: |
make -j -C docs
grep -q '.TH "\?BPFTOOL"\? 8' ./docs/bpftool.8