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 357clang-system: 358 extends: .native_build_job_template 359 needs: 360 job: amd64-fedora-container 361 variables: 362 IMAGE: fedora 363 CONFIGURE_ARGS: --cc=clang --cxx=clang++ 364 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 365 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu 366 ppc-softmmu s390x-softmmu 367 MAKE_CHECK_ARGS: check-qtest check-tcg 368 369clang-user: 370 extends: .native_build_job_template 371 needs: 372 job: amd64-debian-user-cross-container 373 variables: 374 IMAGE: debian-all-test-cross 375 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system 376 --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user 377 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 378 MAKE_CHECK_ARGS: check-unit check-tcg 379 380# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory. 381# On gitlab runners, default value sometimes end up calling 2 lds concurrently and 382# triggers an Out-Of-Memory error 383# 384# Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together 385# with QEMU and linked as a static library to avoid false positives in CFI checks. 386# This can be accomplished by using -enable-slirp=git, which avoids the use of 387# a system-wide version of the library 388# 389# Split in three sets of build/check/acceptance to limit the execution time of each 390# job 391build-cfi-aarch64: 392 extends: .native_build_job_template 393 needs: 394 - job: amd64-fedora-container 395 variables: 396 LD_JOBS: 1 397 AR: llvm-ar 398 IMAGE: fedora 399 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 400 --enable-safe-stack --enable-slirp=git 401 TARGETS: aarch64-softmmu 402 MAKE_CHECK_ARGS: check-build 403 timeout: 70m 404 artifacts: 405 expire_in: 2 days 406 paths: 407 - build 408 409check-cfi-aarch64: 410 extends: .native_test_job_template 411 needs: 412 - job: build-cfi-aarch64 413 artifacts: true 414 variables: 415 IMAGE: fedora 416 MAKE_CHECK_ARGS: check 417 418acceptance-cfi-aarch64: 419 extends: .acceptance_test_job_template 420 needs: 421 - job: build-cfi-aarch64 422 artifacts: true 423 variables: 424 IMAGE: fedora 425 MAKE_CHECK_ARGS: check-acceptance 426 427build-cfi-ppc64-s390x: 428 extends: .native_build_job_template 429 needs: 430 - job: amd64-fedora-container 431 variables: 432 LD_JOBS: 1 433 AR: llvm-ar 434 IMAGE: fedora 435 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 436 --enable-safe-stack --enable-slirp=git 437 TARGETS: ppc64-softmmu s390x-softmmu 438 MAKE_CHECK_ARGS: check-build 439 timeout: 70m 440 artifacts: 441 expire_in: 2 days 442 paths: 443 - build 444 445check-cfi-ppc64-s390x: 446 extends: .native_test_job_template 447 needs: 448 - job: build-cfi-ppc64-s390x 449 artifacts: true 450 variables: 451 IMAGE: fedora 452 MAKE_CHECK_ARGS: check 453 454acceptance-cfi-ppc64-s390x: 455 extends: .acceptance_test_job_template 456 needs: 457 - job: build-cfi-ppc64-s390x 458 artifacts: true 459 variables: 460 IMAGE: fedora 461 MAKE_CHECK_ARGS: check-acceptance 462 463build-cfi-x86_64: 464 extends: .native_build_job_template 465 needs: 466 - job: amd64-fedora-container 467 variables: 468 LD_JOBS: 1 469 AR: llvm-ar 470 IMAGE: fedora 471 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 472 --enable-safe-stack --enable-slirp=git 473 TARGETS: x86_64-softmmu 474 MAKE_CHECK_ARGS: check-build 475 timeout: 70m 476 artifacts: 477 expire_in: 2 days 478 paths: 479 - build 480 481check-cfi-x86_64: 482 extends: .native_test_job_template 483 needs: 484 - job: build-cfi-x86_64 485 artifacts: true 486 variables: 487 IMAGE: fedora 488 MAKE_CHECK_ARGS: check 489 490acceptance-cfi-x86_64: 491 extends: .acceptance_test_job_template 492 needs: 493 - job: build-cfi-x86_64 494 artifacts: true 495 variables: 496 IMAGE: fedora 497 MAKE_CHECK_ARGS: check-acceptance 498 499tsan-build: 500 extends: .native_build_job_template 501 needs: 502 job: amd64-ubuntu2004-container 503 variables: 504 IMAGE: ubuntu2004 505 CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10 506 --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system 507 TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user 508 MAKE_CHECK_ARGS: bench V=1 509 510# These targets are on the way out 511build-deprecated: 512 extends: .native_build_job_template 513 needs: 514 job: amd64-debian-user-cross-container 515 variables: 516 IMAGE: debian-all-test-cross 517 CONFIGURE_ARGS: --disable-tools 518 MAKE_CHECK_ARGS: build-tcg 519 TARGETS: ppc64abi32-linux-user 520 artifacts: 521 expire_in: 2 days 522 paths: 523 - build 524 525# We split the check-tcg step as test failures are expected but we still 526# want to catch the build breaking. 527check-deprecated: 528 extends: .native_test_job_template 529 needs: 530 - job: build-deprecated 531 artifacts: true 532 variables: 533 IMAGE: debian-all-test-cross 534 MAKE_CHECK_ARGS: check-tcg 535 allow_failure: true 536 537# gprof/gcov are GCC features 538build-gprof-gcov: 539 extends: .native_build_job_template 540 needs: 541 job: amd64-ubuntu2004-container 542 variables: 543 IMAGE: ubuntu2004 544 CONFIGURE_ARGS: --enable-gprof --enable-gcov 545 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu 546 artifacts: 547 expire_in: 1 days 548 paths: 549 - build 550 551check-gprof-gcov: 552 extends: .native_test_job_template 553 needs: 554 - job: build-gprof-gcov 555 artifacts: true 556 variables: 557 IMAGE: ubuntu2004 558 MAKE_CHECK_ARGS: check 559 after_script: 560 - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh 561 562build-oss-fuzz: 563 extends: .native_build_job_template 564 needs: 565 job: amd64-fedora-container 566 variables: 567 IMAGE: fedora 568 script: 569 - mkdir build-oss-fuzz 570 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address" 571 ./scripts/oss-fuzz/build.sh 572 - export ASAN_OPTIONS="fast_unwind_on_malloc=0" 573 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f 574 | grep -v slirp); do 575 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ; 576 echo Testing ${fuzzer} ... ; 577 "${fuzzer}" -runs=1 -seed=1 || exit 1 ; 578 done 579 # Unrelated to fuzzer: run some tests with -fsanitize=address 580 - cd build-oss-fuzz && make check-qtest-i386 check-unit 581 582build-tci: 583 extends: .native_build_job_template 584 needs: 585 job: amd64-debian-user-cross-container 586 variables: 587 IMAGE: debian-all-test-cross 588 script: 589 - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64" 590 - mkdir build 591 - cd build 592 - ../configure --enable-tcg-interpreter 593 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; } 594 - make -j"$JOBS" 595 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test 596 - for tg in $TARGETS ; do 597 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ; 598 ./tests/qtest/boot-serial-test || exit 1 ; 599 ./tests/qtest/cdrom-test || exit 1 ; 600 done 601 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test 602 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow 603 - make check-tcg 604 605# Alternate coroutines implementations are only really of interest to KVM users 606# However we can't test against KVM on Gitlab-CI so we can only run unit tests 607build-coroutine-sigaltstack: 608 extends: .native_build_job_template 609 needs: 610 job: amd64-ubuntu2004-container 611 variables: 612 IMAGE: ubuntu2004 613 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg 614 --enable-trace-backends=ftrace 615 MAKE_CHECK_ARGS: check-unit 616 617# Check our reduced build configurations 618build-without-default-devices: 619 extends: .native_build_job_template 620 needs: 621 job: amd64-centos8-container 622 variables: 623 IMAGE: centos8 624 CONFIGURE_ARGS: --without-default-devices --disable-user 625 626build-without-default-features: 627 extends: .native_build_job_template 628 needs: 629 job: amd64-debian-container 630 variables: 631 IMAGE: debian-amd64 632 CONFIGURE_ARGS: --without-default-features --disable-user 633 --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu 634 MAKE_CHECK_ARGS: check-unit 635 636build-libvhost-user: 637 stage: build 638 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest 639 needs: 640 job: amd64-fedora-container 641 before_script: 642 - dnf install -y meson ninja-build 643 script: 644 - mkdir subprojects/libvhost-user/build 645 - cd subprojects/libvhost-user/build 646 - meson 647 - ninja 648 649# No targets are built here, just tools, docs, and unit tests. This 650# also feeds into the eventual documentation deployment steps later 651build-tools-and-docs-debian: 652 extends: .native_build_job_template 653 needs: 654 job: amd64-debian-container 655 variables: 656 IMAGE: debian-amd64 657 MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope 658 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools 659 artifacts: 660 expire_in: 2 days 661 paths: 662 - build 663 664# Prepare for GitLab pages deployment. Anything copied into the 665# "public" directory will be deployed to $USER.gitlab.io/$PROJECT 666pages: 667 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest 668 stage: test 669 needs: 670 - job: build-tools-and-docs-debian 671 script: 672 - mkdir -p public 673 # HTML-ised source tree 674 - make gtags 675 - htags -anT --tree-view=filetree -m qemu_init 676 -t "Welcome to the QEMU sourcecode" 677 - mv HTML public/src 678 # Project documentation 679 - make -C build install DESTDIR=$(pwd)/temp-install 680 - mv temp-install/usr/local/share/doc/qemu/* public/ 681 artifacts: 682 paths: 683 - public 684