1include: 2 - local: '/.gitlab-ci.d/buildtest-template.yml' 3 4build-system-alpine: 5 extends: .native_build_job_template 6 needs: 7 - job: amd64-alpine-container 8 variables: 9 IMAGE: alpine 10 TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu 11 microblazeel-softmmu mips64el-softmmu 12 MAKE_CHECK_ARGS: check-build 13 CONFIGURE_ARGS: --enable-docs --enable-trace-backends=log,simple,syslog 14 artifacts: 15 expire_in: 2 days 16 paths: 17 - .git-submodule-status 18 - build 19 20check-system-alpine: 21 extends: .native_test_job_template 22 needs: 23 - job: build-system-alpine 24 artifacts: true 25 variables: 26 IMAGE: alpine 27 MAKE_CHECK_ARGS: check 28 29acceptance-system-alpine: 30 extends: .acceptance_test_job_template 31 needs: 32 - job: build-system-alpine 33 artifacts: true 34 variables: 35 IMAGE: alpine 36 MAKE_CHECK_ARGS: check-acceptance 37 38build-system-ubuntu: 39 extends: .native_build_job_template 40 needs: 41 job: amd64-ubuntu2004-container 42 variables: 43 IMAGE: ubuntu2004 44 CONFIGURE_ARGS: --enable-docs --enable-fdt=system --enable-slirp=system 45 TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu 46 microblazeel-softmmu mips64el-softmmu 47 MAKE_CHECK_ARGS: check-build 48 artifacts: 49 expire_in: 2 days 50 paths: 51 - build 52 53check-system-ubuntu: 54 extends: .native_test_job_template 55 needs: 56 - job: build-system-ubuntu 57 artifacts: true 58 variables: 59 IMAGE: ubuntu2004 60 MAKE_CHECK_ARGS: check 61 62acceptance-system-ubuntu: 63 extends: .acceptance_test_job_template 64 needs: 65 - job: build-system-ubuntu 66 artifacts: true 67 variables: 68 IMAGE: ubuntu2004 69 MAKE_CHECK_ARGS: check-acceptance 70 71build-system-debian: 72 extends: .native_build_job_template 73 needs: 74 job: amd64-debian-container 75 variables: 76 IMAGE: debian-amd64 77 CONFIGURE_ARGS: --enable-fdt=system 78 TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu 79 riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu 80 MAKE_CHECK_ARGS: check-build 81 artifacts: 82 expire_in: 2 days 83 paths: 84 - build 85 86check-system-debian: 87 extends: .native_test_job_template 88 needs: 89 - job: build-system-debian 90 artifacts: true 91 variables: 92 IMAGE: debian-amd64 93 MAKE_CHECK_ARGS: check 94 95acceptance-system-debian: 96 extends: .acceptance_test_job_template 97 needs: 98 - job: build-system-debian 99 artifacts: true 100 variables: 101 IMAGE: debian-amd64 102 MAKE_CHECK_ARGS: check-acceptance 103 104build-system-fedora: 105 extends: .native_build_job_template 106 needs: 107 job: amd64-fedora-container 108 variables: 109 IMAGE: fedora 110 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs 111 --enable-fdt=system --enable-slirp=system --enable-capstone=system 112 TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu 113 xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu 114 MAKE_CHECK_ARGS: check-build 115 artifacts: 116 expire_in: 2 days 117 paths: 118 - build 119 120check-system-fedora: 121 extends: .native_test_job_template 122 needs: 123 - job: build-system-fedora 124 artifacts: true 125 variables: 126 IMAGE: fedora 127 MAKE_CHECK_ARGS: check 128 129acceptance-system-fedora: 130 extends: .acceptance_test_job_template 131 needs: 132 - job: build-system-fedora 133 artifacts: true 134 variables: 135 IMAGE: fedora 136 MAKE_CHECK_ARGS: check-acceptance 137 138build-system-centos: 139 extends: .native_build_job_template 140 needs: 141 job: amd64-centos8-container 142 variables: 143 IMAGE: centos8 144 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system 145 --enable-modules --enable-trace-backends=dtrace 146 TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu 147 x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu 148 MAKE_CHECK_ARGS: check-build 149 artifacts: 150 expire_in: 2 days 151 paths: 152 - build 153 154check-system-centos: 155 extends: .native_test_job_template 156 needs: 157 - job: build-system-centos 158 artifacts: true 159 variables: 160 IMAGE: centos8 161 MAKE_CHECK_ARGS: check 162 163acceptance-system-centos: 164 extends: .acceptance_test_job_template 165 needs: 166 - job: build-system-centos 167 artifacts: true 168 variables: 169 IMAGE: centos8 170 MAKE_CHECK_ARGS: check-acceptance 171 172build-system-opensuse: 173 extends: .native_build_job_template 174 needs: 175 job: amd64-opensuse-leap-container 176 variables: 177 IMAGE: opensuse-leap 178 CONFIGURE_ARGS: --enable-fdt=system 179 TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu 180 MAKE_CHECK_ARGS: check-build 181 artifacts: 182 expire_in: 2 days 183 paths: 184 - build 185 186check-system-opensuse: 187 extends: .native_test_job_template 188 needs: 189 - job: build-system-opensuse 190 artifacts: true 191 variables: 192 IMAGE: opensuse-leap 193 MAKE_CHECK_ARGS: check 194 195acceptance-system-opensuse: 196 extends: .acceptance_test_job_template 197 needs: 198 - job: build-system-opensuse 199 artifacts: true 200 variables: 201 IMAGE: opensuse-leap 202 MAKE_CHECK_ARGS: check-acceptance 203 204 205build-disabled: 206 extends: .native_build_job_template 207 needs: 208 job: amd64-fedora-container 209 variables: 210 IMAGE: fedora 211 CONFIGURE_ARGS: 212 --disable-attr 213 --disable-auth-pam 214 --disable-avx2 215 --disable-bochs 216 --disable-brlapi 217 --disable-bzip2 218 --disable-cap-ng 219 --disable-capstone 220 --disable-cloop 221 --disable-coroutine-pool 222 --disable-curl 223 --disable-curses 224 --disable-dmg 225 --disable-docs 226 --disable-gcrypt 227 --disable-glusterfs 228 --disable-gnutls 229 --disable-gtk 230 --disable-guest-agent 231 --disable-iconv 232 --disable-keyring 233 --disable-kvm 234 --disable-libiscsi 235 --disable-libpmem 236 --disable-libssh 237 --disable-libudev 238 --disable-libusb 239 --disable-libxml2 240 --disable-linux-aio 241 --disable-live-block-migration 242 --disable-lzo 243 --disable-malloc-trim 244 --disable-mpath 245 --disable-nettle 246 --disable-numa 247 --disable-opengl 248 --disable-parallels 249 --disable-pie 250 --disable-qcow1 251 --disable-qed 252 --disable-qom-cast-debug 253 --disable-rbd 254 --disable-rdma 255 --disable-replication 256 --disable-sdl 257 --disable-seccomp 258 --disable-slirp 259 --disable-smartcard 260 --disable-snappy 261 --disable-sparse 262 --disable-spice 263 --disable-strip 264 --disable-tpm 265 --disable-usb-redir 266 --disable-vdi 267 --disable-vhost-crypto 268 --disable-vhost-net 269 --disable-vhost-scsi 270 --disable-vhost-kernel 271 --disable-vhost-user 272 --disable-vhost-vdpa 273 --disable-vhost-vsock 274 --disable-virglrenderer 275 --disable-vnc 276 --disable-vte 277 --disable-vvfat 278 --disable-xen 279 --disable-zstd 280 TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu 281 s390x-softmmu i386-linux-user 282 MAKE_CHECK_ARGS: check-qtest SPEED=slow 283 284# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by 285# the configure script. The container doesn't contain Xen headers so 286# Xen accelerator is not detected / selected. As result it build the 287# i386-softmmu and x86_64-softmmu with KVM being the single accelerator 288# available. 289# Also use a different coroutine implementation (which is only really of 290# interest to KVM users, i.e. with TCG disabled) 291build-tcg-disabled: 292 extends: .native_build_job_template 293 needs: 294 job: amd64-centos8-container 295 variables: 296 IMAGE: centos8 297 script: 298 - mkdir build 299 - cd build 300 - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext 301 || { cat config.log meson-logs/meson-log.txt && exit 1; } 302 - make -j"$JOBS" 303 - make check-unit 304 - make check-qapi-schema 305 - cd tests/qemu-iotests/ 306 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048 307 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163 308 170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277 309 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122 310 124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202 311 208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258 312 260 261 262 263 264 270 272 273 277 279 313 314build-user: 315 extends: .native_build_job_template 316 needs: 317 job: amd64-debian-user-cross-container 318 variables: 319 IMAGE: debian-all-test-cross 320 CONFIGURE_ARGS: --disable-tools --disable-system 321 MAKE_CHECK_ARGS: check-tcg 322 323build-user-static: 324 extends: .native_build_job_template 325 needs: 326 job: amd64-debian-user-cross-container 327 variables: 328 IMAGE: debian-all-test-cross 329 CONFIGURE_ARGS: --disable-tools --disable-system --static 330 MAKE_CHECK_ARGS: check-tcg 331 332# Because the hexagon cross-compiler takes so long to build we don't rely 333# on the CI system to build it and hence this job has an optional dependency 334# declared. The image is manually uploaded. 335build-user-hexagon: 336 extends: .native_build_job_template 337 needs: 338 job: hexagon-cross-container 339 optional: true 340 variables: 341 IMAGE: debian-hexagon-cross 342 TARGETS: hexagon-linux-user 343 CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg 344 MAKE_CHECK_ARGS: check-tcg 345 346# Only build the softmmu targets we have check-tcg tests for 347build-some-softmmu: 348 extends: .native_build_job_template 349 needs: 350 job: amd64-debian-user-cross-container 351 variables: 352 IMAGE: debian-all-test-cross 353 CONFIGURE_ARGS: --disable-tools --enable-debug 354 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu 355 MAKE_CHECK_ARGS: check-tcg 356 357# Run check-tcg against linux-user (with plugins) 358# we skip sparc64-linux-user until it has been fixed somewhat 359# we skip cris-linux-user as it doesn't use the common run loop 360build-user-plugins: 361 extends: .native_build_job_template 362 needs: 363 job: amd64-debian-user-cross-container 364 variables: 365 IMAGE: debian-all-test-cross 366 CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user 367 MAKE_CHECK_ARGS: check-tcg 368 timeout: 1h 30m 369 370build-some-softmmu-plugins: 371 extends: .native_build_job_template 372 needs: 373 job: amd64-debian-user-cross-container 374 variables: 375 IMAGE: debian-all-test-cross 376 CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg 377 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu 378 MAKE_CHECK_ARGS: check-tcg 379 380clang-system: 381 extends: .native_build_job_template 382 needs: 383 job: amd64-fedora-container 384 variables: 385 IMAGE: fedora 386 CONFIGURE_ARGS: --cc=clang --cxx=clang++ 387 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 388 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu 389 ppc-softmmu s390x-softmmu 390 MAKE_CHECK_ARGS: check-qtest check-tcg 391 392clang-user: 393 extends: .native_build_job_template 394 needs: 395 job: amd64-debian-user-cross-container 396 variables: 397 IMAGE: debian-all-test-cross 398 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system 399 --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user 400 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 401 MAKE_CHECK_ARGS: check-unit check-tcg 402 403# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory. 404# On gitlab runners, default value sometimes end up calling 2 lds concurrently and 405# triggers an Out-Of-Memory error 406# 407# Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together 408# with QEMU and linked as a static library to avoid false positives in CFI checks. 409# This can be accomplished by using -enable-slirp=git, which avoids the use of 410# a system-wide version of the library 411# 412# Split in three sets of build/check/acceptance to limit the execution time of each 413# job 414build-cfi-aarch64: 415 extends: .native_build_job_template 416 needs: 417 - job: amd64-fedora-container 418 variables: 419 LD_JOBS: 1 420 AR: llvm-ar 421 IMAGE: fedora 422 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 423 --enable-safe-stack --enable-slirp=git 424 TARGETS: aarch64-softmmu 425 MAKE_CHECK_ARGS: check-build 426 timeout: 70m 427 artifacts: 428 expire_in: 2 days 429 paths: 430 - build 431 432check-cfi-aarch64: 433 extends: .native_test_job_template 434 needs: 435 - job: build-cfi-aarch64 436 artifacts: true 437 variables: 438 IMAGE: fedora 439 MAKE_CHECK_ARGS: check 440 441acceptance-cfi-aarch64: 442 extends: .acceptance_test_job_template 443 needs: 444 - job: build-cfi-aarch64 445 artifacts: true 446 variables: 447 IMAGE: fedora 448 MAKE_CHECK_ARGS: check-acceptance 449 450build-cfi-ppc64-s390x: 451 extends: .native_build_job_template 452 needs: 453 - job: amd64-fedora-container 454 variables: 455 LD_JOBS: 1 456 AR: llvm-ar 457 IMAGE: fedora 458 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 459 --enable-safe-stack --enable-slirp=git 460 TARGETS: ppc64-softmmu s390x-softmmu 461 MAKE_CHECK_ARGS: check-build 462 timeout: 70m 463 artifacts: 464 expire_in: 2 days 465 paths: 466 - build 467 468check-cfi-ppc64-s390x: 469 extends: .native_test_job_template 470 needs: 471 - job: build-cfi-ppc64-s390x 472 artifacts: true 473 variables: 474 IMAGE: fedora 475 MAKE_CHECK_ARGS: check 476 477acceptance-cfi-ppc64-s390x: 478 extends: .acceptance_test_job_template 479 needs: 480 - job: build-cfi-ppc64-s390x 481 artifacts: true 482 variables: 483 IMAGE: fedora 484 MAKE_CHECK_ARGS: check-acceptance 485 486build-cfi-x86_64: 487 extends: .native_build_job_template 488 needs: 489 - job: amd64-fedora-container 490 variables: 491 LD_JOBS: 1 492 AR: llvm-ar 493 IMAGE: fedora 494 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 495 --enable-safe-stack --enable-slirp=git 496 TARGETS: x86_64-softmmu 497 MAKE_CHECK_ARGS: check-build 498 timeout: 70m 499 artifacts: 500 expire_in: 2 days 501 paths: 502 - build 503 504check-cfi-x86_64: 505 extends: .native_test_job_template 506 needs: 507 - job: build-cfi-x86_64 508 artifacts: true 509 variables: 510 IMAGE: fedora 511 MAKE_CHECK_ARGS: check 512 513acceptance-cfi-x86_64: 514 extends: .acceptance_test_job_template 515 needs: 516 - job: build-cfi-x86_64 517 artifacts: true 518 variables: 519 IMAGE: fedora 520 MAKE_CHECK_ARGS: check-acceptance 521 522tsan-build: 523 extends: .native_build_job_template 524 needs: 525 job: amd64-ubuntu2004-container 526 variables: 527 IMAGE: ubuntu2004 528 CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10 529 --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system 530 TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user 531 MAKE_CHECK_ARGS: bench V=1 532 533# These targets are on the way out 534build-deprecated: 535 extends: .native_build_job_template 536 needs: 537 job: amd64-debian-user-cross-container 538 variables: 539 IMAGE: debian-all-test-cross 540 CONFIGURE_ARGS: --disable-tools 541 MAKE_CHECK_ARGS: build-tcg 542 TARGETS: ppc64abi32-linux-user 543 artifacts: 544 expire_in: 2 days 545 paths: 546 - build 547 548# We split the check-tcg step as test failures are expected but we still 549# want to catch the build breaking. 550check-deprecated: 551 extends: .native_test_job_template 552 needs: 553 - job: build-deprecated 554 artifacts: true 555 variables: 556 IMAGE: debian-all-test-cross 557 MAKE_CHECK_ARGS: check-tcg 558 allow_failure: true 559 560# gprof/gcov are GCC features 561build-gprof-gcov: 562 extends: .native_build_job_template 563 needs: 564 job: amd64-ubuntu2004-container 565 variables: 566 IMAGE: ubuntu2004 567 CONFIGURE_ARGS: --enable-gprof --enable-gcov 568 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu 569 artifacts: 570 expire_in: 1 days 571 paths: 572 - build 573 574check-gprof-gcov: 575 extends: .native_test_job_template 576 needs: 577 - job: build-gprof-gcov 578 artifacts: true 579 variables: 580 IMAGE: ubuntu2004 581 MAKE_CHECK_ARGS: check 582 after_script: 583 - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh 584 585build-oss-fuzz: 586 extends: .native_build_job_template 587 needs: 588 job: amd64-fedora-container 589 variables: 590 IMAGE: fedora 591 script: 592 - mkdir build-oss-fuzz 593 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address" 594 ./scripts/oss-fuzz/build.sh 595 - export ASAN_OPTIONS="fast_unwind_on_malloc=0" 596 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f 597 | grep -v slirp); do 598 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ; 599 echo Testing ${fuzzer} ... ; 600 "${fuzzer}" -runs=1 -seed=1 || exit 1 ; 601 done 602 # Unrelated to fuzzer: run some tests with -fsanitize=address 603 - cd build-oss-fuzz && make check-qtest-i386 check-unit 604 605build-tci: 606 extends: .native_build_job_template 607 needs: 608 job: amd64-debian-user-cross-container 609 variables: 610 IMAGE: debian-all-test-cross 611 script: 612 - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64" 613 - mkdir build 614 - cd build 615 - ../configure --enable-tcg-interpreter 616 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; } 617 - make -j"$JOBS" 618 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test 619 - for tg in $TARGETS ; do 620 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ; 621 ./tests/qtest/boot-serial-test || exit 1 ; 622 ./tests/qtest/cdrom-test || exit 1 ; 623 done 624 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test 625 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow 626 - make check-tcg 627 628# Alternate coroutines implementations are only really of interest to KVM users 629# However we can't test against KVM on Gitlab-CI so we can only run unit tests 630build-coroutine-sigaltstack: 631 extends: .native_build_job_template 632 needs: 633 job: amd64-ubuntu2004-container 634 variables: 635 IMAGE: ubuntu2004 636 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg 637 --enable-trace-backends=ftrace 638 MAKE_CHECK_ARGS: check-unit 639 640# Check our reduced build configurations 641build-without-default-devices: 642 extends: .native_build_job_template 643 needs: 644 job: amd64-centos8-container 645 variables: 646 IMAGE: centos8 647 CONFIGURE_ARGS: --without-default-devices --disable-user 648 649build-without-default-features: 650 extends: .native_build_job_template 651 needs: 652 job: amd64-debian-container 653 variables: 654 IMAGE: debian-amd64 655 CONFIGURE_ARGS: --without-default-features --disable-user 656 --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu 657 MAKE_CHECK_ARGS: check-unit 658 659build-libvhost-user: 660 stage: build 661 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest 662 needs: 663 job: amd64-fedora-container 664 before_script: 665 - dnf install -y meson ninja-build 666 script: 667 - mkdir subprojects/libvhost-user/build 668 - cd subprojects/libvhost-user/build 669 - meson 670 - ninja 671 672# No targets are built here, just tools, docs, and unit tests. This 673# also feeds into the eventual documentation deployment steps later 674build-tools-and-docs-debian: 675 extends: .native_build_job_template 676 needs: 677 job: amd64-debian-container 678 variables: 679 IMAGE: debian-amd64 680 MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope 681 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools 682 artifacts: 683 expire_in: 2 days 684 paths: 685 - build 686 687# Prepare for GitLab pages deployment. Anything copied into the 688# "public" directory will be deployed to $USER.gitlab.io/$PROJECT 689pages: 690 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest 691 stage: test 692 needs: 693 - job: build-tools-and-docs-debian 694 script: 695 - mkdir -p public 696 # HTML-ised source tree 697 - make gtags 698 - htags -anT --tree-view=filetree -m qemu_init 699 -t "Welcome to the QEMU sourcecode" 700 - mv HTML public/src 701 # Project documentation 702 - make -C build install DESTDIR=$(pwd)/temp-install 703 - mv temp-install/usr/local/share/doc/qemu/* public/ 704 artifacts: 705 paths: 706 - public 707