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 561gprof-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 MAKE_CHECK_ARGS: check 569 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu 570 timeout: 70m 571 after_script: 572 - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh 573 574build-oss-fuzz: 575 extends: .native_build_job_template 576 needs: 577 job: amd64-fedora-container 578 variables: 579 IMAGE: fedora 580 script: 581 - mkdir build-oss-fuzz 582 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address" 583 ./scripts/oss-fuzz/build.sh 584 - export ASAN_OPTIONS="fast_unwind_on_malloc=0" 585 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f 586 | grep -v slirp); do 587 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ; 588 echo Testing ${fuzzer} ... ; 589 "${fuzzer}" -runs=1 -seed=1 || exit 1 ; 590 done 591 # Unrelated to fuzzer: run some tests with -fsanitize=address 592 - cd build-oss-fuzz && make check-qtest-i386 check-unit 593 594build-tci: 595 extends: .native_build_job_template 596 needs: 597 job: amd64-debian-user-cross-container 598 variables: 599 IMAGE: debian-all-test-cross 600 script: 601 - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64" 602 - mkdir build 603 - cd build 604 - ../configure --enable-tcg-interpreter 605 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; } 606 - make -j"$JOBS" 607 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test 608 - for tg in $TARGETS ; do 609 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ; 610 ./tests/qtest/boot-serial-test || exit 1 ; 611 ./tests/qtest/cdrom-test || exit 1 ; 612 done 613 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test 614 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow 615 - make check-tcg 616 617# Alternate coroutines implementations are only really of interest to KVM users 618# However we can't test against KVM on Gitlab-CI so we can only run unit tests 619build-coroutine-sigaltstack: 620 extends: .native_build_job_template 621 needs: 622 job: amd64-ubuntu2004-container 623 variables: 624 IMAGE: ubuntu2004 625 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg 626 --enable-trace-backends=ftrace 627 MAKE_CHECK_ARGS: check-unit 628 629# Check our reduced build configurations 630build-without-default-devices: 631 extends: .native_build_job_template 632 needs: 633 job: amd64-centos8-container 634 variables: 635 IMAGE: centos8 636 CONFIGURE_ARGS: --without-default-devices --disable-user 637 638build-without-default-features: 639 extends: .native_build_job_template 640 needs: 641 job: amd64-debian-container 642 variables: 643 IMAGE: debian-amd64 644 CONFIGURE_ARGS: --without-default-features --disable-user 645 --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu 646 MAKE_CHECK_ARGS: check-unit 647 648build-libvhost-user: 649 stage: build 650 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest 651 needs: 652 job: amd64-fedora-container 653 before_script: 654 - dnf install -y meson ninja-build 655 script: 656 - mkdir subprojects/libvhost-user/build 657 - cd subprojects/libvhost-user/build 658 - meson 659 - ninja 660 661# No targets are built here, just tools, docs, and unit tests. This 662# also feeds into the eventual documentation deployment steps later 663build-tools-and-docs-debian: 664 extends: .native_build_job_template 665 needs: 666 job: amd64-debian-container 667 variables: 668 IMAGE: debian-amd64 669 MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope 670 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools 671 artifacts: 672 expire_in: 2 days 673 paths: 674 - build 675 676# Prepare for GitLab pages deployment. Anything copied into the 677# "public" directory will be deployed to $USER.gitlab.io/$PROJECT 678pages: 679 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest 680 stage: test 681 needs: 682 - job: build-tools-and-docs-debian 683 script: 684 - mkdir -p public 685 # HTML-ised source tree 686 - make gtags 687 - htags -anT --tree-view=filetree -m qemu_init 688 -t "Welcome to the QEMU sourcecode" 689 - mv HTML public/src 690 # Project documentation 691 - make -C build install DESTDIR=$(pwd)/temp-install 692 - mv temp-install/usr/local/share/doc/qemu/* public/ 693 artifacts: 694 paths: 695 - public 696