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