]> git.proxmox.com Git - mirror_qemu.git/blob - .gitlab-ci.d/buildtest.yml
Merge tag 'pull-lu-20231018' of https://gitlab.com/rth7680/qemu into staging
[mirror_qemu.git] / .gitlab-ci.d / buildtest.yml
1 include:
2 - local: '/.gitlab-ci.d/buildtest-template.yml'
3
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
15
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
24
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
34
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
46
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
55
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:microblaze arch:mips64el
65
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-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
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-amd64
86 MAKE_CHECK_ARGS: check
87
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-amd64
95 MAKE_CHECK_ARGS: check-avocado
96 AVOCADO_TAGS: arch:arm arch:i386 arch:riscv64 arch:sh4 arch:sparc arch:xtensa
97
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-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
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
122
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
131
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
142
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
155
156 build-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
170 check-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
179 avocado-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
190 build-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
201 check-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
210 avocado-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)
228 build-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
252 build-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
261 build-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
270 build-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
281 build-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
292 build-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
302 clang-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
313 clang-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
334 build-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
354 check-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
363 avocado-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
372 build-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
392 check-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
401 avocado-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
410 build-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
426 check-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
435 avocado-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
444 tsan-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
455 gcov:
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
482 build-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
501 build-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
526 build-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
543 build-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
557 build-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
584 pages:
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