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