xref: /openbmc/qemu/.gitlab-ci.d/buildtest.yml (revision 55abfc1f)
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 microblaze-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:microblaze 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-centos8-container
162  variables:
163    IMAGE: centos8
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 nios2-softmmu
168    MAKE_CHECK_ARGS: check-build
169
170check-system-centos:
171  extends: .native_test_job_template
172  needs:
173    - job: build-system-centos
174      artifacts: true
175  variables:
176    IMAGE: centos8
177    MAKE_CHECK_ARGS: check
178
179avocado-system-centos:
180  extends: .avocado_test_job_template
181  needs:
182    - job: build-system-centos
183      artifacts: true
184  variables:
185    IMAGE: centos8
186    MAKE_CHECK_ARGS: check-avocado
187    AVOCADO_TAGS: arch:ppc64 arch:or1k arch:390x arch:x86_64 arch:rx
188      arch:sh4 arch:nios2
189
190build-system-opensuse:
191  extends:
192    - .native_build_job_template
193    - .native_build_artifact_template
194  needs:
195    job: amd64-opensuse-leap-container
196  variables:
197    IMAGE: opensuse-leap
198    TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
199    MAKE_CHECK_ARGS: check-build
200
201check-system-opensuse:
202  extends: .native_test_job_template
203  needs:
204    - job: build-system-opensuse
205      artifacts: true
206  variables:
207    IMAGE: opensuse-leap
208    MAKE_CHECK_ARGS: check
209
210avocado-system-opensuse:
211  extends: .avocado_test_job_template
212  needs:
213    - job: build-system-opensuse
214      artifacts: true
215  variables:
216    IMAGE: opensuse-leap
217    MAKE_CHECK_ARGS: check-avocado
218    AVOCADO_TAGS: arch:s390x arch:x86_64 arch:aarch64
219
220#
221# Flaky tests. We don't run these by default and they are allow fail
222# but often the CI system is the only way to trigger the failures.
223#
224
225build-system-flaky:
226  extends:
227    - .native_build_job_template
228    - .native_build_artifact_template
229  needs:
230    job: amd64-debian-container
231  variables:
232    IMAGE: debian
233    QEMU_JOB_OPTIONAL: 1
234    TARGETS: aarch64-softmmu arm-softmmu mips64el-softmmu
235      ppc64-softmmu rx-softmmu s390x-softmmu sh4-softmmu x86_64-softmmu
236    MAKE_CHECK_ARGS: check-build
237
238avocado-system-flaky:
239  extends: .avocado_test_job_template
240  needs:
241    - job: build-system-flaky
242      artifacts: true
243  allow_failure: true
244  variables:
245    IMAGE: debian
246    MAKE_CHECK_ARGS: check-avocado
247    QEMU_JOB_OPTIONAL: 1
248    QEMU_TEST_FLAKY_TESTS: 1
249    AVOCADO_TAGS: flaky
250
251# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
252# the configure script. The container doesn't contain Xen headers so
253# Xen accelerator is not detected / selected. As result it build the
254# i386-softmmu and x86_64-softmmu with KVM being the single accelerator
255# available.
256# Also use a different coroutine implementation (which is only really of
257# interest to KVM users, i.e. with TCG disabled)
258build-tcg-disabled:
259  extends: .native_build_job_template
260  needs:
261    job: amd64-centos8-container
262  variables:
263    IMAGE: centos8
264  script:
265    - mkdir build
266    - cd build
267    - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
268                   --disable-docs --disable-sdl --disable-gtk --disable-vnc
269      || { cat config.log meson-logs/meson-log.txt && exit 1; }
270    - make -j"$JOBS"
271    - make check-unit
272    - make check-qapi-schema
273    - cd tests/qemu-iotests/
274    - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
275            052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
276            170 171 183 184 192 194 208 221 226 227 236 253 277 image-fleecing
277    - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
278            124 132 139 142 144 145 151 152 155 157 165 194 196 200 202
279            208 209 216 218 227 234 246 247 248 250 254 255 257 258
280            260 261 262 263 264 270 272 273 277 279 image-fleecing
281
282build-user:
283  extends: .native_build_job_template
284  needs:
285    job: amd64-debian-user-cross-container
286  variables:
287    IMAGE: debian-all-test-cross
288    CONFIGURE_ARGS: --disable-tools --disable-system
289      --target-list-exclude=alpha-linux-user,sh4-linux-user
290    MAKE_CHECK_ARGS: check-tcg
291
292build-user-static:
293  extends: .native_build_job_template
294  needs:
295    job: amd64-debian-user-cross-container
296  variables:
297    IMAGE: debian-all-test-cross
298    CONFIGURE_ARGS: --disable-tools --disable-system --static
299      --target-list-exclude=alpha-linux-user,sh4-linux-user
300    MAKE_CHECK_ARGS: check-tcg
301
302# targets stuck on older compilers
303build-legacy:
304  extends: .native_build_job_template
305  needs:
306    job: amd64-debian-legacy-cross-container
307  variables:
308    IMAGE: debian-legacy-test-cross
309    TARGETS: alpha-linux-user alpha-softmmu sh4-linux-user
310    CONFIGURE_ARGS: --disable-tools
311    MAKE_CHECK_ARGS: check-tcg
312
313build-user-hexagon:
314  extends: .native_build_job_template
315  needs:
316    job: hexagon-cross-container
317  variables:
318    IMAGE: debian-hexagon-cross
319    TARGETS: hexagon-linux-user
320    CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
321    MAKE_CHECK_ARGS: check-tcg
322
323# Build the softmmu targets we have check-tcg tests and compilers in
324# our omnibus all-test-cross container. Those targets that haven't got
325# Debian cross compiler support need to use special containers.
326build-some-softmmu:
327  extends: .native_build_job_template
328  needs:
329    job: amd64-debian-user-cross-container
330  variables:
331    IMAGE: debian-all-test-cross
332    CONFIGURE_ARGS: --disable-tools --enable-debug
333    TARGETS: arm-softmmu aarch64-softmmu i386-softmmu riscv64-softmmu
334      s390x-softmmu x86_64-softmmu
335    MAKE_CHECK_ARGS: check-tcg
336
337build-loongarch64:
338  extends: .native_build_job_template
339  needs:
340    job: loongarch-debian-cross-container
341  variables:
342    IMAGE: debian-loongarch-cross
343    CONFIGURE_ARGS: --disable-tools --enable-debug
344    TARGETS: loongarch64-linux-user loongarch64-softmmu
345    MAKE_CHECK_ARGS: check-tcg
346
347# We build tricore in a very minimal tricore only container
348build-tricore-softmmu:
349  extends: .native_build_job_template
350  needs:
351    job: tricore-debian-cross-container
352  variables:
353    IMAGE: debian-tricore-cross
354    CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug
355    TARGETS: tricore-softmmu
356    MAKE_CHECK_ARGS: check-tcg
357
358clang-system:
359  extends: .native_build_job_template
360  needs:
361    job: amd64-fedora-container
362  variables:
363    IMAGE: fedora
364    CONFIGURE_ARGS: --cc=clang --cxx=clang++
365      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
366    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu s390x-softmmu
367    MAKE_CHECK_ARGS: check-qtest check-tcg
368
369clang-user:
370  extends: .native_build_job_template
371  needs:
372    job: amd64-debian-user-cross-container
373  timeout: 70m
374  variables:
375    IMAGE: debian-all-test-cross
376    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
377      --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
378      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
379    MAKE_CHECK_ARGS: check-unit check-tcg
380
381# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
382# On gitlab runners, default value sometimes end up calling 2 lds concurrently and
383# triggers an Out-Of-Memory error
384#
385# Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with
386# CFI builds, and thus have to disable it here.
387#
388# Split in three sets of build/check/avocado to limit the execution time of each
389# job
390build-cfi-aarch64:
391  extends:
392    - .native_build_job_template
393    - .native_build_artifact_template
394  needs:
395  - job: amd64-fedora-container
396  variables:
397    LD_JOBS: 1
398    AR: llvm-ar
399    IMAGE: fedora
400    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
401      --enable-safe-stack --disable-slirp
402    TARGETS: aarch64-softmmu
403    MAKE_CHECK_ARGS: check-build
404    # FIXME: This job is often failing, likely due to out-of-memory problems in
405    # the constrained containers of the shared runners. Thus this is marked as
406    # skipped until the situation has been solved.
407    QEMU_JOB_SKIPPED: 1
408  timeout: 90m
409
410check-cfi-aarch64:
411  extends: .native_test_job_template
412  needs:
413    - job: build-cfi-aarch64
414      artifacts: true
415  variables:
416    IMAGE: fedora
417    MAKE_CHECK_ARGS: check
418
419avocado-cfi-aarch64:
420  extends: .avocado_test_job_template
421  needs:
422    - job: build-cfi-aarch64
423      artifacts: true
424  variables:
425    IMAGE: fedora
426    MAKE_CHECK_ARGS: check-avocado
427
428build-cfi-ppc64-s390x:
429  extends:
430    - .native_build_job_template
431    - .native_build_artifact_template
432  needs:
433  - job: amd64-fedora-container
434  variables:
435    LD_JOBS: 1
436    AR: llvm-ar
437    IMAGE: fedora
438    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
439      --enable-safe-stack --disable-slirp
440    TARGETS: ppc64-softmmu s390x-softmmu
441    MAKE_CHECK_ARGS: check-build
442    # FIXME: This job is often failing, likely due to out-of-memory problems in
443    # the constrained containers of the shared runners. Thus this is marked as
444    # skipped until the situation has been solved.
445    QEMU_JOB_SKIPPED: 1
446  timeout: 80m
447
448check-cfi-ppc64-s390x:
449  extends: .native_test_job_template
450  needs:
451    - job: build-cfi-ppc64-s390x
452      artifacts: true
453  variables:
454    IMAGE: fedora
455    MAKE_CHECK_ARGS: check
456
457avocado-cfi-ppc64-s390x:
458  extends: .avocado_test_job_template
459  needs:
460    - job: build-cfi-ppc64-s390x
461      artifacts: true
462  variables:
463    IMAGE: fedora
464    MAKE_CHECK_ARGS: check-avocado
465
466build-cfi-x86_64:
467  extends:
468    - .native_build_job_template
469    - .native_build_artifact_template
470  needs:
471  - job: amd64-fedora-container
472  variables:
473    LD_JOBS: 1
474    AR: llvm-ar
475    IMAGE: fedora
476    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
477      --enable-safe-stack --disable-slirp
478    TARGETS: x86_64-softmmu
479    MAKE_CHECK_ARGS: check-build
480  timeout: 70m
481
482check-cfi-x86_64:
483  extends: .native_test_job_template
484  needs:
485    - job: build-cfi-x86_64
486      artifacts: true
487  variables:
488    IMAGE: fedora
489    MAKE_CHECK_ARGS: check
490
491avocado-cfi-x86_64:
492  extends: .avocado_test_job_template
493  needs:
494    - job: build-cfi-x86_64
495      artifacts: true
496  variables:
497    IMAGE: fedora
498    MAKE_CHECK_ARGS: check-avocado
499
500tsan-build:
501  extends: .native_build_job_template
502  needs:
503    job: amd64-ubuntu2204-container
504  variables:
505    IMAGE: ubuntu2204
506    CONFIGURE_ARGS: --enable-tsan --cc=clang --cxx=clang++
507          --enable-trace-backends=ust --disable-slirp
508    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
509
510# gcov is a GCC features
511gcov:
512  extends: .native_build_job_template
513  needs:
514    job: amd64-ubuntu2204-container
515  timeout: 80m
516  variables:
517    IMAGE: ubuntu2204
518    CONFIGURE_ARGS: --enable-gcov
519    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
520    MAKE_CHECK_ARGS: check-unit check-softfloat
521  after_script:
522    - cd build
523    - gcovr --xml-pretty --exclude-unreachable-branches --print-summary
524        -o coverage.xml --root ${CI_PROJECT_DIR} . *.p
525  coverage: /^\s*lines:\s*\d+.\d+\%/
526  artifacts:
527    name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
528    when: always
529    expire_in: 2 days
530    paths:
531      - build/meson-logs/testlog.txt
532    reports:
533      junit: build/meson-logs/testlog.junit.xml
534      coverage_report:
535        coverage_format: cobertura
536        path: build/coverage.xml
537
538build-oss-fuzz:
539  extends: .native_build_job_template
540  needs:
541    job: amd64-fedora-container
542  variables:
543    IMAGE: fedora
544  script:
545    - mkdir build-oss-fuzz
546    - export LSAN_OPTIONS=suppressions=scripts/oss-fuzz/lsan_suppressions.txt
547    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
548      ./scripts/oss-fuzz/build.sh
549    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
550    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
551                      | grep -v slirp); do
552        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
553        echo Testing ${fuzzer} ... ;
554        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
555      done
556
557build-tci:
558  extends: .native_build_job_template
559  needs:
560    job: amd64-debian-user-cross-container
561  variables:
562    IMAGE: debian-all-test-cross
563  script:
564    - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64"
565    - mkdir build
566    - cd build
567    - ../configure --enable-tcg-interpreter --disable-docs --disable-gtk --disable-vnc
568        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)"
569        || { cat config.log meson-logs/meson-log.txt && exit 1; }
570    - make -j"$JOBS"
571    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
572    - for tg in $TARGETS ; do
573        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
574        ./tests/qtest/boot-serial-test || exit 1 ;
575        ./tests/qtest/cdrom-test || exit 1 ;
576      done
577    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
578    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
579    - make check-tcg
580
581# Check our reduced build configurations
582build-without-defaults:
583  extends: .native_build_job_template
584  needs:
585    job: amd64-centos8-container
586  variables:
587    IMAGE: centos8
588    CONFIGURE_ARGS:
589      --without-default-devices
590      --without-default-features
591      --disable-fdt
592      --disable-pie
593      --disable-qom-cast-debug
594      --disable-strip
595    TARGETS: avr-softmmu mips64-softmmu s390x-softmmu sh4-softmmu
596      sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
597    MAKE_CHECK_ARGS: check
598
599build-libvhost-user:
600  extends: .base_job_template
601  stage: build
602  image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG
603  needs:
604    job: amd64-fedora-container
605  script:
606    - mkdir subprojects/libvhost-user/build
607    - cd subprojects/libvhost-user/build
608    - meson
609    - ninja
610
611# No targets are built here, just tools, docs, and unit tests. This
612# also feeds into the eventual documentation deployment steps later
613build-tools-and-docs-debian:
614  extends:
615    - .native_build_job_template
616    - .native_build_artifact_template
617  needs:
618    job: amd64-debian-container
619    # when running on 'master' we use pre-existing container
620    optional: true
621  variables:
622    IMAGE: debian
623    MAKE_CHECK_ARGS: check-unit ctags TAGS cscope
624    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
625    QEMU_JOB_PUBLISH: 1
626
627# Prepare for GitLab pages deployment. Anything copied into the
628# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
629#
630# GitLab publishes from any branch that triggers a CI pipeline
631#
632# For the main repo we don't want to publish from 'staging'
633# since that content may not be pushed, nor do we wish to
634# publish from 'stable-NNN' branches as that content is outdated.
635# Thus we restrict to just the default branch
636#
637# For contributor forks we want to publish from any repo so
638# that users can see the results of their commits, regardless
639# of what topic branch they're currently using
640pages:
641  extends: .base_job_template
642  image: $CI_REGISTRY_IMAGE/qemu/debian:$QEMU_CI_CONTAINER_TAG
643  stage: test
644  needs:
645    - job: build-tools-and-docs-debian
646  script:
647    - mkdir -p public
648    # HTML-ised source tree
649    - make gtags
650    - htags -anT --tree-view=filetree -m qemu_init
651        -t "Welcome to the QEMU sourcecode"
652    - mv HTML public/src
653    # Project documentation
654    - make -C build install DESTDIR=$(pwd)/temp-install
655    - mv temp-install/usr/local/share/doc/qemu/* public/
656  artifacts:
657    when: on_success
658    paths:
659      - public
660  variables:
661    QEMU_JOB_PUBLISH: 1
662