1#!/bin/bash 2 3PHASES=(${@:-SETUP RUN RUN_ASAN CLEANUP}) 4DEBIAN_RELEASE="${DEBIAN_RELEASE:-testing}" 5CONT_NAME="${CONT_NAME:-libbpf-debian-$DEBIAN_RELEASE}" 6ENV_VARS="${ENV_VARS:-}" 7DOCKER_RUN="${DOCKER_RUN:-docker run}" 8REPO_ROOT="${REPO_ROOT:-$PWD}" 9ADDITIONAL_DEPS=(clang pkg-config gcc-10) 10CFLAGS="-g -O2 -Werror -Wall" 11 12function info() { 13 echo -e "\033[33;1m$1\033[0m" 14} 15 16function error() { 17 echo -e "\033[31;1m$1\033[0m" 18} 19 20function docker_exec() { 21 docker exec $ENV_VARS $CONT_NAME "$@" 22} 23 24set -eu 25 26source "$(dirname $0)/travis_wait.bash" 27 28for phase in "${PHASES[@]}"; do 29 case $phase in 30 SETUP) 31 info "Setup phase" 32 info "Using Debian $DEBIAN_RELEASE" 33 34 docker --version 35 36 docker pull debian:$DEBIAN_RELEASE 37 info "Starting container $CONT_NAME" 38 $DOCKER_RUN -v $REPO_ROOT:/build:rw \ 39 -w /build --privileged=true --name $CONT_NAME \ 40 -dit --net=host debian:$DEBIAN_RELEASE /bin/bash 41 echo -e "::group::Build Env Setup" 42 docker_exec bash -c "echo deb-src http://deb.debian.org/debian $DEBIAN_RELEASE main >>/etc/apt/sources.list" 43 docker_exec apt-get -y update 44 docker_exec apt-get -y install aptitude 45 docker_exec aptitude -y build-dep libelf-dev 46 docker_exec aptitude -y install libelf-dev 47 docker_exec aptitude -y install "${ADDITIONAL_DEPS[@]}" 48 echo -e "::endgroup::" 49 ;; 50 RUN|RUN_CLANG|RUN_GCC10|RUN_ASAN|RUN_CLANG_ASAN|RUN_GCC10_ASAN) 51 CC="cc" 52 if [[ "$phase" = *"CLANG"* ]]; then 53 ENV_VARS="-e CC=clang -e CXX=clang++" 54 CC="clang" 55 elif [[ "$phase" = *"GCC10"* ]]; then 56 ENV_VARS="-e CC=gcc-10 -e CXX=g++-10" 57 CC="gcc-10" 58 CFLAGS="${CFLAGS} -Wno-stringop-truncation" 59 else 60 CFLAGS="${CFLAGS} -Wno-stringop-truncation" 61 fi 62 if [[ "$phase" = *"ASAN"* ]]; then 63 CFLAGS="${CFLAGS} -fsanitize=address,undefined" 64 fi 65 docker_exec mkdir build install 66 docker_exec ${CC} --version 67 info "build" 68 docker_exec make -j$((4*$(nproc))) CFLAGS="${CFLAGS}" -C ./src -B OBJDIR=../build 69 info "ldd build/libbpf.so:" 70 docker_exec ldd build/libbpf.so 71 if ! docker_exec ldd build/libbpf.so | grep -q libelf; then 72 error "No reference to libelf.so in libbpf.so!" 73 exit 1 74 fi 75 info "install" 76 docker_exec make -j$((4*$(nproc))) -C src OBJDIR=../build DESTDIR=../install install 77 info "link binary" 78 docker_exec bash -c "CFLAGS=\"${CFLAGS}\" ./travis-ci/managers/test_compile.sh" 79 ;; 80 CLEANUP) 81 info "Cleanup phase" 82 docker stop $CONT_NAME 83 docker rm -f $CONT_NAME 84 ;; 85 *) 86 echo >&2 "Unknown phase '$phase'" 87 exit 1 88 esac 89done 90