| # The current Travis default is a VM based 16.04 Xenial on GCE |
| # Additional builds with specific requirements for a full VM need to |
| # be added as additional matrix: entries later on |
| os: linux |
| dist: focal |
| language: c |
| compiler: |
| - gcc |
| cache: |
| # There is one cache per branch and compiler version. |
| # characteristics of each job are used to identify the cache: |
| # - OS name (currently only linux) |
| # - OS distribution (for Linux, bionic or focal) |
| # - Names and values of visible environment variables set in .travis.yml or Settings panel |
| timeout: 1200 |
| ccache: true |
| pip: true |
| directories: |
| - $HOME/avocado/data/cache |
| |
| |
| addons: |
| apt: |
| packages: |
| # Build dependencies |
| - libaio-dev |
| - libattr1-dev |
| - libbrlapi-dev |
| - libcap-ng-dev |
| - libgcc-7-dev |
| - libgnutls28-dev |
| - libgtk-3-dev |
| - libiscsi-dev |
| - liblttng-ust-dev |
| - libncurses5-dev |
| - libnfs-dev |
| - libnss3-dev |
| - libpixman-1-dev |
| - libpng-dev |
| - librados-dev |
| - libsdl2-dev |
| - libsdl2-image-dev |
| - libseccomp-dev |
| - libspice-protocol-dev |
| - libspice-server-dev |
| - libssh-dev |
| - liburcu-dev |
| - libusb-1.0-0-dev |
| - libvdeplug-dev |
| - libvte-2.91-dev |
| - libzstd-dev |
| - ninja-build |
| - sparse |
| - uuid-dev |
| - gcovr |
| # Tests dependencies |
| - genisoimage |
| |
| |
| # The channel name "irc.oftc.net#qemu" is encrypted against qemu/qemu |
| # to prevent IRC notifications from forks. This was created using: |
| # $ travis encrypt -r "qemu/qemu" "irc.oftc.net#qemu" |
| notifications: |
| irc: |
| channels: |
| - secure: "F7GDRgjuOo5IUyRLqSkmDL7kvdU4UcH3Lm/W2db2JnDHTGCqgEdaYEYKciyCLZ57vOTsTsOgesN8iUT7hNHBd1KWKjZe9KDTZWppWRYVwAwQMzVeSOsbbU4tRoJ6Pp+3qhH1Z0eGYR9ZgKYAoTumDFgSAYRp4IscKS8jkoedOqM=" |
| on_success: change |
| on_failure: always |
| |
| |
| env: |
| global: |
| - SRC_DIR=".." |
| - BUILD_DIR="build" |
| - BASE_CONFIG="--disable-docs --disable-tools" |
| - TEST_BUILD_CMD="" |
| - TEST_CMD="make check V=1" |
| # This is broadly a list of "mainline" softmmu targets which have support across the major distros |
| - MAIN_SOFTMMU_TARGETS="aarch64-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu" |
| - CCACHE_SLOPPINESS="include_file_ctime,include_file_mtime" |
| - CCACHE_MAXSIZE=1G |
| - G_MESSAGES_DEBUG=error |
| |
| |
| git: |
| # we want to do this ourselves |
| submodules: false |
| |
| # Common first phase for all steps |
| before_install: |
| - if command -v ccache ; then ccache --zero-stats ; fi |
| - export JOBS=$(($(getconf _NPROCESSORS_ONLN) + 1)) |
| - echo "=== Using ${JOBS} simultaneous jobs ===" |
| |
| # Configure step - may be overridden |
| before_script: |
| - mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR} |
| - ${SRC_DIR}/configure ${BASE_CONFIG} ${CONFIG} || { cat config.log meson-logs/meson-log.txt && exit 1; } |
| |
| # Main build & test - rarely overridden - controlled by TEST_CMD |
| script: |
| - BUILD_RC=0 && make -j${JOBS} || BUILD_RC=$? |
| - | |
| if [ "$BUILD_RC" -eq 0 ] && [ -n "$TEST_BUILD_CMD" ]; then |
| ${TEST_BUILD_CMD} || BUILD_RC=$? |
| else |
| $(exit $BUILD_RC); |
| fi |
| - | |
| if [ "$BUILD_RC" -eq 0 ] ; then |
| ${TEST_CMD} ; |
| else |
| $(exit $BUILD_RC); |
| fi |
| after_script: |
| - df -h |
| - if command -v ccache ; then ccache --show-stats ; fi |
| |
| |
| jobs: |
| include: |
| # Just build tools and run minimal unit and softfloat checks |
| - name: "GCC check-unit and check-softfloat" |
| env: |
| - BASE_CONFIG="--enable-tools" |
| - CONFIG="--disable-user --disable-system" |
| - TEST_CMD="make check-unit check-softfloat -j${JOBS}" |
| - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" |
| |
| |
| # --enable-debug implies --enable-debug-tcg, also runs quite a bit slower |
| - name: "GCC debug (main-softmmu)" |
| env: |
| - CONFIG="--enable-debug --target-list=${MAIN_SOFTMMU_TARGETS}" |
| - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug" |
| |
| |
| # TCG debug can be run just on its own and is mostly agnostic to user/softmmu distinctions |
| - name: "GCC debug (user)" |
| env: |
| - CONFIG="--enable-debug-tcg --disable-system" |
| - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg" |
| |
| # Module builds are mostly of interest to major distros |
| - name: "GCC modules (main-softmmu)" |
| env: |
| - CONFIG="--enable-modules --target-list=${MAIN_SOFTMMU_TARGETS}" |
| - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" |
| |
| |
| # Check we can build docs and tools (out of tree) |
| - name: "tools and docs (bionic)" |
| dist: bionic |
| env: |
| - BUILD_DIR="out-of-tree/build/dir" SRC_DIR="../../.." |
| - BASE_CONFIG="--enable-tools --enable-docs" |
| - CONFIG="--target-list=x86_64-softmmu,aarch64-linux-user" |
| - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" |
| addons: |
| apt: |
| packages: |
| - ninja-build |
| - python3-sphinx |
| - perl |
| |
| |
| # Test with Clang for compile portability (Travis uses clang-5.0) |
| - name: "Clang (user)" |
| env: |
| - CONFIG="--disable-system --host-cc=clang --cxx=clang++" |
| - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-default" |
| compiler: clang |
| |
| |
| - name: "Clang (main-softmmu)" |
| env: |
| - CONFIG="--target-list=${MAIN_SOFTMMU_TARGETS} |
| --host-cc=clang --cxx=clang++" |
| - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-sanitize" |
| compiler: clang |
| before_script: |
| - mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR} |
| - ${SRC_DIR}/configure ${CONFIG} --extra-cflags="-fsanitize=undefined -Werror" || { cat config.log meson-logs/meson-log.txt && exit 1; } |
| |
| |
| - name: "Clang (other-softmmu)" |
| env: |
| - CONFIG="--disable-user --target-list-exclude=${MAIN_SOFTMMU_TARGETS} |
| --host-cc=clang --cxx=clang++" |
| - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-default" |
| compiler: clang |
| |
| |
| # gprof/gcov are GCC features |
| - name: "GCC gprof/gcov" |
| dist: bionic |
| addons: |
| apt: |
| packages: |
| - ninja-build |
| env: |
| - CONFIG="--enable-gprof --enable-gcov --disable-libssh |
| --target-list=${MAIN_SOFTMMU_TARGETS}" |
| after_success: |
| - ${SRC_DIR}/scripts/travis/coverage-summary.sh |
| |
| |
| # We manually include builds which we disable "make check" for |
| - name: "GCC without-default-devices (softmmu)" |
| env: |
| - CONFIG="--without-default-devices --disable-user" |
| - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" |
| - TEST_CMD="" |
| |
| |
| # Using newer GCC with sanitizers |
| - name: "GCC9 with sanitizers (softmmu)" |
| dist: bionic |
| addons: |
| apt: |
| update: true |
| sources: |
| # PPAs for newer toolchains |
| - ubuntu-toolchain-r-test |
| packages: |
| # Extra toolchains |
| - gcc-9 |
| - g++-9 |
| # Build dependencies |
| - libaio-dev |
| - libattr1-dev |
| - libbrlapi-dev |
| - libcap-ng-dev |
| - libgnutls28-dev |
| - libgtk-3-dev |
| - libiscsi-dev |
| - liblttng-ust-dev |
| - libnfs-dev |
| - libncurses5-dev |
| - libnss3-dev |
| - libpixman-1-dev |
| - libpng-dev |
| - librados-dev |
| - libsdl2-dev |
| - libsdl2-image-dev |
| - libseccomp-dev |
| - libspice-protocol-dev |
| - libspice-server-dev |
| - liburcu-dev |
| - libusb-1.0-0-dev |
| - libvte-2.91-dev |
| - ninja-build |
| - sparse |
| - uuid-dev |
| language: generic |
| compiler: none |
| env: |
| - COMPILER_NAME=gcc CXX=g++-9 CC=gcc-9 |
| - CONFIG="--cc=gcc-9 --cxx=g++-9 --disable-linux-user" |
| - TEST_CMD="" |
| before_script: |
| - mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR} |
| - ${SRC_DIR}/configure ${CONFIG} --extra-cflags="-g3 -O0 -fsanitize=thread" || { cat config.log meson-logs/meson-log.txt && exit 1; } |
| |
| |
| - name: "[aarch64] GCC check-tcg" |
| arch: arm64 |
| dist: focal |
| addons: |
| apt_packages: |
| - libaio-dev |
| - libattr1-dev |
| - libbrlapi-dev |
| - libcap-ng-dev |
| - libgcrypt20-dev |
| - libgnutls28-dev |
| - libgtk-3-dev |
| - libiscsi-dev |
| - liblttng-ust-dev |
| - libncurses5-dev |
| - libnfs-dev |
| - libnss3-dev |
| - libpixman-1-dev |
| - libpng-dev |
| - librados-dev |
| - libsdl2-dev |
| - libseccomp-dev |
| - liburcu-dev |
| - libusb-1.0-0-dev |
| - libvdeplug-dev |
| - libvte-2.91-dev |
| - ninja-build |
| # Tests dependencies |
| - genisoimage |
| env: |
| - TEST_CMD="make check check-tcg V=1" |
| - CONFIG="--disable-containers --target-list=${MAIN_SOFTMMU_TARGETS}" |
| - UNRELIABLE=true |
| |
| - name: "[ppc64] GCC check-tcg" |
| arch: ppc64le |
| dist: focal |
| addons: |
| apt_packages: |
| - libaio-dev |
| - libattr1-dev |
| - libbrlapi-dev |
| - libcap-ng-dev |
| - libgcrypt20-dev |
| - libgnutls28-dev |
| - libgtk-3-dev |
| - libiscsi-dev |
| - liblttng-ust-dev |
| - libncurses5-dev |
| - libnfs-dev |
| - libnss3-dev |
| - libpixman-1-dev |
| - libpng-dev |
| - librados-dev |
| - libsdl2-dev |
| - libseccomp-dev |
| - liburcu-dev |
| - libusb-1.0-0-dev |
| - libvdeplug-dev |
| - libvte-2.91-dev |
| - ninja-build |
| # Tests dependencies |
| - genisoimage |
| env: |
| - TEST_CMD="make check check-tcg V=1" |
| - CONFIG="--disable-containers --target-list=ppc64-softmmu,ppc64le-linux-user" |
| |
| - name: "[s390x] GCC check-tcg" |
| arch: s390x |
| dist: bionic |
| addons: |
| apt_packages: |
| - libaio-dev |
| - libattr1-dev |
| - libbrlapi-dev |
| - libcap-ng-dev |
| - libgcrypt20-dev |
| - libgnutls28-dev |
| - libgtk-3-dev |
| - libiscsi-dev |
| - liblttng-ust-dev |
| - libncurses5-dev |
| - libnfs-dev |
| - libnss3-dev |
| - libpixman-1-dev |
| - libpng-dev |
| - librados-dev |
| - libsdl2-dev |
| - libseccomp-dev |
| - liburcu-dev |
| - libusb-1.0-0-dev |
| - libvdeplug-dev |
| - libvte-2.91-dev |
| - ninja-build |
| # Tests dependencies |
| - genisoimage |
| env: |
| - TEST_CMD="make check check-tcg V=1" |
| - CONFIG="--disable-containers --target-list=${MAIN_SOFTMMU_TARGETS},s390x-linux-user" |
| - UNRELIABLE=true |
| script: |
| - BUILD_RC=0 && make -j${JOBS} || BUILD_RC=$? |
| - | |
| if [ "$BUILD_RC" -eq 0 ] ; then |
| mv pc-bios/s390-ccw/*.img pc-bios/ ; |
| ${TEST_CMD} ; |
| else |
| $(exit $BUILD_RC); |
| fi |
| |
| - name: "[s390x] GCC (other-softmmu)" |
| arch: s390x |
| dist: bionic |
| addons: |
| apt_packages: |
| - libaio-dev |
| - libattr1-dev |
| - libcap-ng-dev |
| - libgnutls28-dev |
| - libiscsi-dev |
| - liblttng-ust-dev |
| - liblzo2-dev |
| - libncurses-dev |
| - libnfs-dev |
| - libnss3-dev |
| - libpixman-1-dev |
| - libsdl2-dev |
| - libsdl2-image-dev |
| - libseccomp-dev |
| - libsnappy-dev |
| - libzstd-dev |
| - nettle-dev |
| - xfslibs-dev |
| - ninja-build |
| # Tests dependencies |
| - genisoimage |
| env: |
| - CONFIG="--disable-containers --audio-drv-list=sdl --disable-user |
| --target-list-exclude=${MAIN_SOFTMMU_TARGETS}" |
| |
| - name: "[s390x] GCC (user)" |
| arch: s390x |
| dist: bionic |
| addons: |
| apt_packages: |
| - libgcrypt20-dev |
| - libgnutls28-dev |
| - ninja-build |
| env: |
| - CONFIG="--disable-containers --disable-system" |
| |
| - name: "[s390x] Clang (disable-tcg)" |
| arch: s390x |
| dist: bionic |
| compiler: clang |
| addons: |
| apt_packages: |
| - libaio-dev |
| - libattr1-dev |
| - libbrlapi-dev |
| - libcap-ng-dev |
| - libgcrypt20-dev |
| - libgnutls28-dev |
| - libgtk-3-dev |
| - libiscsi-dev |
| - liblttng-ust-dev |
| - libncurses5-dev |
| - libnfs-dev |
| - libnss3-dev |
| - libpixman-1-dev |
| - libpng-dev |
| - librados-dev |
| - libsdl2-dev |
| - libseccomp-dev |
| - liburcu-dev |
| - libusb-1.0-0-dev |
| - libvdeplug-dev |
| - libvte-2.91-dev |
| - ninja-build |
| env: |
| - TEST_CMD="make check-unit" |
| - CONFIG="--disable-containers --disable-tcg --enable-kvm |
| --disable-tools --host-cc=clang --cxx=clang++" |
| - UNRELIABLE=true |
| |
| # Release builds |
| # The make-release script expect a QEMU version, so our tag must start with a 'v'. |
| # This is the case when release candidate tags are created. |
| - name: "Release tarball" |
| if: tag IS present AND tag =~ /^v\d+\.\d+(\.\d+)?(-\S*)?$/ |
| env: |
| # We want to build from the release tarball |
| - BUILD_DIR="release/build/dir" SRC_DIR="../../.." |
| - BASE_CONFIG="--prefix=$PWD/dist" |
| - CONFIG="--target-list=x86_64-softmmu,aarch64-softmmu,armeb-linux-user,ppc-linux-user" |
| - TEST_CMD="make install -j${JOBS}" |
| - QEMU_VERSION="${TRAVIS_TAG:1}" |
| - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" |
| script: |
| - make -C ${SRC_DIR} qemu-${QEMU_VERSION}.tar.bz2 |
| - ls -l ${SRC_DIR}/qemu-${QEMU_VERSION}.tar.bz2 |
| - tar -xf ${SRC_DIR}/qemu-${QEMU_VERSION}.tar.bz2 && cd qemu-${QEMU_VERSION} |
| - mkdir -p release-build && cd release-build |
| - ../configure ${BASE_CONFIG} ${CONFIG} || { cat config.log meson-logs/meson-log.txt && exit 1; } |
| - make install |
| allow_failures: |
| - env: UNRELIABLE=true |