1include: 2 - local: '/.gitlab-ci.d/buildtest-template.yml' 3 4build-system-alpine: 5 extends: 6 - .native_build_job_template 7 - .native_build_artifact_template 8 needs: 9 - job: amd64-alpine-container 10 variables: 11 IMAGE: alpine 12 TARGETS: avr-softmmu loongarch64-softmmu mips64-softmmu mipsel-softmmu 13 MAKE_CHECK_ARGS: check-build 14 CONFIGURE_ARGS: --enable-docs --enable-trace-backends=log,simple,syslog 15 16check-system-alpine: 17 extends: .native_test_job_template 18 needs: 19 - job: build-system-alpine 20 artifacts: true 21 variables: 22 IMAGE: alpine 23 MAKE_CHECK_ARGS: check-unit check-qtest 24 25avocado-system-alpine: 26 extends: .avocado_test_job_template 27 needs: 28 - job: build-system-alpine 29 artifacts: true 30 variables: 31 IMAGE: alpine 32 MAKE_CHECK_ARGS: check-avocado 33 AVOCADO_TAGS: arch:avr arch:loongarch64 arch:mips64 arch:mipsel 34 35build-system-ubuntu: 36 extends: 37 - .native_build_job_template 38 - .native_build_artifact_template 39 needs: 40 job: amd64-ubuntu2204-container 41 variables: 42 IMAGE: ubuntu2204 43 CONFIGURE_ARGS: --enable-docs 44 TARGETS: alpha-softmmu microblazeel-softmmu mips64el-softmmu 45 MAKE_CHECK_ARGS: check-build 46 47check-system-ubuntu: 48 extends: .native_test_job_template 49 needs: 50 - job: build-system-ubuntu 51 artifacts: true 52 variables: 53 IMAGE: ubuntu2204 54 MAKE_CHECK_ARGS: check 55 56avocado-system-ubuntu: 57 extends: .avocado_test_job_template 58 needs: 59 - job: build-system-ubuntu 60 artifacts: true 61 variables: 62 IMAGE: ubuntu2204 63 MAKE_CHECK_ARGS: check-avocado 64 AVOCADO_TAGS: arch:alpha arch:microblazeel arch:mips64el 65 66build-system-debian: 67 extends: 68 - .native_build_job_template 69 - .native_build_artifact_template 70 needs: 71 job: amd64-debian-container 72 variables: 73 IMAGE: debian 74 CONFIGURE_ARGS: --with-coroutine=sigaltstack 75 TARGETS: arm-softmmu i386-softmmu riscv64-softmmu sh4eb-softmmu 76 sparc-softmmu xtensa-softmmu 77 MAKE_CHECK_ARGS: check-build 78 79check-system-debian: 80 extends: .native_test_job_template 81 needs: 82 - job: build-system-debian 83 artifacts: true 84 variables: 85 IMAGE: debian 86 MAKE_CHECK_ARGS: check 87 88avocado-system-debian: 89 extends: .avocado_test_job_template 90 needs: 91 - job: build-system-debian 92 artifacts: true 93 variables: 94 IMAGE: debian 95 MAKE_CHECK_ARGS: check-avocado 96 AVOCADO_TAGS: arch:arm arch:i386 arch:riscv64 arch:sh4 arch:sparc arch:xtensa 97 98crash-test-debian: 99 extends: .native_test_job_template 100 needs: 101 - job: build-system-debian 102 artifacts: true 103 variables: 104 IMAGE: debian 105 script: 106 - cd build 107 - make NINJA=":" check-venv 108 - pyvenv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386 109 110build-system-fedora: 111 extends: 112 - .native_build_job_template 113 - .native_build_artifact_template 114 needs: 115 job: amd64-fedora-container 116 variables: 117 IMAGE: fedora 118 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs 119 TARGETS: microblaze-softmmu mips-softmmu 120 xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu 121 MAKE_CHECK_ARGS: check-build 122 123check-system-fedora: 124 extends: .native_test_job_template 125 needs: 126 - job: build-system-fedora 127 artifacts: true 128 variables: 129 IMAGE: fedora 130 MAKE_CHECK_ARGS: check 131 132avocado-system-fedora: 133 extends: .avocado_test_job_template 134 needs: 135 - job: build-system-fedora 136 artifacts: true 137 variables: 138 IMAGE: fedora 139 MAKE_CHECK_ARGS: check-avocado 140 AVOCADO_TAGS: arch:microblaze arch:mips arch:xtensa arch:m68k 141 arch:riscv32 arch:ppc arch:sparc64 142 143crash-test-fedora: 144 extends: .native_test_job_template 145 needs: 146 - job: build-system-fedora 147 artifacts: true 148 variables: 149 IMAGE: fedora 150 script: 151 - cd build 152 - make NINJA=":" check-venv 153 - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc 154 - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32 155 156build-system-centos: 157 extends: 158 - .native_build_job_template 159 - .native_build_artifact_template 160 needs: 161 job: amd64-centos8-container 162 variables: 163 IMAGE: centos8 164 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-vfio-user-server 165 --enable-modules --enable-trace-backends=dtrace --enable-docs 166 TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu 167 x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu 168 MAKE_CHECK_ARGS: check-build 169 170check-system-centos: 171 extends: .native_test_job_template 172 needs: 173 - job: build-system-centos 174 artifacts: true 175 variables: 176 IMAGE: centos8 177 MAKE_CHECK_ARGS: check 178 179avocado-system-centos: 180 extends: .avocado_test_job_template 181 needs: 182 - job: build-system-centos 183 artifacts: true 184 variables: 185 IMAGE: centos8 186 MAKE_CHECK_ARGS: check-avocado 187 AVOCADO_TAGS: arch:ppc64 arch:or1k arch:s390x arch:x86_64 arch:rx 188 arch:sh4 arch:nios2 189 190build-system-opensuse: 191 extends: 192 - .native_build_job_template 193 - .native_build_artifact_template 194 needs: 195 job: amd64-opensuse-leap-container 196 variables: 197 IMAGE: opensuse-leap 198 TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu 199 MAKE_CHECK_ARGS: check-build 200 201check-system-opensuse: 202 extends: .native_test_job_template 203 needs: 204 - job: build-system-opensuse 205 artifacts: true 206 variables: 207 IMAGE: opensuse-leap 208 MAKE_CHECK_ARGS: check 209 210avocado-system-opensuse: 211 extends: .avocado_test_job_template 212 needs: 213 - job: build-system-opensuse 214 artifacts: true 215 variables: 216 IMAGE: opensuse-leap 217 MAKE_CHECK_ARGS: check-avocado 218 AVOCADO_TAGS: arch:s390x arch:x86_64 arch:aarch64 219 220# 221# Flaky tests. We don't run these by default and they are allow fail 222# but often the CI system is the only way to trigger the failures. 223# 224 225build-system-flaky: 226 extends: 227 - .native_build_job_template 228 - .native_build_artifact_template 229 needs: 230 job: amd64-debian-container 231 variables: 232 IMAGE: debian 233 QEMU_JOB_OPTIONAL: 1 234 TARGETS: aarch64-softmmu arm-softmmu mips64el-softmmu 235 ppc64-softmmu rx-softmmu s390x-softmmu sh4-softmmu x86_64-softmmu 236 MAKE_CHECK_ARGS: check-build 237 238avocado-system-flaky: 239 extends: .avocado_test_job_template 240 needs: 241 - job: build-system-flaky 242 artifacts: true 243 allow_failure: true 244 variables: 245 IMAGE: debian 246 MAKE_CHECK_ARGS: check-avocado 247 QEMU_JOB_OPTIONAL: 1 248 QEMU_TEST_FLAKY_TESTS: 1 249 AVOCADO_TAGS: flaky 250 251# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by 252# the configure script. The container doesn't contain Xen headers so 253# Xen accelerator is not detected / selected. As result it build the 254# i386-softmmu and x86_64-softmmu with KVM being the single accelerator 255# available. 256# Also use a different coroutine implementation (which is only really of 257# interest to KVM users, i.e. with TCG disabled) 258build-tcg-disabled: 259 extends: .native_build_job_template 260 needs: 261 job: amd64-centos8-container 262 variables: 263 IMAGE: centos8 264 script: 265 - mkdir build 266 - cd build 267 - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext 268 --disable-docs --disable-sdl --disable-gtk --disable-vnc 269 || { cat config.log meson-logs/meson-log.txt && exit 1; } 270 - make -j"$JOBS" 271 - make check-unit 272 - make check-qapi-schema 273 - cd tests/qemu-iotests/ 274 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048 275 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163 276 170 171 183 184 192 194 208 221 226 227 236 253 277 image-fleecing 277 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122 278 124 132 139 142 144 145 151 152 155 157 165 194 196 200 202 279 208 209 216 218 227 234 246 247 248 250 254 255 257 258 280 260 261 262 263 264 270 272 273 277 279 image-fleecing 281 282build-user: 283 extends: .native_build_job_template 284 needs: 285 job: amd64-debian-user-cross-container 286 variables: 287 IMAGE: debian-all-test-cross 288 CONFIGURE_ARGS: --disable-tools --disable-system 289 --target-list-exclude=alpha-linux-user,sh4-linux-user 290 MAKE_CHECK_ARGS: check-tcg 291 292build-user-static: 293 extends: .native_build_job_template 294 needs: 295 job: amd64-debian-user-cross-container 296 variables: 297 IMAGE: debian-all-test-cross 298 CONFIGURE_ARGS: --disable-tools --disable-system --static 299 --target-list-exclude=alpha-linux-user,sh4-linux-user 300 MAKE_CHECK_ARGS: check-tcg 301 302# targets stuck on older compilers 303build-legacy: 304 extends: .native_build_job_template 305 needs: 306 job: amd64-debian-legacy-cross-container 307 variables: 308 IMAGE: debian-legacy-test-cross 309 TARGETS: alpha-linux-user alpha-softmmu sh4-linux-user 310 CONFIGURE_ARGS: --disable-tools 311 MAKE_CHECK_ARGS: check-tcg 312 313build-user-hexagon: 314 extends: .native_build_job_template 315 needs: 316 job: hexagon-cross-container 317 variables: 318 IMAGE: debian-hexagon-cross 319 TARGETS: hexagon-linux-user 320 CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg 321 MAKE_CHECK_ARGS: check-tcg 322 323# Build the softmmu targets we have check-tcg tests and compilers in 324# our omnibus all-test-cross container. Those targets that haven't got 325# Debian cross compiler support need to use special containers. 326build-some-softmmu: 327 extends: .native_build_job_template 328 needs: 329 job: amd64-debian-user-cross-container 330 variables: 331 IMAGE: debian-all-test-cross 332 CONFIGURE_ARGS: --disable-tools --enable-debug 333 TARGETS: arm-softmmu aarch64-softmmu i386-softmmu riscv64-softmmu 334 s390x-softmmu x86_64-softmmu 335 MAKE_CHECK_ARGS: check-tcg 336 337build-loongarch64: 338 extends: .native_build_job_template 339 needs: 340 job: loongarch-debian-cross-container 341 variables: 342 IMAGE: debian-loongarch-cross 343 CONFIGURE_ARGS: --disable-tools --enable-debug 344 TARGETS: loongarch64-linux-user loongarch64-softmmu 345 MAKE_CHECK_ARGS: check-tcg 346 347# We build tricore in a very minimal tricore only container 348build-tricore-softmmu: 349 extends: .native_build_job_template 350 needs: 351 job: tricore-debian-cross-container 352 variables: 353 IMAGE: debian-tricore-cross 354 CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug 355 TARGETS: tricore-softmmu 356 MAKE_CHECK_ARGS: check-tcg 357 358clang-system: 359 extends: .native_build_job_template 360 needs: 361 job: amd64-fedora-container 362 variables: 363 IMAGE: fedora 364 CONFIGURE_ARGS: --cc=clang --cxx=clang++ 365 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 366 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-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 timeout: 70m 374 variables: 375 IMAGE: debian-all-test-cross 376 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system 377 --target-list-exclude=alpha-linux-user,microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user 378 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 379 MAKE_CHECK_ARGS: check-unit check-tcg 380 381# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory. 382# On gitlab runners, default value sometimes end up calling 2 lds concurrently and 383# triggers an Out-Of-Memory error 384# 385# Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with 386# CFI builds, and thus have to disable it here. 387# 388# Split in three sets of build/check/avocado to limit the execution time of each 389# job 390build-cfi-aarch64: 391 extends: 392 - .native_build_job_template 393 - .native_build_artifact_template 394 needs: 395 - job: amd64-fedora-container 396 variables: 397 LD_JOBS: 1 398 AR: llvm-ar 399 IMAGE: fedora 400 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 401 --enable-safe-stack --disable-slirp 402 TARGETS: aarch64-softmmu 403 MAKE_CHECK_ARGS: check-build 404 # FIXME: This job is often failing, likely due to out-of-memory problems in 405 # the constrained containers of the shared runners. Thus this is marked as 406 # skipped until the situation has been solved. 407 QEMU_JOB_SKIPPED: 1 408 timeout: 90m 409 410check-cfi-aarch64: 411 extends: .native_test_job_template 412 needs: 413 - job: build-cfi-aarch64 414 artifacts: true 415 variables: 416 IMAGE: fedora 417 MAKE_CHECK_ARGS: check 418 419avocado-cfi-aarch64: 420 extends: .avocado_test_job_template 421 needs: 422 - job: build-cfi-aarch64 423 artifacts: true 424 variables: 425 IMAGE: fedora 426 MAKE_CHECK_ARGS: check-avocado 427 428build-cfi-ppc64-s390x: 429 extends: 430 - .native_build_job_template 431 - .native_build_artifact_template 432 needs: 433 - job: amd64-fedora-container 434 variables: 435 LD_JOBS: 1 436 AR: llvm-ar 437 IMAGE: fedora 438 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 439 --enable-safe-stack --disable-slirp 440 TARGETS: ppc64-softmmu s390x-softmmu 441 MAKE_CHECK_ARGS: check-build 442 # FIXME: This job is often failing, likely due to out-of-memory problems in 443 # the constrained containers of the shared runners. Thus this is marked as 444 # skipped until the situation has been solved. 445 QEMU_JOB_SKIPPED: 1 446 timeout: 80m 447 448check-cfi-ppc64-s390x: 449 extends: .native_test_job_template 450 needs: 451 - job: build-cfi-ppc64-s390x 452 artifacts: true 453 variables: 454 IMAGE: fedora 455 MAKE_CHECK_ARGS: check 456 457avocado-cfi-ppc64-s390x: 458 extends: .avocado_test_job_template 459 needs: 460 - job: build-cfi-ppc64-s390x 461 artifacts: true 462 variables: 463 IMAGE: fedora 464 MAKE_CHECK_ARGS: check-avocado 465 466build-cfi-x86_64: 467 extends: 468 - .native_build_job_template 469 - .native_build_artifact_template 470 needs: 471 - job: amd64-fedora-container 472 variables: 473 LD_JOBS: 1 474 AR: llvm-ar 475 IMAGE: fedora 476 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 477 --enable-safe-stack --disable-slirp 478 TARGETS: x86_64-softmmu 479 MAKE_CHECK_ARGS: check-build 480 timeout: 70m 481 482check-cfi-x86_64: 483 extends: .native_test_job_template 484 needs: 485 - job: build-cfi-x86_64 486 artifacts: true 487 variables: 488 IMAGE: fedora 489 MAKE_CHECK_ARGS: check 490 491avocado-cfi-x86_64: 492 extends: .avocado_test_job_template 493 needs: 494 - job: build-cfi-x86_64 495 artifacts: true 496 variables: 497 IMAGE: fedora 498 MAKE_CHECK_ARGS: check-avocado 499 500tsan-build: 501 extends: .native_build_job_template 502 needs: 503 job: amd64-ubuntu2204-container 504 variables: 505 IMAGE: ubuntu2204 506 CONFIGURE_ARGS: --enable-tsan --cc=clang --cxx=clang++ 507 --enable-trace-backends=ust --disable-slirp 508 TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user 509 510# gcov is a GCC features 511gcov: 512 extends: .native_build_job_template 513 needs: 514 job: amd64-ubuntu2204-container 515 timeout: 80m 516 variables: 517 IMAGE: ubuntu2204 518 CONFIGURE_ARGS: --enable-gcov 519 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu 520 MAKE_CHECK_ARGS: check-unit check-softfloat 521 after_script: 522 - cd build 523 - gcovr --xml-pretty --exclude-unreachable-branches --print-summary 524 -o coverage.xml --root ${CI_PROJECT_DIR} . *.p 525 coverage: /^\s*lines:\s*\d+.\d+\%/ 526 artifacts: 527 name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA} 528 when: always 529 expire_in: 2 days 530 paths: 531 - build/meson-logs/testlog.txt 532 reports: 533 junit: build/meson-logs/testlog.junit.xml 534 coverage_report: 535 coverage_format: cobertura 536 path: build/coverage.xml 537 538build-oss-fuzz: 539 extends: .native_build_job_template 540 needs: 541 job: amd64-fedora-container 542 variables: 543 IMAGE: fedora 544 script: 545 - mkdir build-oss-fuzz 546 - export LSAN_OPTIONS=suppressions=scripts/oss-fuzz/lsan_suppressions.txt 547 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address" 548 ./scripts/oss-fuzz/build.sh 549 - export ASAN_OPTIONS="fast_unwind_on_malloc=0" 550 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f 551 | grep -v slirp); do 552 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ; 553 echo Testing ${fuzzer} ... ; 554 "${fuzzer}" -runs=1 -seed=1 || exit 1 ; 555 done 556 557build-tci: 558 extends: .native_build_job_template 559 needs: 560 job: amd64-debian-user-cross-container 561 variables: 562 IMAGE: debian-all-test-cross 563 script: 564 - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64" 565 - mkdir build 566 - cd build 567 - ../configure --enable-tcg-interpreter --disable-docs --disable-gtk --disable-vnc 568 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" 569 || { cat config.log meson-logs/meson-log.txt && exit 1; } 570 - make -j"$JOBS" 571 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test 572 - for tg in $TARGETS ; do 573 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ; 574 ./tests/qtest/boot-serial-test || exit 1 ; 575 ./tests/qtest/cdrom-test || exit 1 ; 576 done 577 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test 578 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow 579 - make check-tcg 580 581# Check our reduced build configurations 582build-without-defaults: 583 extends: .native_build_job_template 584 needs: 585 job: amd64-centos8-container 586 variables: 587 IMAGE: centos8 588 CONFIGURE_ARGS: 589 --without-default-devices 590 --without-default-features 591 --disable-fdt 592 --disable-pie 593 --disable-qom-cast-debug 594 --disable-strip 595 TARGETS: avr-softmmu mips64-softmmu s390x-softmmu sh4-softmmu 596 sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user 597 MAKE_CHECK_ARGS: check 598 599build-libvhost-user: 600 extends: .base_job_template 601 stage: build 602 image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG 603 needs: 604 job: amd64-fedora-container 605 script: 606 - mkdir subprojects/libvhost-user/build 607 - cd subprojects/libvhost-user/build 608 - meson 609 - ninja 610 611# No targets are built here, just tools, docs, and unit tests. This 612# also feeds into the eventual documentation deployment steps later 613build-tools-and-docs-debian: 614 extends: 615 - .native_build_job_template 616 - .native_build_artifact_template 617 needs: 618 job: amd64-debian-container 619 # when running on 'master' we use pre-existing container 620 optional: true 621 variables: 622 IMAGE: debian 623 MAKE_CHECK_ARGS: check-unit ctags TAGS cscope 624 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools 625 QEMU_JOB_PUBLISH: 1 626 627# Prepare for GitLab pages deployment. Anything copied into the 628# "public" directory will be deployed to $USER.gitlab.io/$PROJECT 629# 630# GitLab publishes from any branch that triggers a CI pipeline 631# 632# For the main repo we don't want to publish from 'staging' 633# since that content may not be pushed, nor do we wish to 634# publish from 'stable-NNN' branches as that content is outdated. 635# Thus we restrict to just the default branch 636# 637# For contributor forks we want to publish from any repo so 638# that users can see the results of their commits, regardless 639# of what topic branch they're currently using 640pages: 641 extends: .base_job_template 642 image: $CI_REGISTRY_IMAGE/qemu/debian:$QEMU_CI_CONTAINER_TAG 643 stage: test 644 needs: 645 - job: build-tools-and-docs-debian 646 script: 647 - mkdir -p public 648 # HTML-ised source tree 649 - make gtags 650 # We unset variables to work around a bug in some htags versions 651 # which causes it to fail when the environment is large 652 - CI_COMMIT_MESSAGE= CI_COMMIT_TAG_MESSAGE= htags 653 -anT --tree-view=filetree -m qemu_init 654 -t "Welcome to the QEMU sourcecode" 655 - mv HTML public/src 656 # Project documentation 657 - make -C build install DESTDIR=$(pwd)/temp-install 658 - mv temp-install/usr/local/share/doc/qemu/* public/ 659 artifacts: 660 when: on_success 661 paths: 662 - public 663 variables: 664 QEMU_JOB_PUBLISH: 1 665