diff options
author | Frantisek Sumsal <frantisek@sumsal.cz> | 2020-06-07 14:05:20 +0200 |
---|---|---|
committer | Frantisek Sumsal <frantisek@sumsal.cz> | 2020-06-09 21:27:07 +0200 |
commit | b36746c90e8fade41d323ebdd89d9e41546e099b (patch) | |
tree | 6ad3d4fab5560527765ee665897afed635a383f5 | |
parent | 8b8ae7959d212c51ada4c1f13df5fb573461d024 (diff) | |
download | systemd-b36746c90e8fade41d323ebdd89d9e41546e099b.tar.gz |
travis: check build with various compiler options
In the past we occasionally stumbled upon a build issue which could be
reproduced only with specific optimization level or other compilation
option. Let's try to build the current revision with several most common
compiler options causing such issues to catch them early.
-rw-r--r-- | .travis.yml | 42 | ||||
-rwxr-xr-x | travis-ci/managers/fedora.sh | 76 |
2 files changed, 112 insertions, 6 deletions
diff --git a/.travis.yml b/.travis.yml index 78cf5bc6f2..e57c199077 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,9 @@ env: - REPO_ROOT="$TRAVIS_BUILD_DIR" stages: + - name: Build check + if: type != cron + - name: Build & test if: type != cron @@ -20,6 +23,45 @@ stages: jobs: include: + - stage: Build check + name: Fedora Rawhide (gcc) + language: bash + env: + - FEDORA_RELEASE="rawhide" + - CONT_NAME="systemd-fedora-$FEDORA_RELEASE" + - DOCKER_EXEC="docker exec -ti $CONT_NAME" + before_install: + - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce + - docker --version + install: + - $CI_MANAGERS/fedora.sh SETUP + script: + - set -e + # Build systemd + - $CI_MANAGERS/fedora.sh RUN_BUILD_CHECK_GCC + - set +e + after_script: + - $CI_MANAGERS/fedora.sh CLEANUP + + - name: Fedora Rawhide (clang) + language: bash + env: + - FEDORA_RELEASE="rawhide" + - CONT_NAME="systemd-fedora-$FEDORA_RELEASE" + - DOCKER_EXEC="docker exec -ti $CONT_NAME" + before_install: + - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce + - docker --version + install: + - $CI_MANAGERS/fedora.sh SETUP + script: + - set -e + # Build systemd + - $CI_MANAGERS/fedora.sh RUN_BUILD_CHECK_CLANG + - set +e + after_script: + - $CI_MANAGERS/fedora.sh CLEANUP + - stage: Build & test name: Debian Testing language: bash diff --git a/travis-ci/managers/fedora.sh b/travis-ci/managers/fedora.sh index b0f431aac9..b3c85ebd09 100755 --- a/travis-ci/managers/fedora.sh +++ b/travis-ci/managers/fedora.sh @@ -29,10 +29,34 @@ ADDITIONAL_DEPS=(dnf-plugins-core openssl-devel p11-kit-devel) -function info() { +info() { echo -e "\033[33;1m$1\033[0m" } +error() { + echo >&2 -e "\033[31;1m$1\033[0m" +} + +success() { + echo >&2 -e "\033[32;1m$1\033[0m" +} + +# Simple wrapper which retries given command up to five times +_retry() { + local EC=1 + + for i in {1..5}; do + if "$@"; then + EC=0 + break + fi + + sleep $((i * 5)) + done + + return $EC +} + set -e source "$(dirname $0)/travis_wait.bash" @@ -52,11 +76,11 @@ for phase in "${PHASES[@]}"; do # running following dnf commands during the initializing/starting # (early/late bootup) phase, which caused nasty race conditions $DOCKER_EXEC bash -c 'systemctl is-system-running --wait || :' - $DOCKER_EXEC dnf makecache + _retry $DOCKER_EXEC dnf makecache # Install necessary build/test requirements - $DOCKER_EXEC dnf -y --exclude selinux-policy\* upgrade - $DOCKER_EXEC dnf -y install "${ADDITIONAL_DEPS[@]}" - $DOCKER_EXEC dnf -y builddep systemd + _retry $DOCKER_EXEC dnf -y --exclude selinux-policy\* upgrade + _retry $DOCKER_EXEC dnf -y install "${ADDITIONAL_DEPS[@]}" + _retry $DOCKER_EXEC dnf -y builddep systemd ;; RUN) info "Run phase" @@ -86,13 +110,53 @@ for phase in "${PHASES[@]}"; do -t $CONT_NAME \ meson test --timeout-multiplier=3 -C ./build/ --print-errorlogs ;; + RUN_BUILD_CHECK_GCC|RUN_BUILD_CHECK_CLANG) + ARGS=( + "--optimization=0" + "--optimization=2" + "--optimization=3" + "--optimization=s" + "-Db_lto=true" + "-Db_ndebug=true" + ) + + if [[ "$phase" = "RUN_BUILD_CHECK_CLANG" ]]; then + ENV_VARS="-e CC=clang -e CXX=clang++" + $DOCKER_EXEC clang --version + else + $DOCKER_EXEC gcc --version + fi + + for args in "${ARGS[@]}"; do + SECONDS=0 + info "Checking build with $args" + # Redirect meson/ninja logs into separate files, otherwise we + # would trip over Travis' log size limit + if ! docker exec $ENV_VARS -it $CONT_NAME meson --werror $args build &> meson.log; then + cat meson.log + error "meson failed with $args" + exit 1 + fi + + if ! $DOCKER_EXEC ninja -v -C build &> ninja.log; then + cat ninja.log + error "ninja failed with $args" + exit 1 + fi + + $DOCKER_EXEC rm -fr build + rm -f meson.log ninja.log + success "Build with $args passed in $SECONDS seconds" + done + + ;; CLEANUP) info "Cleanup phase" docker stop $CONT_NAME docker rm -f $CONT_NAME ;; *) - echo >&2 "Unknown phase '$phase'" + error "Unknown phase '$phase'" exit 1 esac done |