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