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