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