Files
libbpf/ci/managers/debian.sh
T

95 lines
3.5 KiB
Bash
Raw Normal View History

2019-04-17 11:02:45 -07:00
#!/bin/bash
PHASES=(${@:-SETUP RUN RUN_ASAN CLEANUP})
DEBIAN_RELEASE="${DEBIAN_RELEASE:-testing}"
2020-02-20 12:28:46 -08:00
CONT_NAME="${CONT_NAME:-libbpf-debian-$DEBIAN_RELEASE}"
2019-04-19 11:36:09 -07:00
ENV_VARS="${ENV_VARS:-}"
2019-04-17 11:02:45 -07:00
DOCKER_RUN="${DOCKER_RUN:-docker run}"
REPO_ROOT="${REPO_ROOT:-$PWD}"
ADDITIONAL_DEPS=(pkgconf)
2022-06-07 15:17:53 -07:00
EXTRA_CFLAGS=""
EXTRA_LDFLAGS=""
2019-04-17 11:02:45 -07:00
function info() {
echo -e "\033[33;1m$1\033[0m"
}
function error() {
echo -e "\033[31;1m$1\033[0m"
}
2019-04-19 11:36:09 -07:00
function docker_exec() {
2021-06-14 11:16:46 -07:00
docker exec $ENV_VARS $CONT_NAME "$@"
2019-04-19 11:36:09 -07:00
}
set -eu
2019-04-17 11:02:45 -07:00
source "$(dirname $0)/travis_wait.bash"
for phase in "${PHASES[@]}"; do
case $phase in
SETUP)
info "Setup phase"
info "Using Debian $DEBIAN_RELEASE"
2020-02-20 12:28:46 -08:00
docker --version
2019-10-01 09:48:58 -07:00
docker pull debian:$DEBIAN_RELEASE
2019-04-17 11:02:45 -07:00
info "Starting container $CONT_NAME"
$DOCKER_RUN -v $REPO_ROOT:/build:rw \
-w /build --privileged=true --name $CONT_NAME \
2019-10-01 09:48:58 -07:00
-dit --net=host debian:$DEBIAN_RELEASE /bin/bash
2021-08-04 11:16:29 -07:00
echo -e "::group::Build Env Setup"
2019-04-19 11:36:09 -07:00
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 install aptitude
docker_exec aptitude -y install make libz-dev libelf-dev
docker_exec aptitude -y install "${ADDITIONAL_DEPS[@]}"
2021-08-04 11:16:29 -07:00
echo -e "::endgroup::"
2019-04-17 11:02:45 -07:00
;;
RUN|RUN_CLANG|RUN_CLANG14|RUN_CLANG15|RUN_CLANG16|RUN_GCC10|RUN_GCC11|RUN_GCC12|RUN_ASAN|RUN_CLANG_ASAN|RUN_GCC10_ASAN)
CC="cc"
if [[ "$phase" =~ "RUN_CLANG(\d+)(_ASAN)?" ]]; then
ENV_VARS="-e CC=clang-${BASH_REMATCH[1]} -e CXX=clang++-${BASH_REMATCH[1]}"
CC="clang-${BASH_REMATCH[1]}"
elif [[ "$phase" = *"CLANG"* ]]; then
2019-04-17 11:02:45 -07:00
ENV_VARS="-e CC=clang -e CXX=clang++"
2019-04-19 11:36:09 -07:00
CC="clang"
elif [[ "$phase" =~ "RUN_GCC(\d+)(_ASAN)?" ]]; then
ENV_VARS="-e CC=gcc-${BASH_REMATCH[1]} -e CXX=g++-${BASH_REMATCH[1]}"
CC="gcc-${BASH_REMATCH[1]}"
2019-04-17 11:02:45 -07:00
fi
2019-10-01 09:48:58 -07:00
if [[ "$phase" = *"ASAN"* ]]; then
2022-06-07 15:17:53 -07:00
EXTRA_CFLAGS="${EXTRA_CFLAGS} -fsanitize=address,undefined"
EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -fsanitize=address,undefined"
2019-04-17 11:02:45 -07:00
fi
if [[ "$CC" != "cc" ]]; then
docker_exec aptitude -y install "$CC"
else
docker_exec aptitude -y install gcc
fi
2019-10-01 09:48:58 -07:00
docker_exec mkdir build install
docker_exec ${CC} --version
2019-10-01 09:48:58 -07:00
info "build"
docker_exec make -j$((4*$(nproc))) EXTRA_CFLAGS="${EXTRA_CFLAGS}" EXTRA_LDFLAGS="${EXTRA_LDFLAGS}" -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
2019-10-01 09:48:58 -07:00
info "install"
2020-02-20 12:28:46 -08:00
docker_exec make -j$((4*$(nproc))) -C src OBJDIR=../build DESTDIR=../install install
info "link binary"
2022-08-17 14:23:41 -07:00
docker_exec bash -c "EXTRA_CFLAGS=\"${EXTRA_CFLAGS}\" EXTRA_LDFLAGS=\"${EXTRA_LDFLAGS}\" ./ci/managers/test_compile.sh"
2019-04-17 11:02:45 -07:00
;;
CLEANUP)
info "Cleanup phase"
docker stop $CONT_NAME
docker rm -f $CONT_NAME
;;
*)
echo >&2 "Unknown phase '$phase'"
exit 1
esac
done