vhost-user-scsi: avoid unlink(NULL) with fd passing
[qemu.git] / .gitlab-ci.d / buildtest.yml
blob0aea7ab84c24c230b0f531b51f6b326ea446230d
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-slirp=system
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     - scripts/device-crash-test -q ./qemu-system-i386
114 build-system-fedora:
115   extends: .native_build_job_template
116   needs:
117     job: amd64-fedora-container
118   variables:
119     IMAGE: fedora
120     CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
121              --enable-fdt=system --enable-slirp=system --enable-capstone=system
122     TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
123       xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
124     MAKE_CHECK_ARGS: check-build
125   artifacts:
126     expire_in: 2 days
127     paths:
128       - build
130 check-system-fedora:
131   extends: .native_test_job_template
132   needs:
133     - job: build-system-fedora
134       artifacts: true
135   variables:
136     IMAGE: fedora
137     MAKE_CHECK_ARGS: check
139 avocado-system-fedora:
140   extends: .avocado_test_job_template
141   needs:
142     - job: build-system-fedora
143       artifacts: true
144   variables:
145     IMAGE: fedora
146     MAKE_CHECK_ARGS: check-avocado
148 crash-test-fedora:
149   extends: .native_test_job_template
150   needs:
151     - job: build-system-fedora
152       artifacts: true
153   variables:
154     IMAGE: fedora
155   script:
156     - cd build
157     - scripts/device-crash-test -q ./qemu-system-ppc
158     - scripts/device-crash-test -q ./qemu-system-riscv32
160 build-system-centos:
161   extends: .native_build_job_template
162   needs:
163     job: amd64-centos8-container
164   variables:
165     IMAGE: centos8
166     CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
167       --enable-modules --enable-trace-backends=dtrace --enable-docs
168     TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
169       x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
170     MAKE_CHECK_ARGS: check-build
171   artifacts:
172     expire_in: 2 days
173     paths:
174       - build
176 check-system-centos:
177   extends: .native_test_job_template
178   needs:
179     - job: build-system-centos
180       artifacts: true
181   variables:
182     IMAGE: centos8
183     MAKE_CHECK_ARGS: check
185 avocado-system-centos:
186   extends: .avocado_test_job_template
187   needs:
188     - job: build-system-centos
189       artifacts: true
190   variables:
191     IMAGE: centos8
192     MAKE_CHECK_ARGS: check-avocado
194 build-system-opensuse:
195   extends: .native_build_job_template
196   needs:
197     job: amd64-opensuse-leap-container
198   variables:
199     IMAGE: opensuse-leap
200     CONFIGURE_ARGS: --enable-fdt=system
201     TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
202     MAKE_CHECK_ARGS: check-build
203   artifacts:
204     expire_in: 2 days
205     paths:
206       - build
208 check-system-opensuse:
209   extends: .native_test_job_template
210   needs:
211     - job: build-system-opensuse
212       artifacts: true
213   variables:
214     IMAGE: opensuse-leap
215     MAKE_CHECK_ARGS: check
217 avocado-system-opensuse:
218   extends: .avocado_test_job_template
219   needs:
220     - job: build-system-opensuse
221       artifacts: true
222   variables:
223     IMAGE: opensuse-leap
224     MAKE_CHECK_ARGS: check-avocado
227 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
228 # the configure script. The container doesn't contain Xen headers so
229 # Xen accelerator is not detected / selected. As result it build the
230 # i386-softmmu and x86_64-softmmu with KVM being the single accelerator
231 # available.
232 # Also use a different coroutine implementation (which is only really of
233 # interest to KVM users, i.e. with TCG disabled)
234 build-tcg-disabled:
235   extends: .native_build_job_template
236   needs:
237     job: amd64-centos8-container
238   variables:
239     IMAGE: centos8
240   script:
241     - mkdir build
242     - cd build
243     - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
244       || { cat config.log meson-logs/meson-log.txt && exit 1; }
245     - make -j"$JOBS"
246     - make check-unit
247     - make check-qapi-schema
248     - cd tests/qemu-iotests/
249     - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
250             052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
251             170 171 183 184 192 194 208 221 226 227 236 253 277 image-fleecing
252     - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
253             124 132 139 142 144 145 151 152 155 157 165 194 196 200 202
254             208 209 216 218 227 234 246 247 248 250 254 255 257 258
255             260 261 262 263 264 270 272 273 277 279 image-fleecing
257 build-user:
258   extends: .native_build_job_template
259   needs:
260     job: amd64-debian-user-cross-container
261   variables:
262     IMAGE: debian-all-test-cross
263     CONFIGURE_ARGS: --disable-tools --disable-system
264     MAKE_CHECK_ARGS: check-tcg
266 build-user-static:
267   extends: .native_build_job_template
268   needs:
269     job: amd64-debian-user-cross-container
270   variables:
271     IMAGE: debian-all-test-cross
272     CONFIGURE_ARGS: --disable-tools --disable-system --static
273     MAKE_CHECK_ARGS: check-tcg
275 # Because the hexagon cross-compiler takes so long to build we don't rely
276 # on the CI system to build it and hence this job has an optional dependency
277 # declared. The image is manually uploaded.
278 build-user-hexagon:
279   extends: .native_build_job_template
280   needs:
281     job: hexagon-cross-container
282     optional: true
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   variables:
328     IMAGE: debian-all-test-cross
329     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
330       --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
331       --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
332     MAKE_CHECK_ARGS: check-unit check-tcg
334 # Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
335 # On gitlab runners, default value sometimes end up calling 2 lds concurrently and
336 # triggers an Out-Of-Memory error
338 # Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together
339 # with QEMU and linked as a static library to avoid false positives in CFI checks.
340 # This can be accomplished by using -enable-slirp=git, which avoids the use of
341 # a system-wide version of the library
343 # Split in three sets of build/check/avocado to limit the execution time of each
344 # job
345 build-cfi-aarch64:
346   extends: .native_build_job_template
347   needs:
348   - job: amd64-fedora-container
349   variables:
350     LD_JOBS: 1
351     AR: llvm-ar
352     IMAGE: fedora
353     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
354       --enable-safe-stack --enable-slirp=git
355     TARGETS: aarch64-softmmu
356     MAKE_CHECK_ARGS: check-build
357   timeout: 70m
358   artifacts:
359     expire_in: 2 days
360     paths:
361       - build
362   rules:
363     # FIXME: This job is often failing, likely due to out-of-memory problems in
364     # the constrained containers of the shared runners. Thus this is marked as
365     # manual until the situation has been solved.
366     - when: manual
367       allow_failure: true
369 check-cfi-aarch64:
370   extends: .native_test_job_template
371   needs:
372     - job: build-cfi-aarch64
373       artifacts: true
374   variables:
375     IMAGE: fedora
376     MAKE_CHECK_ARGS: check
378 avocado-cfi-aarch64:
379   extends: .avocado_test_job_template
380   needs:
381     - job: build-cfi-aarch64
382       artifacts: true
383   variables:
384     IMAGE: fedora
385     MAKE_CHECK_ARGS: check-avocado
387 build-cfi-ppc64-s390x:
388   extends: .native_build_job_template
389   needs:
390   - job: amd64-fedora-container
391   variables:
392     LD_JOBS: 1
393     AR: llvm-ar
394     IMAGE: fedora
395     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
396       --enable-safe-stack --enable-slirp=git
397     TARGETS: ppc64-softmmu s390x-softmmu
398     MAKE_CHECK_ARGS: check-build
399   timeout: 70m
400   artifacts:
401     expire_in: 2 days
402     paths:
403       - build
404   rules:
405     # FIXME: This job is often failing, likely due to out-of-memory problems in
406     # the constrained containers of the shared runners. Thus this is marked as
407     # manual until the situation has been solved.
408     - when: manual
409       allow_failure: true
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
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
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
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
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
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
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
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
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
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
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
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
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
580 build-libvhost-user:
581   stage: build
582   image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
583   needs:
584     job: amd64-fedora-container
585   script:
586     - mkdir subprojects/libvhost-user/build
587     - cd subprojects/libvhost-user/build
588     - meson
589     - ninja
591 # No targets are built here, just tools, docs, and unit tests. This
592 # also feeds into the eventual documentation deployment steps later
593 build-tools-and-docs-debian:
594   extends: .native_build_job_template
595   needs:
596     job: amd64-debian-container
597   variables:
598     IMAGE: debian-amd64
599     MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
600     CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
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   image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
621   stage: test
622   needs:
623     - job: build-tools-and-docs-debian
624   script:
625     - mkdir -p public
626     # HTML-ised source tree
627     - make gtags
628     - htags -anT --tree-view=filetree -m qemu_init
629         -t "Welcome to the QEMU sourcecode"
630     - mv HTML public/src
631     # Project documentation
632     - make -C build install DESTDIR=$(pwd)/temp-install
633     - mv temp-install/usr/local/share/doc/qemu/* public/
634   artifacts:
635     paths:
636       - public
637   rules:
638     - if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
639       when: on_success
640     - if: '$CI_PROJECT_NAMESPACE == "qemu-project"'
641       when: never
642     - if: '$CI_PROJECT_NAMESPACE != "qemu-project"'
643       when: on_success