xref: /openbmc/qemu/.gitlab-ci.d/buildtest.yml (revision 719c6819)
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/**/*.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
199
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
223
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.
228migration-compat-aarch64:
229  extends: .migration-compat-common
230  variables:
231    TARGET: aarch64
232    QEMU_JOB_SKIPPED: 1
233
234migration-compat-x86_64:
235  extends: .migration-compat-common
236  variables:
237    TARGET: x86_64
238
239check-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
247
248avocado-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
258
259build-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
269
270check-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
278
279avocado-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
288
289#
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.
292#
293
294build-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
306
307avocado-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
319
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)
327build-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
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    MAKE_CHECK_ARGS: check-unit check-tcg
450
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
454#
455# Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with
456# CFI builds, and thus have to disable it here.
457#
458# Split in three sets of build/check/avocado to limit the execution time of each
459# job
460build-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
479
480check-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
488
489avocado-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
497
498build-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
517
518check-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
526
527avocado-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
535
536build-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
551
552check-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
560
561avocado-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
569
570tsan-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
582
583# gcov is a GCC features
584gcov:
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
610
611build-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
629
630build-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
653
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
658build-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
677
678build-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
689
690# No targets are built here, just tools, docs, and unit tests. This
691# also feeds into the eventual documentation deployment steps later
692build-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
705
706# Prepare for GitLab pages deployment. Anything copied into the
707# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
708#
709# GitLab publishes from any branch that triggers a CI pipeline
710#
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
715#
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
719pages:
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
744
745coverity:
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
781