-
Notifications
You must be signed in to change notification settings - Fork 111
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
fde6ded
commit 8865818
Showing
19 changed files
with
86,224 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
sudo: required | ||
language: bash | ||
dist: bionic | ||
services: | ||
- docker | ||
|
||
env: | ||
global: | ||
- PROJECT_NAME='libbpf' | ||
- AUTHOR_EMAIL="$(git log -1 --pretty=\"%aE\")" | ||
- REPO_ROOT="$TRAVIS_BUILD_DIR" | ||
- CI_ROOT="$REPO_ROOT/travis-ci" | ||
- VMTEST_ROOT="$CI_ROOT/vmtest" | ||
|
||
addons: | ||
apt: | ||
packages: | ||
- qemu-kvm | ||
- zstd | ||
- binutils-dev | ||
- elfutils | ||
- libcap-dev | ||
- libelf-dev | ||
- libdw-dev | ||
- python3-docutils | ||
|
||
jobs: | ||
include: | ||
- stage: Builds & Tests | ||
name: Kernel LATEST + selftests | ||
language: bash | ||
env: KERNEL=LATEST | ||
script: $CI_ROOT/vmtest/run_vmtest.sh || travis_terminate 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
#!/bin/bash | ||
|
||
PHASES=(${@:-SETUP RUN RUN_ASAN CLEANUP}) | ||
DEBIAN_RELEASE="${DEBIAN_RELEASE:-testing}" | ||
CONT_NAME="${CONT_NAME:-libbpf-debian-$DEBIAN_RELEASE}" | ||
ENV_VARS="${ENV_VARS:-}" | ||
DOCKER_RUN="${DOCKER_RUN:-docker run}" | ||
REPO_ROOT="${REPO_ROOT:-$PWD}" | ||
ADDITIONAL_DEPS=(clang pkg-config gcc-8) | ||
CFLAGS="-g -O2 -Werror -Wall" | ||
|
||
function info() { | ||
echo -e "\033[33;1m$1\033[0m" | ||
} | ||
|
||
function error() { | ||
echo -e "\033[31;1m$1\033[0m" | ||
} | ||
|
||
function docker_exec() { | ||
docker exec $ENV_VARS -it $CONT_NAME "$@" | ||
} | ||
|
||
set -e | ||
|
||
source "$(dirname $0)/travis_wait.bash" | ||
|
||
for phase in "${PHASES[@]}"; do | ||
case $phase in | ||
SETUP) | ||
info "Setup phase" | ||
info "Using Debian $DEBIAN_RELEASE" | ||
|
||
sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce | ||
docker --version | ||
|
||
docker pull debian:$DEBIAN_RELEASE | ||
info "Starting container $CONT_NAME" | ||
$DOCKER_RUN -v $REPO_ROOT:/build:rw \ | ||
-w /build --privileged=true --name $CONT_NAME \ | ||
-dit --net=host debian:$DEBIAN_RELEASE /bin/bash | ||
docker_exec bash -c "echo deb-src http://deb.debian.org/debian $DEBIAN_RELEASE main >>/etc/apt/sources.list" | ||
docker_exec apt-get -y update | ||
docker_exec apt-get -y build-dep libelf-dev | ||
docker_exec apt-get -y install libelf-dev | ||
docker_exec apt-get -y install "${ADDITIONAL_DEPS[@]}" | ||
;; | ||
RUN|RUN_CLANG|RUN_GCC8|RUN_ASAN|RUN_CLANG_ASAN|RUN_GCC8_ASAN) | ||
if [[ "$phase" = *"CLANG"* ]]; then | ||
ENV_VARS="-e CC=clang -e CXX=clang++" | ||
CC="clang" | ||
elif [[ "$phase" = *"GCC8"* ]]; then | ||
ENV_VARS="-e CC=gcc-8 -e CXX=g++-8" | ||
CC="gcc-8" | ||
else | ||
CFLAGS="${CFLAGS} -Wno-stringop-truncation" | ||
fi | ||
if [[ "$phase" = *"ASAN"* ]]; then | ||
CFLAGS="${CFLAGS} -fsanitize=address,undefined" | ||
fi | ||
docker_exec mkdir build install | ||
docker_exec ${CC:-cc} --version | ||
info "build" | ||
docker_exec make -j$((4*$(nproc))) CFLAGS="${CFLAGS}" -C ./src -B OBJDIR=../build | ||
info "ldd build/libbpf.so:" | ||
docker_exec ldd build/libbpf.so | ||
if ! docker_exec ldd build/libbpf.so | grep -q libelf; then | ||
error "No reference to libelf.so in libbpf.so!" | ||
exit 1 | ||
fi | ||
info "install" | ||
docker_exec make -j$((4*$(nproc))) -C src OBJDIR=../build DESTDIR=../install install | ||
docker_exec rm -rf build install | ||
;; | ||
CLEANUP) | ||
info "Cleanup phase" | ||
docker stop $CONT_NAME | ||
docker rm -f $CONT_NAME | ||
;; | ||
*) | ||
echo >&2 "Unknown phase '$phase'" | ||
exit 1 | ||
esac | ||
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# This was borrowed from https://github.com/travis-ci/travis-build/tree/master/lib/travis/build/bash | ||
# to get around https://github.com/travis-ci/travis-ci/issues/9979. It should probably be removed | ||
# as soon as Travis CI has started to provide an easy way to export the functions to bash scripts. | ||
|
||
travis_jigger() { | ||
local cmd_pid="${1}" | ||
shift | ||
local timeout="${1}" | ||
shift | ||
local count=0 | ||
|
||
echo -e "\\n" | ||
|
||
while [[ "${count}" -lt "${timeout}" ]]; do | ||
count="$((count + 1))" | ||
echo -ne "Still running (${count} of ${timeout}): ${*}\\r" | ||
sleep 60 | ||
done | ||
|
||
echo -e "\\n${ANSI_RED}Timeout (${timeout} minutes) reached. Terminating \"${*}\"${ANSI_RESET}\\n" | ||
kill -9 "${cmd_pid}" | ||
} | ||
|
||
travis_wait() { | ||
local timeout="${1}" | ||
|
||
if [[ "${timeout}" =~ ^[0-9]+$ ]]; then | ||
shift | ||
else | ||
timeout=20 | ||
fi | ||
|
||
local cmd=("${@}") | ||
local log_file="travis_wait_${$}.log" | ||
|
||
"${cmd[@]}" &>"${log_file}" & | ||
local cmd_pid="${!}" | ||
|
||
travis_jigger "${!}" "${timeout}" "${cmd[@]}" & | ||
local jigger_pid="${!}" | ||
local result | ||
|
||
{ | ||
set +e | ||
wait "${cmd_pid}" 2>/dev/null | ||
result="${?}" | ||
ps -p"${jigger_pid}" &>/dev/null && kill "${jigger_pid}" | ||
set -e | ||
} | ||
|
||
if [[ "${result}" -eq 0 ]]; then | ||
echo -e "\\n${ANSI_GREEN}The command ${cmd[*]} exited with ${result}.${ANSI_RESET}" | ||
else | ||
echo -e "\\n${ANSI_RED}The command ${cmd[*]} exited with ${result}.${ANSI_RESET}" | ||
fi | ||
|
||
echo -e "\\n${ANSI_GREEN}Log:${ANSI_RESET}\\n" | ||
cat "${log_file}" | ||
|
||
return "${result}" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
#!/bin/bash | ||
set -e | ||
set -x | ||
|
||
RELEASE="bionic" | ||
|
||
echo "deb-src http://archive.ubuntu.com/ubuntu/ $RELEASE main restricted universe multiverse" >>/etc/apt/sources.list | ||
|
||
apt-get update | ||
apt-get -y build-dep libelf-dev | ||
apt-get install -y libelf-dev pkg-config | ||
|
||
source "$(dirname $0)/travis_wait.bash" | ||
|
||
cd $REPO_ROOT | ||
|
||
CFLAGS="-g -O2 -Werror -Wall -fsanitize=address,undefined" | ||
mkdir build install | ||
cc --version | ||
make -j$((4*$(nproc))) CFLAGS="${CFLAGS}" -C ./src -B OBJDIR=../build | ||
ldd build/libbpf.so | ||
if ! ldd build/libbpf.so | grep -q libelf; then | ||
echo "FAIL: No reference to libelf.so in libbpf.so!" | ||
exit 1 | ||
fi | ||
make -j$((4*$(nproc))) -C src OBJDIR=../build DESTDIR=../install install | ||
rm -rf build install |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
#!/bin/bash | ||
|
||
set -eu | ||
|
||
source $(cd $(dirname $0) && pwd)/helpers.sh | ||
|
||
travis_fold start build_pahole "Building pahole" | ||
|
||
CWD=$(pwd) | ||
REPO_PATH=$1 | ||
PAHOLE_ORIGIN=https://git.kernel.org/pub/scm/devel/pahole/pahole.git | ||
|
||
mkdir -p ${REPO_PATH} | ||
cd ${REPO_PATH} | ||
git init | ||
git remote add origin ${PAHOLE_ORIGIN} | ||
git fetch origin | ||
git checkout master | ||
|
||
mkdir -p build | ||
cd build | ||
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -D__LIB=lib .. | ||
make -j$((4*$(nproc))) all | ||
sudo make install | ||
|
||
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-}:/usr/local/lib | ||
ldd $(which pahole) | ||
pahole --version | ||
|
||
travis_fold end build_pahole |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#!/bin/bash | ||
|
||
set -euo pipefail | ||
|
||
source $(cd $(dirname $0) && pwd)/helpers.sh | ||
|
||
travis_fold start prepare_selftests "Building selftests" | ||
|
||
LLVM_VER=12 | ||
LIBBPF_PATH="${REPO_ROOT}" | ||
|
||
PREPARE_SELFTESTS_SCRIPT=${VMTEST_ROOT}/prepare_selftests-${KERNEL}.sh | ||
if [ -f "${PREPARE_SELFTESTS_SCRIPT}" ]; then | ||
(cd "${REPO_ROOT}/tools/testing/selftests/bpf" && ${PREPARE_SELFTESTS_SCRIPT}) | ||
fi | ||
|
||
if [[ "${KERNEL}" = 'LATEST' ]]; then | ||
VMLINUX_H= | ||
else | ||
VMLINUX_H=${VMTEST_ROOT}/vmlinux.h | ||
fi | ||
|
||
make \ | ||
CLANG=clang-${LLVM_VER} \ | ||
LLC=llc-${LLVM_VER} \ | ||
LLVM_STRIP=llvm-strip-${LLVM_VER} \ | ||
VMLINUX_BTF="${VMLINUX_BTF}" \ | ||
VMLINUX_H=${VMLINUX_H} \ | ||
-C "${REPO_ROOT}/tools/testing/selftests/bpf" \ | ||
-j $((2*$(nproc))) | ||
mkdir ${LIBBPF_PATH}/selftests | ||
cp -R "${REPO_ROOT}/tools/testing/selftests/bpf" \ | ||
${LIBBPF_PATH}/selftests | ||
cd ${LIBBPF_PATH} | ||
rm selftests/bpf/.gitignore | ||
git add selftests | ||
|
||
git add "${VMTEST_ROOT}/configs/blacklist" | ||
|
||
travis_fold end prepare_selftests |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
#!/bin/bash | ||
|
||
set -eu | ||
|
||
source $(cd $(dirname $0) && pwd)/helpers.sh | ||
|
||
CWD=$(pwd) | ||
LIBBPF_PATH=$(pwd) | ||
REPO_PATH=$1 | ||
|
||
BPF_NEXT_ORIGIN=https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git | ||
LINUX_SHA=$(cat ${LIBBPF_PATH}/CHECKPOINT-COMMIT) | ||
SNAPSHOT_URL=https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/snapshot/bpf-next-${LINUX_SHA}.tar.gz | ||
|
||
echo REPO_PATH = ${REPO_PATH} | ||
echo LINUX_SHA = ${LINUX_SHA} | ||
|
||
if [ ! -d "${REPO_PATH}" ]; then | ||
echo | ||
travis_fold start pull_kernel_srcs "Fetching kernel sources" | ||
|
||
mkdir -p $(dirname "${REPO_PATH}") | ||
cd $(dirname "${REPO_PATH}") | ||
# attempt to fetch desired bpf-next repo snapshot | ||
if wget ${SNAPSHOT_URL} ; then | ||
tar xf bpf-next-${LINUX_SHA}.tar.gz | ||
mv bpf-next-${LINUX_SHA} $(basename ${REPO_PATH}) | ||
else | ||
# but fallback to git fetch approach if that fails | ||
mkdir -p ${REPO_PATH} | ||
cd ${REPO_PATH} | ||
git init | ||
git remote add bpf-next ${BPF_NEXT_ORIGIN} | ||
# try shallow clone first | ||
git fetch --depth 32 bpf-next | ||
# check if desired SHA exists | ||
if ! git cat-file -e ${LINUX_SHA}^{commit} ; then | ||
# if not, fetch all of bpf-next; slow and painful | ||
git fetch bpf-next | ||
fi | ||
git reset --hard ${LINUX_SHA} | ||
fi | ||
|
||
travis_fold end pull_kernel_srcs | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
INDEX https://libbpf-vmtest.s3-us-west-1.amazonaws.com/x86_64/INDEX | ||
libbpf-vmtest-rootfs-2020.03.11.tar.zst https://libbpf-vmtest.s3-us-west-1.amazonaws.com/x86_64/libbpf-vmtest-rootfs-2020.03.11.tar.zst | ||
vmlinux-4.9.0.zst https://libbpf-vmtest.s3-us-west-1.amazonaws.com/x86_64/vmlinux-4.9.0.zst | ||
vmlinux-5.5.0-rc6.zst https://libbpf-vmtest.s3-us-west-1.amazonaws.com/x86_64/vmlinux-5.5.0-rc6.zst | ||
vmlinux-5.5.0.zst https://libbpf-vmtest.s3-us-west-1.amazonaws.com/x86_64/vmlinux-5.5.0.zst | ||
vmlinuz-5.5.0-rc6 https://libbpf-vmtest.s3-us-west-1.amazonaws.com/x86_64/vmlinuz-5.5.0-rc6 | ||
vmlinuz-5.5.0 https://libbpf-vmtest.s3-us-west-1.amazonaws.com/x86_64/vmlinuz-5.5.0 | ||
vmlinuz-4.9.0 https://libbpf-vmtest.s3-us-west-1.amazonaws.com/x86_64/vmlinuz-4.9.0 |
Oops, something went wrong.