Merge tag 'pull-testing-gdbstub-plugins-gitdm-061022-3' of https://github.com/stsquad...
[qemu.git] / .gitlab-ci.d / buildtest.yml
1 include:
2   - local: '/.gitlab-ci.d/buildtest-template.yml'
3
4 build-system-alpine:
5   extends: .native_build_job_template
6   needs:
7     - job: amd64-alpine-container
8   variables:
9     IMAGE: alpine
10     TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
11       microblazeel-softmmu mips64el-softmmu
12     MAKE_CHECK_ARGS: check-build
13     CONFIGURE_ARGS: --enable-docs --enable-trace-backends=log,simple,syslog
14   artifacts:
15     expire_in: 2 days
16     paths:
17       - .git-submodule-status
18       - build
19
20 check-system-alpine:
21   extends: .native_test_job_template
22   needs:
23     - job: build-system-alpine
24       artifacts: true
25   variables:
26     IMAGE: alpine
27     MAKE_CHECK_ARGS: check-unit check-qtest
28
29 avocado-system-alpine:
30   extends: .avocado_test_job_template
31   needs:
32     - job: build-system-alpine
33       artifacts: true
34   variables:
35     IMAGE: alpine
36     MAKE_CHECK_ARGS: check-avocado
37
38 build-system-ubuntu:
39   extends: .native_build_job_template
40   needs:
41     job: amd64-ubuntu2004-container
42   variables:
43     IMAGE: ubuntu2004
44     CONFIGURE_ARGS: --enable-docs --enable-fdt=system --enable-slirp=system
45         --enable-capstone
46     TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
47       microblazeel-softmmu mips64el-softmmu
48     MAKE_CHECK_ARGS: check-build
49   artifacts:
50     expire_in: 2 days
51     paths:
52       - build
53
54 check-system-ubuntu:
55   extends: .native_test_job_template
56   needs:
57     - job: build-system-ubuntu
58       artifacts: true
59   variables:
60     IMAGE: ubuntu2004
61     MAKE_CHECK_ARGS: check
62
63 avocado-system-ubuntu:
64   extends: .avocado_test_job_template
65   needs:
66     - job: build-system-ubuntu
67       artifacts: true
68   variables:
69     IMAGE: ubuntu2004
70     MAKE_CHECK_ARGS: check-avocado
71
72 build-system-debian:
73   extends: .native_build_job_template
74   needs:
75     job: amd64-debian-container
76   variables:
77     IMAGE: debian-amd64
78     TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
79       riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
80     MAKE_CHECK_ARGS: check-build
81   artifacts:
82     expire_in: 2 days
83     paths:
84       - build
85
86 check-system-debian:
87   extends: .native_test_job_template
88   needs:
89     - job: build-system-debian
90       artifacts: true
91   variables:
92     IMAGE: debian-amd64
93     MAKE_CHECK_ARGS: check
94
95 avocado-system-debian:
96   extends: .avocado_test_job_template
97   needs:
98     - job: build-system-debian
99       artifacts: true
100   variables:
101     IMAGE: debian-amd64
102     MAKE_CHECK_ARGS: check-avocado
103
104 crash-test-debian:
105   extends: .native_test_job_template
106   needs:
107     - job: build-system-debian
108       artifacts: true
109   variables:
110     IMAGE: debian-amd64
111   script:
112     - cd build
113     - make check-venv
114     - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-i386
115
116 build-system-fedora:
117   extends: .native_build_job_template
118   needs:
119     job: amd64-fedora-container
120   variables:
121     IMAGE: fedora
122     CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
123              --enable-fdt=system --enable-slirp=system --enable-capstone
124     TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
125       xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
126     MAKE_CHECK_ARGS: check-build
127   artifacts:
128     expire_in: 2 days
129     paths:
130       - build
131
132 check-system-fedora:
133   extends: .native_test_job_template
134   needs:
135     - job: build-system-fedora
136       artifacts: true
137   variables:
138     IMAGE: fedora
139     MAKE_CHECK_ARGS: check
140
141 avocado-system-fedora:
142   extends: .avocado_test_job_template
143   needs:
144     - job: build-system-fedora
145       artifacts: true
146   variables:
147     IMAGE: fedora
148     MAKE_CHECK_ARGS: check-avocado
149
150 crash-test-fedora:
151   extends: .native_test_job_template
152   needs:
153     - job: build-system-fedora
154       artifacts: true
155   variables:
156     IMAGE: fedora
157   script:
158     - cd build
159     - make check-venv
160     - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc
161     - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32
162
163 build-system-centos:
164   extends: .native_build_job_template
165   needs:
166     job: amd64-centos8-container
167   variables:
168     IMAGE: centos8
169     CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
170       --enable-modules --enable-trace-backends=dtrace --enable-docs
171       --enable-vfio-user-server
172     TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
173       x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
174     MAKE_CHECK_ARGS: check-build
175   artifacts:
176     expire_in: 2 days
177     paths:
178       - build
179
180 check-system-centos:
181   extends: .native_test_job_template
182   needs:
183     - job: build-system-centos
184       artifacts: true
185   variables:
186     IMAGE: centos8
187     MAKE_CHECK_ARGS: check
188
189 avocado-system-centos:
190   extends: .avocado_test_job_template
191   needs:
192     - job: build-system-centos
193       artifacts: true
194   variables:
195     IMAGE: centos8
196     MAKE_CHECK_ARGS: check-avocado
197
198 build-system-opensuse:
199   extends: .native_build_job_template
200   needs:
201     job: amd64-opensuse-leap-container
202   variables:
203     IMAGE: opensuse-leap
204     CONFIGURE_ARGS: --enable-fdt=system
205     TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
206     MAKE_CHECK_ARGS: check-build
207   artifacts:
208     expire_in: 2 days
209     paths:
210       - build
211
212 check-system-opensuse:
213   extends: .native_test_job_template
214   needs:
215     - job: build-system-opensuse
216       artifacts: true
217   variables:
218     IMAGE: opensuse-leap
219     MAKE_CHECK_ARGS: check
220
221 avocado-system-opensuse:
222   extends: .avocado_test_job_template
223   needs:
224     - job: build-system-opensuse
225       artifacts: true
226   variables:
227     IMAGE: opensuse-leap
228     MAKE_CHECK_ARGS: check-avocado
229
230
231 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
232 # the configure script. The container doesn't contain Xen headers so
233 # Xen accelerator is not detected / selected. As result it build the
234 # i386-softmmu and x86_64-softmmu with KVM being the single accelerator
235 # available.
236 # Also use a different coroutine implementation (which is only really of
237 # interest to KVM users, i.e. with TCG disabled)
238 build-tcg-disabled:
239   extends: .native_build_job_template
240   needs:
241     job: amd64-centos8-container
242   variables:
243     IMAGE: centos8
244   script:
245     - mkdir build
246     - cd build
247     - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
248       || { cat config.log meson-logs/meson-log.txt && exit 1; }
249     - make -j"$JOBS"
250     - make check-unit
251     - make check-qapi-schema
252     - cd tests/qemu-iotests/
253     - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
254             052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
255             170 171 183 184 192 194 208 221 226 227 236 253 277 image-fleecing
256     - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
257             124 132 139 142 144 145 151 152 155 157 165 194 196 200 202
258             208 209 216 218 227 234 246 247 248 250 254 255 257 258
259             260 261 262 263 264 270 272 273 277 279 image-fleecing
260
261 build-user:
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
268     MAKE_CHECK_ARGS: check-tcg
269
270 build-user-static:
271   extends: .native_build_job_template
272   needs:
273     job: amd64-debian-user-cross-container
274   variables:
275     IMAGE: debian-all-test-cross
276     CONFIGURE_ARGS: --disable-tools --disable-system --static
277     MAKE_CHECK_ARGS: check-tcg
278
279 # Because the hexagon cross-compiler takes so long to build we don't rely
280 # on the CI system to build it and hence this job has an optional dependency
281 # declared. The image is manually uploaded.
282 build-user-hexagon:
283   extends: .native_build_job_template
284   needs:
285     job: hexagon-cross-container
286     optional: true
287   variables:
288     IMAGE: debian-hexagon-cross
289     TARGETS: hexagon-linux-user
290     CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
291     MAKE_CHECK_ARGS: check-tcg
292
293 # Only build the softmmu targets we have check-tcg tests for
294 build-some-softmmu:
295   extends: .native_build_job_template
296   needs:
297     job: amd64-debian-user-cross-container
298   variables:
299     IMAGE: debian-all-test-cross
300     CONFIGURE_ARGS: --disable-tools --enable-debug
301     TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
302     MAKE_CHECK_ARGS: check-tcg
303
304 # We build tricore in a very minimal tricore only container
305 build-tricore-softmmu:
306   extends: .native_build_job_template
307   needs:
308     job: tricore-debian-cross-container
309   variables:
310     IMAGE: debian-tricore-cross
311     CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug
312     TARGETS: tricore-softmmu
313     MAKE_CHECK_ARGS: check-tcg
314
315 clang-system:
316   extends: .native_build_job_template
317   needs:
318     job: amd64-fedora-container
319   variables:
320     IMAGE: fedora
321     CONFIGURE_ARGS: --cc=clang --cxx=clang++
322       --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
323     TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
324       ppc-softmmu s390x-softmmu
325     MAKE_CHECK_ARGS: check-qtest check-tcg
326
327 clang-user:
328   extends: .native_build_job_template
329   needs:
330     job: amd64-debian-user-cross-container
331   variables:
332     IMAGE: debian-all-test-cross
333     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
334       --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
335       --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
336     MAKE_CHECK_ARGS: check-unit check-tcg
337
338 # Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
339 # On gitlab runners, default value sometimes end up calling 2 lds concurrently and
340 # triggers an Out-Of-Memory error
341 #
342 # Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together
343 # with QEMU and linked as a static library to avoid false positives in CFI checks.
344 # This can be accomplished by using -enable-slirp=git, which avoids the use of
345 # a system-wide version of the library
346 #
347 # Split in three sets of build/check/avocado to limit the execution time of each
348 # job
349 build-cfi-aarch64:
350   extends: .native_build_job_template
351   needs:
352   - job: amd64-fedora-container
353   variables:
354     LD_JOBS: 1
355     AR: llvm-ar
356     IMAGE: fedora
357     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
358       --enable-safe-stack --enable-slirp=git
359     TARGETS: aarch64-softmmu
360     MAKE_CHECK_ARGS: check-build
361     # FIXME: This job is often failing, likely due to out-of-memory problems in
362     # the constrained containers of the shared runners. Thus this is marked as
363     # skipped until the situation has been solved.
364     QEMU_JOB_SKIPPED: 1
365   timeout: 90m
366   artifacts:
367     expire_in: 2 days
368     paths:
369       - build
370
371 check-cfi-aarch64:
372   extends: .native_test_job_template
373   needs:
374     - job: build-cfi-aarch64
375       artifacts: true
376   variables:
377     IMAGE: fedora
378     MAKE_CHECK_ARGS: check
379
380 avocado-cfi-aarch64:
381   extends: .avocado_test_job_template
382   needs:
383     - job: build-cfi-aarch64
384       artifacts: true
385   variables:
386     IMAGE: fedora
387     MAKE_CHECK_ARGS: check-avocado
388
389 build-cfi-ppc64-s390x:
390   extends: .native_build_job_template
391   needs:
392   - job: amd64-fedora-container
393   variables:
394     LD_JOBS: 1
395     AR: llvm-ar
396     IMAGE: fedora
397     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
398       --enable-safe-stack --enable-slirp=git
399     TARGETS: ppc64-softmmu s390x-softmmu
400     MAKE_CHECK_ARGS: check-build
401     # FIXME: This job is often failing, likely due to out-of-memory problems in
402     # the constrained containers of the shared runners. Thus this is marked as
403     # skipped until the situation has been solved.
404     QEMU_JOB_SKIPPED: 1
405   timeout: 80m
406   artifacts:
407     expire_in: 2 days
408     paths:
409       - build
410
411 check-cfi-ppc64-s390x:
412   extends: .native_test_job_template
413   needs:
414     - job: build-cfi-ppc64-s390x
415       artifacts: true
416   variables:
417     IMAGE: fedora
418     MAKE_CHECK_ARGS: check
419
420 avocado-cfi-ppc64-s390x:
421   extends: .avocado_test_job_template
422   needs:
423     - job: build-cfi-ppc64-s390x
424       artifacts: true
425   variables:
426     IMAGE: fedora
427     MAKE_CHECK_ARGS: check-avocado
428
429 build-cfi-x86_64:
430   extends: .native_build_job_template
431   needs:
432   - job: amd64-fedora-container
433   variables:
434     LD_JOBS: 1
435     AR: llvm-ar
436     IMAGE: fedora
437     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
438       --enable-safe-stack --enable-slirp=git
439     TARGETS: x86_64-softmmu
440     MAKE_CHECK_ARGS: check-build
441   timeout: 70m
442   artifacts:
443     expire_in: 2 days
444     paths:
445       - build
446
447 check-cfi-x86_64:
448   extends: .native_test_job_template
449   needs:
450     - job: build-cfi-x86_64
451       artifacts: true
452   variables:
453     IMAGE: fedora
454     MAKE_CHECK_ARGS: check
455
456 avocado-cfi-x86_64:
457   extends: .avocado_test_job_template
458   needs:
459     - job: build-cfi-x86_64
460       artifacts: true
461   variables:
462     IMAGE: fedora
463     MAKE_CHECK_ARGS: check-avocado
464
465 tsan-build:
466   extends: .native_build_job_template
467   needs:
468     job: amd64-ubuntu2004-container
469   variables:
470     IMAGE: ubuntu2004
471     CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
472           --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system
473     TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
474     MAKE_CHECK_ARGS: bench V=1
475
476 # gprof/gcov are GCC features
477 build-gprof-gcov:
478   extends: .native_build_job_template
479   needs:
480     job: amd64-ubuntu2004-container
481   variables:
482     IMAGE: ubuntu2004
483     CONFIGURE_ARGS: --enable-gprof --enable-gcov
484     TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
485   artifacts:
486     expire_in: 1 days
487     paths:
488       - build
489
490 check-gprof-gcov:
491   extends: .native_test_job_template
492   needs:
493     - job: build-gprof-gcov
494       artifacts: true
495   variables:
496     IMAGE: ubuntu2004
497     MAKE_CHECK_ARGS: check
498   after_script:
499     - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
500
501 build-oss-fuzz:
502   extends: .native_build_job_template
503   needs:
504     job: amd64-fedora-container
505   variables:
506     IMAGE: fedora
507   script:
508     - mkdir build-oss-fuzz
509     - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
510       ./scripts/oss-fuzz/build.sh
511     - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
512     - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
513                       | grep -v slirp); do
514         grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
515         echo Testing ${fuzzer} ... ;
516         "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
517       done
518
519 build-tci:
520   extends: .native_build_job_template
521   needs:
522     job: amd64-debian-user-cross-container
523   variables:
524     IMAGE: debian-all-test-cross
525   script:
526     - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64"
527     - mkdir build
528     - cd build
529     - ../configure --enable-tcg-interpreter
530         --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
531     - make -j"$JOBS"
532     - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
533     - for tg in $TARGETS ; do
534         export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
535         ./tests/qtest/boot-serial-test || exit 1 ;
536         ./tests/qtest/cdrom-test || exit 1 ;
537       done
538     - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
539     - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
540     - make check-tcg
541
542 # Alternate coroutines implementations are only really of interest to KVM users
543 # However we can't test against KVM on Gitlab-CI so we can only run unit tests
544 build-coroutine-sigaltstack:
545   extends: .native_build_job_template
546   needs:
547     job: amd64-ubuntu2004-container
548   variables:
549     IMAGE: ubuntu2004
550     CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
551                     --enable-trace-backends=ftrace
552     MAKE_CHECK_ARGS: check-unit
553
554 # Check our reduced build configurations
555 build-without-default-devices:
556   extends: .native_build_job_template
557   needs:
558     job: amd64-centos8-container
559   variables:
560     IMAGE: centos8
561     CONFIGURE_ARGS: --without-default-devices --disable-user
562
563 build-without-default-features:
564   extends: .native_build_job_template
565   needs:
566     job: amd64-fedora-container
567   variables:
568     IMAGE: fedora
569     CONFIGURE_ARGS:
570       --without-default-features
571       --disable-capstone
572       --disable-pie
573       --disable-qom-cast-debug
574       --disable-slirp
575       --disable-strip
576     TARGETS: avr-softmmu i386-softmmu mips64-softmmu s390x-softmmu sh4-softmmu
577       sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
578     MAKE_CHECK_ARGS: check-unit check-qtest SPEED=slow
579
580 build-libvhost-user:
581   extends: .base_job_template
582   stage: build
583   image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
584   needs:
585     job: amd64-fedora-container
586   script:
587     - mkdir subprojects/libvhost-user/build
588     - cd subprojects/libvhost-user/build
589     - meson
590     - ninja
591
592 # No targets are built here, just tools, docs, and unit tests. This
593 # also feeds into the eventual documentation deployment steps later
594 build-tools-and-docs-debian:
595   extends: .native_build_job_template
596   needs:
597     job: amd64-debian-container
598     # when running on 'master' we use pre-existing container
599     optional: true
600   variables:
601     IMAGE: debian-amd64
602     MAKE_CHECK_ARGS: check-unit ctags TAGS cscope
603     CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
604     QEMU_JOB_PUBLISH: 1
605   artifacts:
606     expire_in: 2 days
607     paths:
608       - build
609
610 # Prepare for GitLab pages deployment. Anything copied into the
611 # "public" directory will be deployed to $USER.gitlab.io/$PROJECT
612 #
613 # GitLab publishes from any branch that triggers a CI pipeline
614 #
615 # For the main repo we don't want to publish from 'staging'
616 # since that content may not be pushed, nor do we wish to
617 # publish from 'stable-NNN' branches as that content is outdated.
618 # Thus we restrict to just the default branch
619 #
620 # For contributor forks we want to publish from any repo so
621 # that users can see the results of their commits, regardless
622 # of what topic branch they're currently using
623 pages:
624   extends: .base_job_template
625   image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
626   stage: test
627   needs:
628     - job: build-tools-and-docs-debian
629   script:
630     - mkdir -p public
631     # HTML-ised source tree
632     - make gtags
633     - htags -anT --tree-view=filetree -m qemu_init
634         -t "Welcome to the QEMU sourcecode"
635     - mv HTML public/src
636     # Project documentation
637     - make -C build install DESTDIR=$(pwd)/temp-install
638     - mv temp-install/usr/local/share/doc/qemu/* public/
639   artifacts:
640     paths:
641       - public
642   variables:
643     QEMU_JOB_PUBLISH: 1