• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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