xref: /openbmc/qemu/.gitlab-ci.d/buildtest.yml (revision 990d2c18)
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
25functional-system-alpine:
26  extends: .functional_test_job_template
27  needs:
28    - job: build-system-alpine
29      artifacts: true
30  variables:
31    IMAGE: alpine
32    MAKE_CHECK_ARGS: check-avocado check-functional
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
56functional-system-ubuntu:
57  extends: .functional_test_job_template
58  needs:
59    - job: build-system-ubuntu
60      artifacts: true
61  variables:
62    IMAGE: ubuntu2204
63    MAKE_CHECK_ARGS: check-avocado check-functional
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
88functional-system-debian:
89  extends: .functional_test_job_template
90  needs:
91    - job: build-system-debian
92      artifacts: true
93  variables:
94    IMAGE: debian
95    MAKE_CHECK_ARGS: check-avocado check-functional
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
132functional-system-fedora:
133  extends: .functional_test_job_template
134  needs:
135    - job: build-system-fedora
136      artifacts: true
137  variables:
138    IMAGE: fedora
139    MAKE_CHECK_ARGS: check-avocado check-functional
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-centos9-container
162  variables:
163    IMAGE: centos9
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
169
170# Previous QEMU release. Used for cross-version migration tests.
171build-previous-qemu:
172  extends: .native_build_job_template
173  artifacts:
174    when: on_success
175    expire_in: 2 days
176    paths:
177      - build-previous
178    exclude:
179      - build-previous/**/*.p
180      - build-previous/**/*.a.p
181      - build-previous/**/*.c.o
182      - build-previous/**/*.c.o.d
183  needs:
184    job: amd64-opensuse-leap-container
185  variables:
186    IMAGE: opensuse-leap
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
190  before_script:
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
195  after_script:
196    - mv build build-previous
197
198.migration-compat-common:
199  extends: .common_test_job_template
200  needs:
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
205  # might fail.
206  allow_failure: true
207  variables:
208    IMAGE: opensuse-leap
209    MAKE_CHECK_ARGS: check-build
210  script:
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
213    # compatible with.
214    - cd build-previous
215    # Don't allow python-based tests to run. The
216    # vmstate-checker-script test has a race that causes it to fail
217    # sometimes. It cannot be fixed it because this job runs the test
218    # from the old QEMU version. The test will be removed on master,
219    # but this job will only see the change in the next release.
220    #
221    # TODO: remove this line after 9.2 release
222    - unset PYTHON
223    # old to new
224    - QTEST_QEMU_BINARY_SRC=./qemu-system-${TARGET}
225          QTEST_QEMU_BINARY=../build/qemu-system-${TARGET} ./tests/qtest/migration-test
226    # new to old
227    - QTEST_QEMU_BINARY_DST=./qemu-system-${TARGET}
228          QTEST_QEMU_BINARY=../build/qemu-system-${TARGET} ./tests/qtest/migration-test
229
230# This job needs to be disabled until we can have an aarch64 CPU model that
231# will both (1) support both KVM and TCG, and (2) provide a stable ABI.
232# Currently only "-cpu max" can provide (1), however it doesn't guarantee
233# (2).  Mark this test skipped until later.
234migration-compat-aarch64:
235  extends: .migration-compat-common
236  variables:
237    TARGET: aarch64
238    QEMU_JOB_SKIPPED: 1
239
240migration-compat-x86_64:
241  extends: .migration-compat-common
242  variables:
243    TARGET: x86_64
244
245check-system-centos:
246  extends: .native_test_job_template
247  needs:
248    - job: build-system-centos
249      artifacts: true
250  variables:
251    IMAGE: centos9
252    MAKE_CHECK_ARGS: check
253
254functional-system-centos:
255  extends: .functional_test_job_template
256  needs:
257    - job: build-system-centos
258      artifacts: true
259  variables:
260    IMAGE: centos9
261    MAKE_CHECK_ARGS: check-avocado check-functional
262    AVOCADO_TAGS: arch:ppc64 arch:or1k arch:s390x arch:x86_64 arch:rx
263      arch:sh4
264
265build-system-opensuse:
266  extends:
267    - .native_build_job_template
268    - .native_build_artifact_template
269  needs:
270    job: amd64-opensuse-leap-container
271  variables:
272    IMAGE: opensuse-leap
273    TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
274    MAKE_CHECK_ARGS: check-build
275
276check-system-opensuse:
277  extends: .native_test_job_template
278  needs:
279    - job: build-system-opensuse
280      artifacts: true
281  variables:
282    IMAGE: opensuse-leap
283    MAKE_CHECK_ARGS: check
284
285functional-system-opensuse:
286  extends: .functional_test_job_template
287  needs:
288    - job: build-system-opensuse
289      artifacts: true
290  variables:
291    IMAGE: opensuse-leap
292    MAKE_CHECK_ARGS: check-avocado check-functional
293    AVOCADO_TAGS: arch:s390x arch:x86_64 arch:aarch64
294
295#
296# Flaky tests. We don't run these by default and they are allow fail
297# but often the CI system is the only way to trigger the failures.
298#
299
300build-system-flaky:
301  extends:
302    - .native_build_job_template
303    - .native_build_artifact_template
304  needs:
305    job: amd64-debian-container
306  variables:
307    IMAGE: debian
308    QEMU_JOB_OPTIONAL: 1
309    TARGETS: aarch64-softmmu arm-softmmu mips64el-softmmu
310      ppc64-softmmu rx-softmmu s390x-softmmu sh4-softmmu x86_64-softmmu
311    MAKE_CHECK_ARGS: check-build
312
313functional-system-flaky:
314  extends: .functional_test_job_template
315  needs:
316    - job: build-system-flaky
317      artifacts: true
318  allow_failure: true
319  variables:
320    IMAGE: debian
321    MAKE_CHECK_ARGS: check-avocado check-functional
322    QEMU_JOB_OPTIONAL: 1
323    QEMU_TEST_FLAKY_TESTS: 1
324    AVOCADO_TAGS: flaky
325
326# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
327# the configure script. The container doesn't contain Xen headers so
328# Xen accelerator is not detected / selected. As result it build the
329# i386-softmmu and x86_64-softmmu with KVM being the single accelerator
330# available.
331# Also use a different coroutine implementation (which is only really of
332# interest to KVM users, i.e. with TCG disabled)
333build-tcg-disabled:
334  extends: .native_build_job_template
335  needs:
336    job: amd64-centos9-container
337  variables:
338    IMAGE: centos9
339  script:
340    - mkdir build
341    - cd build
342    - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
343                   --disable-docs --disable-sdl --disable-gtk --disable-vnc
344      || { cat config.log meson-logs/meson-log.txt && exit 1; }
345    - make -j"$JOBS"
346    - make check-unit
347    - make check-qapi-schema
348    - cd tests/qemu-iotests/
349    - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
350            052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
351            170 171 184 192 194 208 221 226 227 236 253 277 image-fleecing
352    - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
353            124 132 139 142 144 145 151 152 155 157 165 194 196 200 202
354            208 209 216 218 227 234 246 247 248 250 254 255 257 258
355            260 261 262 263 264 270 272 273 277 279 image-fleecing
356    - cd ../..
357    - make distclean
358
359build-user:
360  extends: .native_build_job_template
361  needs:
362    job: amd64-debian-user-cross-container
363  variables:
364    IMAGE: debian-all-test-cross
365    CONFIGURE_ARGS: --disable-tools --disable-system
366      --target-list-exclude=alpha-linux-user,sh4-linux-user
367    MAKE_CHECK_ARGS: check-tcg
368
369build-user-static:
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: --disable-tools --disable-system --static
376      --target-list-exclude=alpha-linux-user,sh4-linux-user
377    MAKE_CHECK_ARGS: check-tcg
378
379# targets stuck on older compilers
380build-legacy:
381  extends: .native_build_job_template
382  needs:
383    job: amd64-debian-legacy-cross-container
384  variables:
385    IMAGE: debian-legacy-test-cross
386    TARGETS: alpha-linux-user alpha-softmmu sh4-linux-user
387    CONFIGURE_ARGS: --disable-tools
388    MAKE_CHECK_ARGS: check-tcg
389
390build-user-hexagon:
391  extends: .native_build_job_template
392  needs:
393    job: hexagon-cross-container
394  variables:
395    IMAGE: debian-hexagon-cross
396    TARGETS: hexagon-linux-user
397    CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
398    MAKE_CHECK_ARGS: check-tcg
399
400# Build the softmmu targets we have check-tcg tests and compilers in
401# our omnibus all-test-cross container. Those targets that haven't got
402# Debian cross compiler support need to use special containers.
403build-some-softmmu:
404  extends: .native_build_job_template
405  needs:
406    job: amd64-debian-user-cross-container
407  variables:
408    IMAGE: debian-all-test-cross
409    CONFIGURE_ARGS: --disable-tools --enable-debug
410    TARGETS: arm-softmmu aarch64-softmmu i386-softmmu riscv64-softmmu
411      s390x-softmmu x86_64-softmmu
412    MAKE_CHECK_ARGS: check-tcg
413
414build-loongarch64:
415  extends: .native_build_job_template
416  needs:
417    job: loongarch-debian-cross-container
418  variables:
419    IMAGE: debian-loongarch-cross
420    CONFIGURE_ARGS: --disable-tools --enable-debug
421    TARGETS: loongarch64-linux-user loongarch64-softmmu
422    MAKE_CHECK_ARGS: check-tcg
423
424# We build tricore in a very minimal tricore only container
425build-tricore-softmmu:
426  extends: .native_build_job_template
427  needs:
428    job: tricore-debian-cross-container
429  variables:
430    IMAGE: debian-tricore-cross
431    CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug
432    TARGETS: tricore-softmmu
433    MAKE_CHECK_ARGS: check-tcg
434
435clang-system:
436  extends: .native_build_job_template
437  needs:
438    job: amd64-fedora-container
439  variables:
440    IMAGE: fedora
441    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-ubsan
442      --extra-cflags=-fno-sanitize-recover=undefined
443    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu s390x-softmmu
444    MAKE_CHECK_ARGS: check-qtest check-tcg
445
446clang-user:
447  extends: .native_build_job_template
448  needs:
449    job: amd64-debian-user-cross-container
450  timeout: 70m
451  variables:
452    IMAGE: debian-all-test-cross
453    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system --enable-ubsan
454      --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
455      --extra-cflags=-fno-sanitize-recover=undefined
456    MAKE_CHECK_ARGS: check-unit check-tcg
457
458# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
459# On gitlab runners, default value sometimes end up calling 2 lds concurrently and
460# triggers an Out-Of-Memory error
461#
462# Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with
463# CFI builds, and thus have to disable it here.
464#
465# Split in three sets of build/check/avocado to limit the execution time of each
466# job
467build-cfi-aarch64:
468  extends:
469    - .native_build_job_template
470    - .native_build_artifact_template
471  needs:
472  - job: amd64-fedora-container
473  variables:
474    LD_JOBS: 1
475    AR: llvm-ar
476    IMAGE: fedora
477    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
478      --enable-safe-stack --disable-slirp
479    TARGETS: aarch64-softmmu
480    MAKE_CHECK_ARGS: check-build
481    # FIXME: This job is often failing, likely due to out-of-memory problems in
482    # the constrained containers of the shared runners. Thus this is marked as
483    # skipped until the situation has been solved.
484    QEMU_JOB_SKIPPED: 1
485  timeout: 90m
486
487check-cfi-aarch64:
488  extends: .native_test_job_template
489  needs:
490    - job: build-cfi-aarch64
491      artifacts: true
492  variables:
493    IMAGE: fedora
494    MAKE_CHECK_ARGS: check
495
496functional-cfi-aarch64:
497  extends: .functional_test_job_template
498  needs:
499    - job: build-cfi-aarch64
500      artifacts: true
501  variables:
502    IMAGE: fedora
503    MAKE_CHECK_ARGS: check-avocado check-functional
504
505build-cfi-ppc64-s390x:
506  extends:
507    - .native_build_job_template
508    - .native_build_artifact_template
509  needs:
510  - job: amd64-fedora-container
511  variables:
512    LD_JOBS: 1
513    AR: llvm-ar
514    IMAGE: fedora
515    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
516      --enable-safe-stack --disable-slirp
517    TARGETS: ppc64-softmmu s390x-softmmu
518    MAKE_CHECK_ARGS: check-build
519    # FIXME: This job is often failing, likely due to out-of-memory problems in
520    # the constrained containers of the shared runners. Thus this is marked as
521    # skipped until the situation has been solved.
522    QEMU_JOB_SKIPPED: 1
523  timeout: 80m
524
525check-cfi-ppc64-s390x:
526  extends: .native_test_job_template
527  needs:
528    - job: build-cfi-ppc64-s390x
529      artifacts: true
530  variables:
531    IMAGE: fedora
532    MAKE_CHECK_ARGS: check
533
534functional-cfi-ppc64-s390x:
535  extends: .functional_test_job_template
536  needs:
537    - job: build-cfi-ppc64-s390x
538      artifacts: true
539  variables:
540    IMAGE: fedora
541    MAKE_CHECK_ARGS: check-avocado check-functional
542
543build-cfi-x86_64:
544  extends:
545    - .native_build_job_template
546    - .native_build_artifact_template
547  needs:
548  - job: amd64-fedora-container
549  variables:
550    LD_JOBS: 1
551    AR: llvm-ar
552    IMAGE: fedora
553    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
554      --enable-safe-stack --disable-slirp
555    TARGETS: x86_64-softmmu
556    MAKE_CHECK_ARGS: check-build
557  timeout: 70m
558
559check-cfi-x86_64:
560  extends: .native_test_job_template
561  needs:
562    - job: build-cfi-x86_64
563      artifacts: true
564  variables:
565    IMAGE: fedora
566    MAKE_CHECK_ARGS: check
567
568functional-cfi-x86_64:
569  extends: .functional_test_job_template
570  needs:
571    - job: build-cfi-x86_64
572      artifacts: true
573  variables:
574    IMAGE: fedora
575    MAKE_CHECK_ARGS: check-avocado check-functional
576
577tsan-build:
578  extends: .native_build_job_template
579  needs:
580    job: amd64-ubuntu2204-container
581  variables:
582    IMAGE: ubuntu2204
583    CONFIGURE_ARGS: --enable-tsan --cc=clang --cxx=clang++
584          --enable-trace-backends=ust --disable-slirp
585    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
586    # Remove when we switch to a distro with clang >= 18
587    # https://github.com/google/sanitizers/issues/1716
588    MAKE: setarch -R make
589
590# gcov is a GCC features
591gcov:
592  extends: .native_build_job_template
593  needs:
594    job: amd64-ubuntu2204-container
595  timeout: 80m
596  variables:
597    IMAGE: ubuntu2204
598    CONFIGURE_ARGS: --enable-gcov
599    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
600    MAKE_CHECK_ARGS: check-unit check-softfloat
601  after_script:
602    - cd build
603    - gcovr --xml-pretty --exclude-unreachable-branches --print-summary
604        -o coverage.xml --root ${CI_PROJECT_DIR} . *.p
605  coverage: /^\s*lines:\s*\d+.\d+\%/
606  artifacts:
607    name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
608    when: always
609    expire_in: 2 days
610    paths:
611      - build/meson-logs/testlog.txt
612    reports:
613      junit: build/meson-logs/testlog.junit.xml
614      coverage_report:
615        coverage_format: cobertura
616        path: build/coverage.xml
617
618build-oss-fuzz:
619  extends: .native_build_job_template
620  needs:
621    job: amd64-fedora-container
622  variables:
623    IMAGE: fedora
624  script:
625    - mkdir build-oss-fuzz
626    - export LSAN_OPTIONS=suppressions=scripts/oss-fuzz/lsan_suppressions.txt
627    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
628      ./scripts/oss-fuzz/build.sh
629    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
630    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
631                      | grep -v slirp); do
632        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
633        echo Testing ${fuzzer} ... ;
634        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
635      done
636
637build-tci:
638  extends: .native_build_job_template
639  needs:
640    job: amd64-debian-user-cross-container
641  variables:
642    IMAGE: debian-all-test-cross
643  script:
644    - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64"
645    - mkdir build
646    - cd build
647    - ../configure --enable-tcg-interpreter --disable-kvm --disable-docs --disable-gtk --disable-vnc
648        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)"
649        || { cat config.log meson-logs/meson-log.txt && exit 1; }
650    - make -j"$JOBS"
651    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
652    - for tg in $TARGETS ; do
653        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
654        ./tests/qtest/boot-serial-test || exit 1 ;
655        ./tests/qtest/cdrom-test || exit 1 ;
656      done
657    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
658    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
659    - make check-tcg
660
661# Check our reduced build configurations
662# requires libfdt: aarch64, arm, loongarch64, microblaze, microblazeel,
663#   or1k, ppc64, riscv32, riscv64, rx
664# fails qtest without boards: i386, x86_64
665build-without-defaults:
666  extends: .native_build_job_template
667  needs:
668    job: amd64-centos9-container
669  variables:
670    IMAGE: centos9
671    CONFIGURE_ARGS:
672      --without-default-devices
673      --without-default-features
674      --disable-fdt
675      --disable-pie
676      --disable-qom-cast-debug
677      --disable-strip
678    TARGETS: alpha-softmmu avr-softmmu hppa-softmmu m68k-softmmu
679      mips-softmmu mips64-softmmu mipsel-softmmu mips64el-softmmu
680      ppc-softmmu s390x-softmmu sh4-softmmu sh4eb-softmmu sparc-softmmu
681      sparc64-softmmu tricore-softmmu xtensa-softmmu xtensaeb-softmmu
682      hexagon-linux-user i386-linux-user s390x-linux-user
683    MAKE_CHECK_ARGS: check
684
685build-libvhost-user:
686  extends: .base_job_template
687  stage: build
688  image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG
689  needs:
690    job: amd64-fedora-container
691  script:
692    - mkdir subprojects/libvhost-user/build
693    - cd subprojects/libvhost-user/build
694    - meson
695    - ninja
696
697# No targets are built here, just tools, docs, and unit tests. This
698# also feeds into the eventual documentation deployment steps later
699build-tools-and-docs-debian:
700  extends:
701    - .native_build_job_template
702    - .native_build_artifact_template
703  needs:
704    job: amd64-debian-container
705    # when running on 'master' we use pre-existing container
706    optional: true
707  variables:
708    IMAGE: debian
709    MAKE_CHECK_ARGS: check-unit ctags TAGS cscope
710    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
711    QEMU_JOB_PUBLISH: 1
712
713# Prepare for GitLab pages deployment. Anything copied into the
714# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
715#
716# GitLab publishes from any branch that triggers a CI pipeline
717#
718# For the main repo we don't want to publish from 'staging'
719# since that content may not be pushed, nor do we wish to
720# publish from 'stable-NNN' branches as that content is outdated.
721# Thus we restrict to just the default branch
722#
723# For contributor forks we want to publish from any repo so
724# that users can see the results of their commits, regardless
725# of what topic branch they're currently using
726pages:
727  extends: .base_job_template
728  image: $CI_REGISTRY_IMAGE/qemu/debian:$QEMU_CI_CONTAINER_TAG
729  stage: test
730  needs:
731    - job: build-tools-and-docs-debian
732  script:
733    - mkdir -p public
734    # HTML-ised source tree
735    - make gtags
736    # We unset variables to work around a bug in some htags versions
737    # which causes it to fail when the environment is large
738    - CI_COMMIT_MESSAGE= CI_COMMIT_TAG_MESSAGE= htags
739        -anT --tree-view=filetree -m qemu_init
740        -t "Welcome to the QEMU sourcecode"
741    - mv HTML public/src
742    # Project documentation
743    - make -C build install DESTDIR=$(pwd)/temp-install
744    - mv temp-install/usr/local/share/doc/qemu/* public/
745  artifacts:
746    when: on_success
747    paths:
748      - public
749  variables:
750    QEMU_JOB_PUBLISH: 1
751
752coverity:
753  image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG
754  stage: build
755  allow_failure: true
756  timeout: 3h
757  needs:
758    - job: amd64-fedora-container
759      optional: true
760  before_script:
761    - dnf install -y curl wget
762  script:
763    # would be nice to cancel the job if over quota (https://gitlab.com/gitlab-org/gitlab/-/issues/256089)
764    # for example:
765    #   curl --request POST --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" "${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/jobs/${CI_JOB_ID}/cancel
766    - 'scripts/coverity-scan/run-coverity-scan --check-upload-only || { exitcode=$?; if test $exitcode = 1; then
767        exit 0;
768      else
769        exit $exitcode;
770      fi; };
771      scripts/coverity-scan/run-coverity-scan --update-tools-only > update-tools.log 2>&1 || { cat update-tools.log; exit 1; };
772      scripts/coverity-scan/run-coverity-scan --no-update-tools'
773  rules:
774    - if: '$COVERITY_TOKEN == null'
775      when: never
776    - if: '$COVERITY_EMAIL == null'
777      when: never
778    # Never included on upstream pipelines, except for schedules
779    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_PIPELINE_SOURCE == "schedule"'
780      when: on_success
781    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
782      when: never
783    # Forks don't get any pipeline unless QEMU_CI=1 or QEMU_CI=2 is set
784    - if: '$QEMU_CI != "1" && $QEMU_CI != "2"'
785      when: never
786    # Always manual on forks even if $QEMU_CI == "2"
787    - when: manual
788