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