2 - local: '/.gitlab-ci.d/buildtest-template.yml'
6 - .native_build_job_template
7 - .native_build_artifact_template
9 - job: amd64-alpine-container
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
17 extends: .native_test_job_template
19 - job: build-system-alpine
23 MAKE_CHECK_ARGS: check-unit check-qtest
25 avocado-system-alpine:
26 extends: .avocado_test_job_template
28 - job: build-system-alpine
32 MAKE_CHECK_ARGS: check-avocado
33 AVOCADO_TAGS: arch:avr arch:loongarch64 arch:mips64 arch:mipsel
37 - .native_build_job_template
38 - .native_build_artifact_template
40 job: amd64-ubuntu2204-container
43 CONFIGURE_ARGS: --enable-docs
44 TARGETS: alpha-softmmu microblazeel-softmmu mips64el-softmmu
45 MAKE_CHECK_ARGS: check-build
48 extends: .native_test_job_template
50 - job: build-system-ubuntu
54 MAKE_CHECK_ARGS: check
56 avocado-system-ubuntu:
57 extends: .avocado_test_job_template
59 - job: build-system-ubuntu
63 MAKE_CHECK_ARGS: check-avocado
64 AVOCADO_TAGS: arch:alpha arch:microblazeel arch:mips64el
68 - .native_build_job_template
69 - .native_build_artifact_template
71 job: amd64-debian-container
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
80 extends: .native_test_job_template
82 - job: build-system-debian
86 MAKE_CHECK_ARGS: check
88 avocado-system-debian:
89 extends: .avocado_test_job_template
91 - job: build-system-debian
95 MAKE_CHECK_ARGS: check-avocado
96 AVOCADO_TAGS: arch:arm arch:i386 arch:riscv64 arch:sh4 arch:sparc arch:xtensa
99 extends: .native_test_job_template
101 - job: build-system-debian
107 - make NINJA=":" check-venv
108 - pyvenv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386
112 - .native_build_job_template
113 - .native_build_artifact_template
115 job: amd64-fedora-container
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
124 extends: .native_test_job_template
126 - job: build-system-fedora
130 MAKE_CHECK_ARGS: check
132 avocado-system-fedora:
133 extends: .avocado_test_job_template
135 - job: build-system-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
144 extends: .native_test_job_template
146 - job: build-system-fedora
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
158 - .native_build_job_template
159 - .native_build_artifact_template
161 job: amd64-centos9-container
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
168 MAKE_CHECK_ARGS: check-build
170 # Previous QEMU release. Used for cross-version migration tests.
172 extends: .native_build_job_template
179 - build-previous/**/*.p
180 - build-previous/**/*.a.p
181 - build-previous/**/*.c.o
182 - build-previous/**/*.c.o.d
184 job: amd64-opensuse-leap-container
187 TARGETS: x86_64-softmmu aarch64-softmmu
188 # Override the default flags as we need more to grab the old version
189 GIT_FETCH_EXTRA_FLAGS: --prune --quiet
191 - export QEMU_PREV_VERSION="$(sed 's/\([0-9.]*\)\.[0-9]*/v\1.0/' VERSION)"
192 - git remote add upstream https://gitlab.com/qemu-project/qemu
193 - git fetch upstream refs/tags/$QEMU_PREV_VERSION:refs/tags/$QEMU_PREV_VERSION
194 - git checkout $QEMU_PREV_VERSION
196 - mv build build-previous
198 .migration-compat-common:
199 extends: .common_test_job_template
201 - job: build-previous-qemu
202 - job: build-system-opensuse
203 # The old QEMU could have bugs unrelated to migration that are
204 # already fixed in the current development branch, so this test
209 MAKE_CHECK_ARGS: check-build
211 # Use the migration-tests from the older QEMU tree. This avoids
212 # testing an old QEMU against new features/tests that it is not
216 - QTEST_QEMU_BINARY_SRC=./qemu-system-${TARGET}
217 QTEST_QEMU_BINARY=../build/qemu-system-${TARGET} ./tests/qtest/migration-test
219 - QTEST_QEMU_BINARY_DST=./qemu-system-${TARGET}
220 QTEST_QEMU_BINARY=../build/qemu-system-${TARGET} ./tests/qtest/migration-test
222 # This job needs to be disabled until we can have an aarch64 CPU model that
223 # will both (1) support both KVM and TCG, and (2) provide a stable ABI.
224 # Currently only "-cpu max" can provide (1), however it doesn't guarantee
225 # (2). Mark this test skipped until later.
226 migration-compat-aarch64:
227 extends: .migration-compat-common
232 migration-compat-x86_64:
233 extends: .migration-compat-common
238 extends: .native_test_job_template
240 - job: build-system-centos
244 MAKE_CHECK_ARGS: check
246 avocado-system-centos:
247 extends: .avocado_test_job_template
249 - job: build-system-centos
253 MAKE_CHECK_ARGS: check-avocado
254 AVOCADO_TAGS: arch:ppc64 arch:or1k arch:s390x arch:x86_64 arch:rx
257 build-system-opensuse:
259 - .native_build_job_template
260 - .native_build_artifact_template
262 job: amd64-opensuse-leap-container
265 TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
266 MAKE_CHECK_ARGS: check-build
268 check-system-opensuse:
269 extends: .native_test_job_template
271 - job: build-system-opensuse
275 MAKE_CHECK_ARGS: check
277 avocado-system-opensuse:
278 extends: .avocado_test_job_template
280 - job: build-system-opensuse
284 MAKE_CHECK_ARGS: check-avocado
285 AVOCADO_TAGS: arch:s390x arch:x86_64 arch:aarch64
288 # Flaky tests. We don't run these by default and they are allow fail
289 # but often the CI system is the only way to trigger the failures.
294 - .native_build_job_template
295 - .native_build_artifact_template
297 job: amd64-debian-container
301 TARGETS: aarch64-softmmu arm-softmmu mips64el-softmmu
302 ppc64-softmmu rx-softmmu s390x-softmmu sh4-softmmu x86_64-softmmu
303 MAKE_CHECK_ARGS: check-build
305 avocado-system-flaky:
306 extends: .avocado_test_job_template
308 - job: build-system-flaky
313 MAKE_CHECK_ARGS: check-avocado
315 QEMU_TEST_FLAKY_TESTS: 1
318 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
319 # the configure script. The container doesn't contain Xen headers so
320 # Xen accelerator is not detected / selected. As result it build the
321 # i386-softmmu and x86_64-softmmu with KVM being the single accelerator
323 # Also use a different coroutine implementation (which is only really of
324 # interest to KVM users, i.e. with TCG disabled)
326 extends: .native_build_job_template
328 job: amd64-centos9-container
334 - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
335 --disable-docs --disable-sdl --disable-gtk --disable-vnc
336 || { cat config.log meson-logs/meson-log.txt && exit 1; }
339 - make check-qapi-schema
340 - cd tests/qemu-iotests/
341 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
342 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
343 170 171 184 192 194 208 221 226 227 236 253 277 image-fleecing
344 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
345 124 132 139 142 144 145 151 152 155 157 165 194 196 200 202
346 208 209 216 218 227 234 246 247 248 250 254 255 257 258
347 260 261 262 263 264 270 272 273 277 279 image-fleecing
350 extends: .native_build_job_template
352 job: amd64-debian-user-cross-container
354 IMAGE: debian-all-test-cross
355 CONFIGURE_ARGS: --disable-tools --disable-system
356 --target-list-exclude=alpha-linux-user,sh4-linux-user
357 MAKE_CHECK_ARGS: check-tcg
360 extends: .native_build_job_template
362 job: amd64-debian-user-cross-container
364 IMAGE: debian-all-test-cross
365 CONFIGURE_ARGS: --disable-tools --disable-system --static
366 --target-list-exclude=alpha-linux-user,sh4-linux-user
367 MAKE_CHECK_ARGS: check-tcg
369 # targets stuck on older compilers
371 extends: .native_build_job_template
373 job: amd64-debian-legacy-cross-container
375 IMAGE: debian-legacy-test-cross
376 TARGETS: alpha-linux-user alpha-softmmu sh4-linux-user
377 CONFIGURE_ARGS: --disable-tools
378 MAKE_CHECK_ARGS: check-tcg
381 extends: .native_build_job_template
383 job: hexagon-cross-container
385 IMAGE: debian-hexagon-cross
386 TARGETS: hexagon-linux-user
387 CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
388 MAKE_CHECK_ARGS: check-tcg
390 # Build the softmmu targets we have check-tcg tests and compilers in
391 # our omnibus all-test-cross container. Those targets that haven't got
392 # Debian cross compiler support need to use special containers.
394 extends: .native_build_job_template
396 job: amd64-debian-user-cross-container
398 IMAGE: debian-all-test-cross
399 CONFIGURE_ARGS: --disable-tools --enable-debug
400 TARGETS: arm-softmmu aarch64-softmmu i386-softmmu riscv64-softmmu
401 s390x-softmmu x86_64-softmmu
402 MAKE_CHECK_ARGS: check-tcg
405 extends: .native_build_job_template
407 job: loongarch-debian-cross-container
409 IMAGE: debian-loongarch-cross
410 CONFIGURE_ARGS: --disable-tools --enable-debug
411 TARGETS: loongarch64-linux-user loongarch64-softmmu
412 MAKE_CHECK_ARGS: check-tcg
414 # We build tricore in a very minimal tricore only container
415 build-tricore-softmmu:
416 extends: .native_build_job_template
418 job: tricore-debian-cross-container
420 IMAGE: debian-tricore-cross
421 CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug
422 TARGETS: tricore-softmmu
423 MAKE_CHECK_ARGS: check-tcg
426 extends: .native_build_job_template
428 job: amd64-fedora-container
431 CONFIGURE_ARGS: --cc=clang --cxx=clang++
432 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
433 --extra-cflags=-fno-sanitize=function
434 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu s390x-softmmu
435 MAKE_CHECK_ARGS: check-qtest check-tcg
438 extends: .native_build_job_template
440 job: amd64-debian-user-cross-container
443 IMAGE: debian-all-test-cross
444 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
445 --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
446 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
447 MAKE_CHECK_ARGS: check-unit check-tcg
449 # Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
450 # On gitlab runners, default value sometimes end up calling 2 lds concurrently and
451 # triggers an Out-Of-Memory error
453 # Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with
454 # CFI builds, and thus have to disable it here.
456 # Split in three sets of build/check/avocado to limit the execution time of each
460 - .native_build_job_template
461 - .native_build_artifact_template
463 - job: amd64-fedora-container
468 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
469 --enable-safe-stack --disable-slirp
470 TARGETS: aarch64-softmmu
471 MAKE_CHECK_ARGS: check-build
472 # FIXME: This job is often failing, likely due to out-of-memory problems in
473 # the constrained containers of the shared runners. Thus this is marked as
474 # skipped until the situation has been solved.
479 extends: .native_test_job_template
481 - job: build-cfi-aarch64
485 MAKE_CHECK_ARGS: check
488 extends: .avocado_test_job_template
490 - job: build-cfi-aarch64
494 MAKE_CHECK_ARGS: check-avocado
496 build-cfi-ppc64-s390x:
498 - .native_build_job_template
499 - .native_build_artifact_template
501 - job: amd64-fedora-container
506 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
507 --enable-safe-stack --disable-slirp
508 TARGETS: ppc64-softmmu s390x-softmmu
509 MAKE_CHECK_ARGS: check-build
510 # FIXME: This job is often failing, likely due to out-of-memory problems in
511 # the constrained containers of the shared runners. Thus this is marked as
512 # skipped until the situation has been solved.
516 check-cfi-ppc64-s390x:
517 extends: .native_test_job_template
519 - job: build-cfi-ppc64-s390x
523 MAKE_CHECK_ARGS: check
525 avocado-cfi-ppc64-s390x:
526 extends: .avocado_test_job_template
528 - job: build-cfi-ppc64-s390x
532 MAKE_CHECK_ARGS: check-avocado
536 - .native_build_job_template
537 - .native_build_artifact_template
539 - job: amd64-fedora-container
544 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
545 --enable-safe-stack --disable-slirp
546 TARGETS: x86_64-softmmu
547 MAKE_CHECK_ARGS: check-build
551 extends: .native_test_job_template
553 - job: build-cfi-x86_64
557 MAKE_CHECK_ARGS: check
560 extends: .avocado_test_job_template
562 - job: build-cfi-x86_64
566 MAKE_CHECK_ARGS: check-avocado
569 extends: .native_build_job_template
571 job: amd64-ubuntu2204-container
574 CONFIGURE_ARGS: --enable-tsan --cc=clang --cxx=clang++
575 --enable-trace-backends=ust --disable-slirp
576 TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
577 # Remove when we switch to a distro with clang >= 18
578 # https://github.com/google/sanitizers/issues/1716
579 MAKE: setarch -R make
581 # gcov is a GCC features
583 extends: .native_build_job_template
585 job: amd64-ubuntu2204-container
589 CONFIGURE_ARGS: --enable-gcov
590 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
591 MAKE_CHECK_ARGS: check-unit check-softfloat
594 - gcovr --xml-pretty --exclude-unreachable-branches --print-summary
595 -o coverage.xml --root ${CI_PROJECT_DIR} . *.p
596 coverage: /^\s*lines:\s*\d+.\d+\%/
598 name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
602 - build/meson-logs/testlog.txt
604 junit: build/meson-logs/testlog.junit.xml
606 coverage_format: cobertura
607 path: build/coverage.xml
610 extends: .native_build_job_template
612 job: amd64-fedora-container
616 - mkdir build-oss-fuzz
617 - export LSAN_OPTIONS=suppressions=scripts/oss-fuzz/lsan_suppressions.txt
618 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
619 ./scripts/oss-fuzz/build.sh
620 - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
621 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
623 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
624 echo Testing ${fuzzer} ... ;
625 "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
629 extends: .native_build_job_template
631 job: amd64-debian-user-cross-container
633 IMAGE: debian-all-test-cross
635 - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64"
638 - ../configure --enable-tcg-interpreter --disable-docs --disable-gtk --disable-vnc
639 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)"
640 || { cat config.log meson-logs/meson-log.txt && exit 1; }
642 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
643 - for tg in $TARGETS ; do
644 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
645 ./tests/qtest/boot-serial-test || exit 1 ;
646 ./tests/qtest/cdrom-test || exit 1 ;
648 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
649 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
652 # Check our reduced build configurations
653 # requires libfdt: aarch64, arm, loongarch64, microblaze, microblazeel,
654 # or1k, ppc64, riscv32, riscv64, rx
655 # fails qtest without boards: i386, x86_64
656 build-without-defaults:
657 extends: .native_build_job_template
659 job: amd64-centos9-container
663 --without-default-devices
664 --without-default-features
667 --disable-qom-cast-debug
669 TARGETS: alpha-softmmu avr-softmmu cris-softmmu hppa-softmmu m68k-softmmu
670 mips-softmmu mips64-softmmu mipsel-softmmu mips64el-softmmu
671 ppc-softmmu s390x-softmmu sh4-softmmu sh4eb-softmmu sparc-softmmu
672 sparc64-softmmu tricore-softmmu xtensa-softmmu xtensaeb-softmmu
673 hexagon-linux-user i386-linux-user s390x-linux-user
674 MAKE_CHECK_ARGS: check
677 extends: .base_job_template
679 image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG
681 job: amd64-fedora-container
683 - mkdir subprojects/libvhost-user/build
684 - cd subprojects/libvhost-user/build
688 # No targets are built here, just tools, docs, and unit tests. This
689 # also feeds into the eventual documentation deployment steps later
690 build-tools-and-docs-debian:
692 - .native_build_job_template
693 - .native_build_artifact_template
695 job: amd64-debian-container
696 # when running on 'master' we use pre-existing container
700 MAKE_CHECK_ARGS: check-unit ctags TAGS cscope
701 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
704 # Prepare for GitLab pages deployment. Anything copied into the
705 # "public" directory will be deployed to $USER.gitlab.io/$PROJECT
707 # GitLab publishes from any branch that triggers a CI pipeline
709 # For the main repo we don't want to publish from 'staging'
710 # since that content may not be pushed, nor do we wish to
711 # publish from 'stable-NNN' branches as that content is outdated.
712 # Thus we restrict to just the default branch
714 # For contributor forks we want to publish from any repo so
715 # that users can see the results of their commits, regardless
716 # of what topic branch they're currently using
718 extends: .base_job_template
719 image: $CI_REGISTRY_IMAGE/qemu/debian:$QEMU_CI_CONTAINER_TAG
722 - job: build-tools-and-docs-debian
725 # HTML-ised source tree
727 # We unset variables to work around a bug in some htags versions
728 # which causes it to fail when the environment is large
729 - CI_COMMIT_MESSAGE= CI_COMMIT_TAG_MESSAGE= htags
730 -anT --tree-view=filetree -m qemu_init
731 -t "Welcome to the QEMU sourcecode"
733 # Project documentation
734 - make -C build install DESTDIR=$(pwd)/temp-install
735 - mv temp-install/usr/local/share/doc/qemu/* public/
744 image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG
749 - job: amd64-fedora-container
752 - dnf install -y curl wget
754 # would be nice to cancel the job if over quota (https://gitlab.com/gitlab-org/gitlab/-/issues/256089)
756 # curl --request POST --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" "${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/jobs/${CI_JOB_ID}/cancel
757 - 'scripts/coverity-scan/run-coverity-scan --check-upload-only || { exitcode=$?; if test $exitcode = 1; then
762 scripts/coverity-scan/run-coverity-scan --update-tools-only > update-tools.log 2>&1 || { cat update-tools.log; exit 1; };
763 scripts/coverity-scan/run-coverity-scan --no-update-tools'
765 - if: '$COVERITY_TOKEN == null'
767 - if: '$COVERITY_EMAIL == null'
769 # Never included on upstream pipelines, except for schedules
770 - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_PIPELINE_SOURCE == "schedule"'
772 - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
774 # Forks don't get any pipeline unless QEMU_CI=1 or QEMU_CI=2 is set
775 - if: '$QEMU_CI != "1" && $QEMU_CI != "2"'
777 # Always manual on forks even if $QEMU_CI == "2"