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 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 - if command -v ccache ; then ccache --show-stats ; fi 116 117 118jobs: 119 include: 120 - name: "GCC static (user)" 121 env: 122 - CONFIG="--disable-system --static" 123 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 124 125 126 # we split the system builds as it takes a while to build them all 127 - name: "GCC (main-softmmu)" 128 env: 129 - CONFIG="--disable-user --target-list=${MAIN_SOFTMMU_TARGETS}" 130 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 131 132 133 - name: "GCC (other-softmmu)" 134 env: 135 - CONFIG="--disable-user --target-list-exclude=${MAIN_SOFTMMU_TARGETS}" 136 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 137 138 139 # Just build tools and run minimal unit and softfloat checks 140 - name: "GCC check-softfloat (user)" 141 env: 142 - BASE_CONFIG="--enable-tools" 143 - CONFIG="--disable-user --disable-system" 144 - TEST_CMD="make check-unit check-softfloat -j${JOBS}" 145 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 146 147 148 # --enable-debug implies --enable-debug-tcg, also runs quite a bit slower 149 - name: "GCC debug (main-softmmu)" 150 env: 151 - CONFIG="--enable-debug --target-list=${MAIN_SOFTMMU_TARGETS}" 152 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug" 153 154 155 # TCG debug can be run just on its own and is mostly agnostic to user/softmmu distinctions 156 - name: "GCC debug (user)" 157 env: 158 - CONFIG="--enable-debug-tcg --disable-system" 159 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg" 160 161 162 - name: "GCC some libs disabled (main-softmmu)" 163 env: 164 - CONFIG="--disable-linux-aio --disable-cap-ng --disable-attr --disable-brlapi --disable-libusb --disable-replication --target-list=${MAIN_SOFTMMU_TARGETS}" 165 166 167 # Module builds are mostly of interest to major distros 168 - name: "GCC modules (main-softmmu)" 169 env: 170 - CONFIG="--enable-modules --target-list=${MAIN_SOFTMMU_TARGETS}" 171 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 172 173 174 # Alternate coroutines implementations are only really of interest to KVM users 175 # However we can't test against KVM on Travis so we can only run unit tests 176 - name: "check-unit coroutine=ucontext" 177 env: 178 - CONFIG="--with-coroutine=ucontext --disable-tcg" 179 - TEST_CMD="make check-unit -j${JOBS} V=1" 180 181 182 - name: "check-unit coroutine=sigaltstack" 183 env: 184 - CONFIG="--with-coroutine=sigaltstack --disable-tcg" 185 - TEST_CMD="make check-unit -j${JOBS} V=1" 186 187 188 # Check we can build docs and tools (out of tree) 189 - name: "tools and docs (bionic)" 190 dist: bionic 191 env: 192 - BUILD_DIR="out-of-tree/build/dir" SRC_DIR="../../.." 193 - BASE_CONFIG="--enable-tools --enable-docs" 194 - CONFIG="--target-list=x86_64-softmmu,aarch64-linux-user" 195 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 196 addons: 197 apt: 198 packages: 199 - python3-sphinx 200 - texinfo 201 - perl 202 203 204 # Test with Clang for compile portability (Travis uses clang-5.0) 205 - name: "Clang (user)" 206 env: 207 - CONFIG="--disable-system" 208 - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-default" 209 compiler: clang 210 211 212 - name: "Clang (main-softmmu)" 213 env: 214 - CONFIG="--target-list=${MAIN_SOFTMMU_TARGETS} " 215 - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-sanitize" 216 compiler: clang 217 before_script: 218 - mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR} 219 - ${SRC_DIR}/configure ${CONFIG} --extra-cflags="-fsanitize=undefined -Werror" || { cat config.log && exit 1; } 220 221 222 - name: "Clang (other-softmmu)" 223 env: 224 - CONFIG="--disable-user --target-list-exclude=${MAIN_SOFTMMU_TARGETS}" 225 - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-default" 226 compiler: clang 227 228 229 # gprof/gcov are GCC features 230 - name: "GCC gprof/gcov" 231 env: 232 - CONFIG="--enable-gprof --enable-gcov --disable-pie --target-list=${MAIN_SOFTMMU_TARGETS}" 233 after_success: 234 - ${SRC_DIR}/scripts/travis/coverage-summary.sh 235 236 237 # We manually include builds which we disable "make check" for 238 - name: "GCC without-default-devices (softmmu)" 239 env: 240 - CONFIG="--without-default-devices --disable-user" 241 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 242 - TEST_CMD="" 243 244 245 # Check the TCG interpreter (TCI) 246 - name: "GCC TCI" 247 env: 248 - CONFIG="--enable-debug-tcg --enable-tcg-interpreter --disable-kvm --disable-containers 249 --target-list=alpha-softmmu,arm-softmmu,hppa-softmmu,m68k-softmmu,microblaze-softmmu,moxie-softmmu,ppc-softmmu,s390x-softmmu,x86_64-softmmu" 250 - TEST_CMD="make check-qtest check-tcg V=1" 251 252 253 # We don't need to exercise every backend with every front-end 254 - name: "GCC trace log,simple,syslog (user)" 255 env: 256 - CONFIG="--enable-trace-backends=log,simple,syslog --disable-system" 257 - TEST_CMD="" 258 259 260 - name: "GCC trace ftrace (x86_64-softmmu)" 261 env: 262 - CONFIG="--enable-trace-backends=ftrace --target-list=x86_64-softmmu" 263 - TEST_CMD="" 264 265 266 - name: "GCC trace ust (x86_64-softmmu)" 267 env: 268 - CONFIG="--enable-trace-backends=ust --target-list=x86_64-softmmu" 269 - TEST_CMD="" 270 271 272 # MacOSX builds - cirrus.yml also tests some MacOS builds including latest Xcode 273 274 - name: "OSX Xcode 10.3" 275 env: 276 - BASE_CONFIG="--disable-docs --enable-tools" 277 - CONFIG="--target-list=i386-softmmu,ppc-softmmu,ppc64-softmmu,m68k-softmmu,x86_64-softmmu" 278 os: osx 279 osx_image: xcode10.3 280 compiler: clang 281 addons: 282 homebrew: 283 packages: 284 - ccache 285 - glib 286 - pixman 287 - gnu-sed 288 - python 289 update: true 290 before_script: 291 - brew link --overwrite python 292 - export PATH="/usr/local/opt/ccache/libexec:$PATH" 293 - mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR} 294 - ${SRC_DIR}/configure ${BASE_CONFIG} ${CONFIG} || { cat config.log && exit 1; } 295 296 297 # Python builds 298 - name: "GCC Python 3.5 (x86_64-softmmu)" 299 env: 300 - CONFIG="--target-list=x86_64-softmmu" 301 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 302 language: python 303 python: 3.5 304 305 306 - name: "GCC Python 3.6 (x86_64-softmmu)" 307 env: 308 - CONFIG="--target-list=x86_64-softmmu" 309 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 310 language: python 311 python: 3.6 312 313 314 # Acceptance (Functional) tests 315 - name: "GCC check-acceptance" 316 dist: bionic 317 env: 318 - CONFIG="--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" 319 - TEST_CMD="make check-acceptance" 320 after_script: 321 - 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 322 addons: 323 apt: 324 packages: 325 - python3-pil 326 - python3-pip 327 - python3-numpy 328 - python3-opencv 329 - python3-venv 330 - rpm2cpio 331 - tesseract-ocr 332 - tesseract-ocr-eng 333 334 335 # Using newer GCC with sanitizers 336 - name: "GCC9 with sanitizers (softmmu)" 337 addons: 338 apt: 339 update: true 340 sources: 341 # PPAs for newer toolchains 342 - ubuntu-toolchain-r-test 343 packages: 344 # Extra toolchains 345 - gcc-9 346 - g++-9 347 # Build dependencies 348 - libaio-dev 349 - libattr1-dev 350 - libbrlapi-dev 351 - libcap-ng-dev 352 - libgnutls-dev 353 - libgtk-3-dev 354 - libiscsi-dev 355 - liblttng-ust-dev 356 - libnfs-dev 357 - libncurses5-dev 358 - libnss3-dev 359 - libpixman-1-dev 360 - libpng12-dev 361 - librados-dev 362 - libsdl2-dev 363 - libsdl2-image-dev 364 - libseccomp-dev 365 - libspice-protocol-dev 366 - libspice-server-dev 367 - libssh-dev 368 - liburcu-dev 369 - libusb-1.0-0-dev 370 - libvte-2.91-dev 371 - sparse 372 - uuid-dev 373 language: generic 374 compiler: none 375 env: 376 - COMPILER_NAME=gcc CXX=g++-9 CC=gcc-9 377 - CONFIG="--cc=gcc-9 --cxx=g++-9 --disable-pie --disable-linux-user" 378 - TEST_CMD="" 379 before_script: 380 - mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR} 381 - ${SRC_DIR}/configure ${CONFIG} --extra-cflags="-g3 -O0 -Wno-error=stringop-truncation -fsanitize=thread" --extra-ldflags="-fuse-ld=gold" || { cat config.log && exit 1; } 382 383 384 # Run check-tcg against linux-user 385 - name: "GCC check-tcg (user)" 386 env: 387 - CONFIG="--disable-system --enable-debug-tcg" 388 - TEST_BUILD_CMD="make build-tcg" 389 - TEST_CMD="make check-tcg" 390 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg" 391 392 393 # Run check-tcg against linux-user (with plugins) 394 # we skip sparc64-linux-user until it has been fixed somewhat 395 # we skip cris-linux-user as it doesn't use the common run loop 396 - name: "GCC plugins check-tcg (user)" 397 env: 398 - CONFIG="--disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user" 399 - TEST_BUILD_CMD="make build-tcg" 400 - TEST_CMD="make check-tcg" 401 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg" 402 403 404 # Run check-tcg against softmmu targets 405 - name: "GCC check-tcg (some-softmmu)" 406 env: 407 - CONFIG="--enable-debug-tcg --target-list=xtensa-softmmu,arm-softmmu,aarch64-softmmu,alpha-softmmu" 408 - TEST_BUILD_CMD="make build-tcg" 409 - TEST_CMD="make check-tcg" 410 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg" 411 412 413 # Run check-tcg against softmmu targets (with plugins) 414 - name: "GCC plugins check-tcg (some-softmmu)" 415 env: 416 - CONFIG="--enable-plugins --enable-debug-tcg --target-list=xtensa-softmmu,arm-softmmu,aarch64-softmmu,alpha-softmmu" 417 - TEST_BUILD_CMD="make build-tcg" 418 - TEST_CMD="make check-tcg" 419 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg" 420 421 - name: "[aarch64] GCC check-tcg" 422 arch: arm64 423 dist: xenial 424 addons: 425 apt_packages: 426 - libaio-dev 427 - libattr1-dev 428 - libbrlapi-dev 429 - libcap-ng-dev 430 - libgcrypt20-dev 431 - libgnutls28-dev 432 - libgtk-3-dev 433 - libiscsi-dev 434 - liblttng-ust-dev 435 - libncurses5-dev 436 - libnfs-dev 437 - libnss3-dev 438 - libpixman-1-dev 439 - libpng-dev 440 - librados-dev 441 - libsdl2-dev 442 - libseccomp-dev 443 - liburcu-dev 444 - libusb-1.0-0-dev 445 - libvdeplug-dev 446 - libvte-2.91-dev 447 # Tests dependencies 448 - genisoimage 449 env: 450 - TEST_CMD="make check check-tcg V=1" 451 - CONFIG="--disable-containers --target-list=${MAIN_SOFTMMU_TARGETS}" 452 453 - name: "[ppc64] GCC check-tcg" 454 arch: ppc64le 455 dist: xenial 456 addons: 457 apt_packages: 458 - libaio-dev 459 - libattr1-dev 460 - libbrlapi-dev 461 - libcap-ng-dev 462 - libgcrypt20-dev 463 - libgnutls28-dev 464 - libgtk-3-dev 465 - libiscsi-dev 466 - liblttng-ust-dev 467 - libncurses5-dev 468 - libnfs-dev 469 - libnss3-dev 470 - libpixman-1-dev 471 - libpng-dev 472 - librados-dev 473 - libsdl2-dev 474 - libseccomp-dev 475 - liburcu-dev 476 - libusb-1.0-0-dev 477 - libvdeplug-dev 478 - libvte-2.91-dev 479 # Tests dependencies 480 - genisoimage 481 env: 482 - TEST_CMD="make check check-tcg V=1" 483 - CONFIG="--disable-containers --target-list=${MAIN_SOFTMMU_TARGETS},ppc64le-linux-user" 484 485 - name: "[s390x] GCC check-tcg" 486 arch: s390x 487 dist: bionic 488 addons: 489 apt_packages: 490 - libaio-dev 491 - libattr1-dev 492 - libbrlapi-dev 493 - libcap-ng-dev 494 - libgcrypt20-dev 495 - libgnutls28-dev 496 - libgtk-3-dev 497 - libiscsi-dev 498 - liblttng-ust-dev 499 - libncurses5-dev 500 - libnfs-dev 501 - libnss3-dev 502 - libpixman-1-dev 503 - libpng-dev 504 - librados-dev 505 - libsdl2-dev 506 - libseccomp-dev 507 - liburcu-dev 508 - libusb-1.0-0-dev 509 - libvdeplug-dev 510 - libvte-2.91-dev 511 # Tests dependencies 512 - genisoimage 513 env: 514 - TEST_CMD="make check check-tcg V=1" 515 - CONFIG="--disable-containers --target-list=${MAIN_SOFTMMU_TARGETS},s390x-linux-user" 516 script: 517 - ( cd ${SRC_DIR} ; git submodule update --init roms/SLOF ) 518 - BUILD_RC=0 && make -j${JOBS} || BUILD_RC=$? 519 - | 520 if [ "$BUILD_RC" -eq 0 ] ; then 521 mv pc-bios/s390-ccw/*.img pc-bios/ ; 522 ${TEST_CMD} ; 523 else 524 $(exit $BUILD_RC); 525 fi 526 527 # Release builds 528 # The make-release script expect a QEMU version, so our tag must start with a 'v'. 529 # This is the case when release candidate tags are created. 530 - name: "Release tarball" 531 if: tag IS present AND tag =~ /^v\d+\.\d+(\.\d+)?(-\S*)?$/ 532 env: 533 # We want to build from the release tarball 534 - BUILD_DIR="release/build/dir" SRC_DIR="../../.." 535 - BASE_CONFIG="--prefix=$PWD/dist" 536 - CONFIG="--target-list=x86_64-softmmu,aarch64-softmmu,armeb-linux-user,ppc-linux-user" 537 - TEST_CMD="make install -j${JOBS}" 538 - QEMU_VERSION="${TRAVIS_TAG:1}" 539 - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default" 540 script: 541 - make -C ${SRC_DIR} qemu-${QEMU_VERSION}.tar.bz2 542 - ls -l ${SRC_DIR}/qemu-${QEMU_VERSION}.tar.bz2 543 - tar -xf ${SRC_DIR}/qemu-${QEMU_VERSION}.tar.bz2 && cd qemu-${QEMU_VERSION} 544 - mkdir -p release-build && cd release-build 545 - ../configure ${BASE_CONFIG} ${CONFIG} || { cat config.log && exit 1; } 546 - make install 547