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