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