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