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