1# The current Travis default is a VM based 16.04 Xenial on GCE 2# Additional builds with specific requirements for a full VM need to 3# be added as additional matrix: entries later on 4os: linux 5dist: focal 6language: c 7compiler: 8 - gcc 9cache: 10 # There is one cache per branch and compiler version. 11 # characteristics of each job are used to identify the cache: 12 # - OS name (currently only linux) 13 # - OS distribution (for Linux, bionic or focal) 14 # - Names and values of visible environment variables set in .travis.yml or Settings panel 15 timeout: 1200 16 ccache: true 17 pip: true 18 directories: 19 - $HOME/avocado/data/cache 20 21 22addons: 23 apt: 24 packages: 25 # Build dependencies 26 - libaio-dev 27 - libattr1-dev 28 - libbrlapi-dev 29 - libcap-ng-dev 30 - libgcc-7-dev 31 - libgnutls28-dev 32 - libgtk-3-dev 33 - libiscsi-dev 34 - liblttng-ust-dev 35 - libncurses5-dev 36 - libnfs-dev 37 - libnss3-dev 38 - libpixman-1-dev 39 - libpng-dev 40 - librados-dev 41 - libsdl2-dev 42 - libsdl2-image-dev 43 - libseccomp-dev 44 - libspice-protocol-dev 45 - libspice-server-dev 46 - libssh-dev 47 - liburcu-dev 48 - libusb-1.0-0-dev 49 - libvdeplug-dev 50 - libvte-2.91-dev 51 - libzstd-dev 52 - sparse 53 - uuid-dev 54 - gcovr 55 # Tests dependencies 56 - genisoimage 57 58 59# The channel name "irc.oftc.net#qemu" is encrypted against qemu/qemu 60# to prevent IRC notifications from forks. This was created using: 61# $ travis encrypt -r "qemu/qemu" "irc.oftc.net#qemu" 62notifications: 63 irc: 64 channels: 65 - secure: "F7GDRgjuOo5IUyRLqSkmDL7kvdU4UcH3Lm/W2db2JnDHTGCqgEdaYEYKciyCLZ57vOTsTsOgesN8iUT7hNHBd1KWKjZe9KDTZWppWRYVwAwQMzVeSOsbbU4tRoJ6Pp+3qhH1Z0eGYR9ZgKYAoTumDFgSAYRp4IscKS8jkoedOqM=" 66 on_success: change 67 on_failure: always 68 69 70env: 71 global: 72 - SRC_DIR=".." 73 - BUILD_DIR="build" 74 - BASE_CONFIG="--disable-docs --disable-tools" 75 - TEST_BUILD_CMD="" 76 - TEST_CMD="make check V=1" 77 # This is broadly a list of "mainline" softmmu targets which have support across the major distros 78 - MAIN_SOFTMMU_TARGETS="aarch64-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu" 79 - CCACHE_SLOPPINESS="include_file_ctime,include_file_mtime" 80 - CCACHE_MAXSIZE=1G 81 - G_MESSAGES_DEBUG=error 82 83 84git: 85 # we want to do this ourselves 86 submodules: false 87 88# Common first phase for all steps 89before_install: 90 - if command -v ccache ; then ccache --zero-stats ; fi 91 - export JOBS=$(($(getconf _NPROCESSORS_ONLN) + 1)) 92 - echo "=== Using ${JOBS} simultaneous jobs ===" 93 94# Configure step - may be overridden 95before_script: 96 - mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR} 97 - ${SRC_DIR}/configure ${BASE_CONFIG} ${CONFIG} || { cat config.log && exit 1; } 98 99# Main build & test - rarely overridden - controlled by TEST_CMD 100script: 101 - BUILD_RC=0 && make -j${JOBS} || BUILD_RC=$? 102 - | 103 if [ "$BUILD_RC" -eq 0 ] && [ -n "$TEST_BUILD_CMD" ]; then 104 ${TEST_BUILD_CMD} || BUILD_RC=$? 105 else 106 $(exit $BUILD_RC); 107 fi 108 - | 109 if [ "$BUILD_RC" -eq 0 ] ; then 110 ${TEST_CMD} ; 111 else 112 $(exit $BUILD_RC); 113 fi 114after_script: 115 - df -h 116 - if command -v ccache ; then ccache --show-stats ; fi 117 118 119jobs: 120 include: 121 - name: "GCC static (user)" 122 env: 123 - CONFIG="--disable-system --static" 124 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 125 126 # Just build tools and run minimal unit and softfloat checks 127 - name: "GCC check-unit and check-softfloat" 128 env: 129 - BASE_CONFIG="--enable-tools" 130 - CONFIG="--disable-user --disable-system" 131 - TEST_CMD="make check-unit check-softfloat -j${JOBS}" 132 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 133 134 135 # --enable-debug implies --enable-debug-tcg, also runs quite a bit slower 136 - name: "GCC debug (main-softmmu)" 137 env: 138 - CONFIG="--enable-debug --target-list=${MAIN_SOFTMMU_TARGETS}" 139 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug" 140 141 142 # TCG debug can be run just on its own and is mostly agnostic to user/softmmu distinctions 143 - name: "GCC debug (user)" 144 env: 145 - CONFIG="--enable-debug-tcg --disable-system" 146 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg" 147 148 # Module builds are mostly of interest to major distros 149 - name: "GCC modules (main-softmmu)" 150 env: 151 - CONFIG="--enable-modules --target-list=${MAIN_SOFTMMU_TARGETS}" 152 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 153 154 155 # Alternate coroutines implementations are only really of interest to KVM users 156 # However we can't test against KVM on Travis so we can only run unit tests 157 - name: "check-unit coroutine=ucontext" 158 env: 159 - CONFIG="--with-coroutine=ucontext --disable-tcg" 160 - TEST_CMD="make check-unit -j${JOBS} V=1" 161 162 163 - name: "check-unit coroutine=sigaltstack" 164 env: 165 - CONFIG="--with-coroutine=sigaltstack --disable-tcg" 166 - TEST_CMD="make check-unit -j${JOBS} V=1" 167 168 169 # Check we can build docs and tools (out of tree) 170 - name: "tools and docs (bionic)" 171 dist: bionic 172 env: 173 - BUILD_DIR="out-of-tree/build/dir" SRC_DIR="../../.." 174 - BASE_CONFIG="--enable-tools --enable-docs" 175 - CONFIG="--target-list=x86_64-softmmu,aarch64-linux-user" 176 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 177 addons: 178 apt: 179 packages: 180 - python3-sphinx 181 - perl 182 183 184 # Test with Clang for compile portability (Travis uses clang-5.0) 185 - name: "Clang (user)" 186 env: 187 - CONFIG="--disable-system --host-cc=clang --cxx=clang++" 188 - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-default" 189 compiler: clang 190 191 192 - name: "Clang (main-softmmu)" 193 env: 194 - CONFIG="--target-list=${MAIN_SOFTMMU_TARGETS} 195 --host-cc=clang --cxx=clang++" 196 - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-sanitize" 197 compiler: clang 198 before_script: 199 - mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR} 200 - ${SRC_DIR}/configure ${CONFIG} --extra-cflags="-fsanitize=undefined -Werror" || { cat config.log && exit 1; } 201 202 203 - name: "Clang (other-softmmu)" 204 env: 205 - CONFIG="--disable-user --target-list-exclude=${MAIN_SOFTMMU_TARGETS} 206 --host-cc=clang --cxx=clang++" 207 - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-default" 208 compiler: clang 209 210 211 # gprof/gcov are GCC features 212 - name: "GCC gprof/gcov" 213 dist: bionic 214 env: 215 - CONFIG="--enable-gprof --enable-gcov --disable-libssh 216 --target-list=${MAIN_SOFTMMU_TARGETS}" 217 after_success: 218 - ${SRC_DIR}/scripts/travis/coverage-summary.sh 219 220 221 # We manually include builds which we disable "make check" for 222 - name: "GCC without-default-devices (softmmu)" 223 env: 224 - CONFIG="--without-default-devices --disable-user" 225 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 226 - TEST_CMD="" 227 228 229 # Check the TCG interpreter (TCI) 230 - name: "GCC TCI" 231 env: 232 - CONFIG="--enable-debug-tcg --enable-tcg-interpreter --disable-kvm --disable-containers 233 --target-list=alpha-softmmu,arm-softmmu,hppa-softmmu,m68k-softmmu,microblaze-softmmu,moxie-softmmu,ppc-softmmu,s390x-softmmu,x86_64-softmmu" 234 - TEST_CMD="make check-qtest check-tcg V=1" 235 236 237 # We don't need to exercise every backend with every front-end 238 - name: "GCC trace log,simple,syslog (user)" 239 env: 240 - CONFIG="--enable-trace-backends=log,simple,syslog --disable-system" 241 - TEST_CMD="" 242 243 244 - name: "GCC trace ftrace (x86_64-softmmu)" 245 env: 246 - CONFIG="--enable-trace-backends=ftrace --target-list=x86_64-softmmu" 247 - TEST_CMD="" 248 249 250 - name: "GCC trace ust (x86_64-softmmu)" 251 env: 252 - CONFIG="--enable-trace-backends=ust --target-list=x86_64-softmmu" 253 - TEST_CMD="" 254 255 256 # Using newer GCC with sanitizers 257 - name: "GCC9 with sanitizers (softmmu)" 258 dist: bionic 259 addons: 260 apt: 261 update: true 262 sources: 263 # PPAs for newer toolchains 264 - ubuntu-toolchain-r-test 265 packages: 266 # Extra toolchains 267 - gcc-9 268 - g++-9 269 # Build dependencies 270 - libaio-dev 271 - libattr1-dev 272 - libbrlapi-dev 273 - libcap-ng-dev 274 - libgnutls28-dev 275 - libgtk-3-dev 276 - libiscsi-dev 277 - liblttng-ust-dev 278 - libnfs-dev 279 - libncurses5-dev 280 - libnss3-dev 281 - libpixman-1-dev 282 - libpng-dev 283 - librados-dev 284 - libsdl2-dev 285 - libsdl2-image-dev 286 - libseccomp-dev 287 - libspice-protocol-dev 288 - libspice-server-dev 289 - liburcu-dev 290 - libusb-1.0-0-dev 291 - libvte-2.91-dev 292 - sparse 293 - uuid-dev 294 language: generic 295 compiler: none 296 env: 297 - COMPILER_NAME=gcc CXX=g++-9 CC=gcc-9 298 - CONFIG="--cc=gcc-9 --cxx=g++-9 --disable-linux-user" 299 - TEST_CMD="" 300 before_script: 301 - mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR} 302 - ${SRC_DIR}/configure ${CONFIG} --extra-cflags="-g3 -O0 -fsanitize=thread" || { cat config.log && exit 1; } 303 304 305 # Run check-tcg against linux-user 306 - name: "GCC check-tcg (user)" 307 env: 308 - CONFIG="--disable-system --enable-debug-tcg" 309 - TEST_BUILD_CMD="make build-tcg" 310 - TEST_CMD="make check-tcg" 311 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg" 312 313 314 # Run check-tcg against softmmu targets 315 - name: "GCC check-tcg (some-softmmu)" 316 env: 317 - CONFIG="--enable-debug-tcg --target-list=xtensa-softmmu,arm-softmmu,aarch64-softmmu,alpha-softmmu" 318 - TEST_BUILD_CMD="make build-tcg" 319 - TEST_CMD="make check-tcg" 320 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg" 321 322 323 # Run check-tcg against softmmu targets (with plugins) 324 - name: "GCC plugins check-tcg (some-softmmu)" 325 env: 326 - CONFIG="--enable-plugins --enable-debug-tcg --target-list=xtensa-softmmu,arm-softmmu,aarch64-softmmu,alpha-softmmu" 327 - TEST_BUILD_CMD="make build-tcg" 328 - TEST_CMD="make check-tcg" 329 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg" 330 331 - name: "[aarch64] GCC check-tcg" 332 arch: arm64 333 dist: focal 334 addons: 335 apt_packages: 336 - libaio-dev 337 - libattr1-dev 338 - libbrlapi-dev 339 - libcap-ng-dev 340 - libgcrypt20-dev 341 - libgnutls28-dev 342 - libgtk-3-dev 343 - libiscsi-dev 344 - liblttng-ust-dev 345 - libncurses5-dev 346 - libnfs-dev 347 - libnss3-dev 348 - libpixman-1-dev 349 - libpng-dev 350 - librados-dev 351 - libsdl2-dev 352 - libseccomp-dev 353 - liburcu-dev 354 - libusb-1.0-0-dev 355 - libvdeplug-dev 356 - libvte-2.91-dev 357 # Tests dependencies 358 - genisoimage 359 env: 360 - TEST_CMD="make check check-tcg V=1" 361 - CONFIG="--disable-containers --target-list=${MAIN_SOFTMMU_TARGETS}" 362 - UNRELIABLE=true 363 364 - name: "[ppc64] GCC check-tcg" 365 arch: ppc64le 366 dist: focal 367 addons: 368 apt_packages: 369 - libaio-dev 370 - libattr1-dev 371 - libbrlapi-dev 372 - libcap-ng-dev 373 - libgcrypt20-dev 374 - libgnutls28-dev 375 - libgtk-3-dev 376 - libiscsi-dev 377 - liblttng-ust-dev 378 - libncurses5-dev 379 - libnfs-dev 380 - libnss3-dev 381 - libpixman-1-dev 382 - libpng-dev 383 - librados-dev 384 - libsdl2-dev 385 - libseccomp-dev 386 - liburcu-dev 387 - libusb-1.0-0-dev 388 - libvdeplug-dev 389 - libvte-2.91-dev 390 # Tests dependencies 391 - genisoimage 392 env: 393 - TEST_CMD="make check check-tcg V=1" 394 - CONFIG="--disable-containers --target-list=ppc64-softmmu,ppc64le-linux-user" 395 396 - name: "[s390x] GCC check-tcg" 397 arch: s390x 398 dist: bionic 399 addons: 400 apt_packages: 401 - libaio-dev 402 - libattr1-dev 403 - libbrlapi-dev 404 - libcap-ng-dev 405 - libgcrypt20-dev 406 - libgnutls28-dev 407 - libgtk-3-dev 408 - libiscsi-dev 409 - liblttng-ust-dev 410 - libncurses5-dev 411 - libnfs-dev 412 - libnss3-dev 413 - libpixman-1-dev 414 - libpng-dev 415 - librados-dev 416 - libsdl2-dev 417 - libseccomp-dev 418 - liburcu-dev 419 - libusb-1.0-0-dev 420 - libvdeplug-dev 421 - libvte-2.91-dev 422 # Tests dependencies 423 - genisoimage 424 env: 425 - TEST_CMD="make check check-tcg V=1" 426 - CONFIG="--disable-containers --target-list=${MAIN_SOFTMMU_TARGETS},s390x-linux-user" 427 - UNRELIABLE=true 428 script: 429 - BUILD_RC=0 && make -j${JOBS} || BUILD_RC=$? 430 - | 431 if [ "$BUILD_RC" -eq 0 ] ; then 432 mv pc-bios/s390-ccw/*.img pc-bios/ ; 433 ${TEST_CMD} ; 434 else 435 $(exit $BUILD_RC); 436 fi 437 438 - name: "[s390x] GCC (other-softmmu)" 439 arch: s390x 440 dist: bionic 441 addons: 442 apt_packages: 443 - libaio-dev 444 - libattr1-dev 445 - libcap-ng-dev 446 - libgnutls28-dev 447 - libiscsi-dev 448 - liblttng-ust-dev 449 - liblzo2-dev 450 - libncurses-dev 451 - libnfs-dev 452 - libnss3-dev 453 - libpixman-1-dev 454 - libsdl2-dev 455 - libsdl2-image-dev 456 - libseccomp-dev 457 - libsnappy-dev 458 - libzstd-dev 459 - nettle-dev 460 - xfslibs-dev 461 # Tests dependencies 462 - genisoimage 463 env: 464 - CONFIG="--disable-containers --audio-drv-list=sdl --disable-user 465 --target-list-exclude=${MAIN_SOFTMMU_TARGETS}" 466 467 - name: "[s390x] GCC (user)" 468 arch: s390x 469 dist: bionic 470 addons: 471 apt_packages: 472 - libgcrypt20-dev 473 - libgnutls28-dev 474 env: 475 - CONFIG="--disable-containers --disable-system" 476 477 - name: "[s390x] Clang (disable-tcg)" 478 arch: s390x 479 dist: bionic 480 compiler: clang 481 addons: 482 apt_packages: 483 - libaio-dev 484 - libattr1-dev 485 - libbrlapi-dev 486 - libcap-ng-dev 487 - libgcrypt20-dev 488 - libgnutls28-dev 489 - libgtk-3-dev 490 - libiscsi-dev 491 - liblttng-ust-dev 492 - libncurses5-dev 493 - libnfs-dev 494 - libnss3-dev 495 - libpixman-1-dev 496 - libpng-dev 497 - librados-dev 498 - libsdl2-dev 499 - libseccomp-dev 500 - liburcu-dev 501 - libusb-1.0-0-dev 502 - libvdeplug-dev 503 - libvte-2.91-dev 504 env: 505 - TEST_CMD="make check-unit" 506 - CONFIG="--disable-containers --disable-tcg --enable-kvm 507 --disable-tools --host-cc=clang --cxx=clang++" 508 - UNRELIABLE=true 509 510 # Release builds 511 # The make-release script expect a QEMU version, so our tag must start with a 'v'. 512 # This is the case when release candidate tags are created. 513 - name: "Release tarball" 514 if: tag IS present AND tag =~ /^v\d+\.\d+(\.\d+)?(-\S*)?$/ 515 env: 516 # We want to build from the release tarball 517 - BUILD_DIR="release/build/dir" SRC_DIR="../../.." 518 - BASE_CONFIG="--prefix=$PWD/dist" 519 - CONFIG="--target-list=x86_64-softmmu,aarch64-softmmu,armeb-linux-user,ppc-linux-user" 520 - TEST_CMD="make install -j${JOBS}" 521 - QEMU_VERSION="${TRAVIS_TAG:1}" 522 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 523 script: 524 - make -C ${SRC_DIR} qemu-${QEMU_VERSION}.tar.bz2 525 - ls -l ${SRC_DIR}/qemu-${QEMU_VERSION}.tar.bz2 526 - tar -xf ${SRC_DIR}/qemu-${QEMU_VERSION}.tar.bz2 && cd qemu-${QEMU_VERSION} 527 - mkdir -p release-build && cd release-build 528 - ../configure ${BASE_CONFIG} ${CONFIG} || { cat config.log && exit 1; } 529 - make install 530 allow_failures: 531 - env: UNRELIABLE=true 532