xref: /qemu/.gitlab-ci.d/buildtest.yml (revision 785ea711)
1include:
2  - local: '/.gitlab-ci.d/buildtest-template.yml'
3
4build-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
20check-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
28
29acceptance-system-alpine:
30  extends: .acceptance_test_job_template
31  needs:
32    - job: build-system-alpine
33      artifacts: true
34  variables:
35    IMAGE: alpine
36    MAKE_CHECK_ARGS: check-acceptance
37
38build-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
52
53check-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
61
62acceptance-system-ubuntu:
63  extends: .acceptance_test_job_template
64  needs:
65    - job: build-system-ubuntu
66      artifacts: true
67  variables:
68    IMAGE: ubuntu2004
69    MAKE_CHECK_ARGS: check-acceptance
70
71build-system-debian:
72  extends: .native_build_job_template
73  needs:
74    job: amd64-debian-container
75  variables:
76    IMAGE: debian-amd64
77    CONFIGURE_ARGS: --enable-fdt=system
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
86check-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
95acceptance-system-debian:
96  extends: .acceptance_test_job_template
97  needs:
98    - job: build-system-debian
99      artifacts: true
100  variables:
101    IMAGE: debian-amd64
102    MAKE_CHECK_ARGS: check-acceptance
103
104build-system-fedora:
105  extends: .native_build_job_template
106  needs:
107    job: amd64-fedora-container
108  variables:
109    IMAGE: fedora
110    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
111             --enable-fdt=system --enable-slirp=system --enable-capstone=system
112    TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
113      xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
114    MAKE_CHECK_ARGS: check-build
115  artifacts:
116    expire_in: 2 days
117    paths:
118      - build
119
120check-system-fedora:
121  extends: .native_test_job_template
122  needs:
123    - job: build-system-fedora
124      artifacts: true
125  variables:
126    IMAGE: fedora
127    MAKE_CHECK_ARGS: check
128
129acceptance-system-fedora:
130  extends: .acceptance_test_job_template
131  needs:
132    - job: build-system-fedora
133      artifacts: true
134  variables:
135    IMAGE: fedora
136    MAKE_CHECK_ARGS: check-acceptance
137
138build-system-centos:
139  extends: .native_build_job_template
140  needs:
141    job: amd64-centos8-container
142  variables:
143    IMAGE: centos8
144    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
145                    --enable-modules --enable-trace-backends=dtrace
146    TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
147      x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
148    MAKE_CHECK_ARGS: check-build
149  artifacts:
150    expire_in: 2 days
151    paths:
152      - build
153
154check-system-centos:
155  extends: .native_test_job_template
156  needs:
157    - job: build-system-centos
158      artifacts: true
159  variables:
160    IMAGE: centos8
161    MAKE_CHECK_ARGS: check
162
163acceptance-system-centos:
164  extends: .acceptance_test_job_template
165  needs:
166    - job: build-system-centos
167      artifacts: true
168  variables:
169    IMAGE: centos8
170    MAKE_CHECK_ARGS: check-acceptance
171
172build-system-opensuse:
173  extends: .native_build_job_template
174  needs:
175    job: amd64-opensuse-leap-container
176  variables:
177    IMAGE: opensuse-leap
178    CONFIGURE_ARGS: --enable-fdt=system
179    TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
180    MAKE_CHECK_ARGS: check-build
181  artifacts:
182    expire_in: 2 days
183    paths:
184      - build
185
186check-system-opensuse:
187  extends: .native_test_job_template
188  needs:
189    - job: build-system-opensuse
190      artifacts: true
191  variables:
192    IMAGE: opensuse-leap
193    MAKE_CHECK_ARGS: check
194
195acceptance-system-opensuse:
196  extends: .acceptance_test_job_template
197  needs:
198    - job: build-system-opensuse
199      artifacts: true
200  variables:
201    IMAGE: opensuse-leap
202    MAKE_CHECK_ARGS: check-acceptance
203
204
205build-disabled:
206  extends: .native_build_job_template
207  needs:
208    job: amd64-fedora-container
209  variables:
210    IMAGE: fedora
211    CONFIGURE_ARGS:
212      --disable-attr
213      --disable-auth-pam
214      --disable-avx2
215      --disable-bochs
216      --disable-brlapi
217      --disable-bzip2
218      --disable-cap-ng
219      --disable-capstone
220      --disable-cloop
221      --disable-coroutine-pool
222      --disable-curl
223      --disable-curses
224      --disable-dmg
225      --disable-docs
226      --disable-gcrypt
227      --disable-glusterfs
228      --disable-gnutls
229      --disable-gtk
230      --disable-guest-agent
231      --disable-iconv
232      --disable-keyring
233      --disable-kvm
234      --disable-libiscsi
235      --disable-libpmem
236      --disable-libssh
237      --disable-libudev
238      --disable-libusb
239      --disable-libxml2
240      --disable-linux-aio
241      --disable-live-block-migration
242      --disable-lzo
243      --disable-malloc-trim
244      --disable-mpath
245      --disable-nettle
246      --disable-numa
247      --disable-opengl
248      --disable-parallels
249      --disable-pie
250      --disable-qcow1
251      --disable-qed
252      --disable-qom-cast-debug
253      --disable-rbd
254      --disable-rdma
255      --disable-replication
256      --disable-sdl
257      --disable-seccomp
258      --disable-slirp
259      --disable-smartcard
260      --disable-snappy
261      --disable-sparse
262      --disable-spice
263      --disable-strip
264      --disable-tpm
265      --disable-usb-redir
266      --disable-vdi
267      --disable-vhost-crypto
268      --disable-vhost-net
269      --disable-vhost-scsi
270      --disable-vhost-kernel
271      --disable-vhost-user
272      --disable-vhost-vdpa
273      --disable-vhost-vsock
274      --disable-virglrenderer
275      --disable-vnc
276      --disable-vte
277      --disable-vvfat
278      --disable-xen
279      --disable-zstd
280    TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
281      s390x-softmmu i386-linux-user
282    MAKE_CHECK_ARGS: check-qtest SPEED=slow
283
284# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
285# the configure script. The container doesn't contain Xen headers so
286# Xen accelerator is not detected / selected. As result it build the
287# i386-softmmu and x86_64-softmmu with KVM being the single accelerator
288# available.
289# Also use a different coroutine implementation (which is only really of
290# interest to KVM users, i.e. with TCG disabled)
291build-tcg-disabled:
292  extends: .native_build_job_template
293  needs:
294    job: amd64-centos8-container
295  variables:
296    IMAGE: centos8
297  script:
298    - mkdir build
299    - cd build
300    - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
301      || { cat config.log meson-logs/meson-log.txt && exit 1; }
302    - make -j"$JOBS"
303    - make check-unit
304    - make check-qapi-schema
305    - cd tests/qemu-iotests/
306    - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
307            052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
308            170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
309    - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
310            124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
311            208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
312            260 261 262 263 264 270 272 273 277 279
313
314build-user:
315  extends: .native_build_job_template
316  needs:
317    job: amd64-debian-user-cross-container
318  variables:
319    IMAGE: debian-all-test-cross
320    CONFIGURE_ARGS: --disable-tools --disable-system
321    MAKE_CHECK_ARGS: check-tcg
322
323build-user-static:
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: --disable-tools --disable-system --static
330    MAKE_CHECK_ARGS: check-tcg
331
332# Because the hexagon cross-compiler takes so long to build we don't rely
333# on the CI system to build it and hence this job has an optional dependency
334# declared. The image is manually uploaded.
335build-user-hexagon:
336  extends: .native_build_job_template
337  needs:
338    job: hexagon-cross-container
339    optional: true
340  variables:
341    IMAGE: debian-hexagon-cross
342    TARGETS: hexagon-linux-user
343    CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
344    MAKE_CHECK_ARGS: check-tcg
345
346# Only build the softmmu targets we have check-tcg tests for
347build-some-softmmu:
348  extends: .native_build_job_template
349  needs:
350    job: amd64-debian-user-cross-container
351  variables:
352    IMAGE: debian-all-test-cross
353    CONFIGURE_ARGS: --disable-tools --enable-debug
354    TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
355    MAKE_CHECK_ARGS: check-tcg
356
357clang-system:
358  extends: .native_build_job_template
359  needs:
360    job: amd64-fedora-container
361  variables:
362    IMAGE: fedora
363    CONFIGURE_ARGS: --cc=clang --cxx=clang++
364      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
365    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
366      ppc-softmmu s390x-softmmu
367    MAKE_CHECK_ARGS: check-qtest check-tcg
368
369clang-user:
370  extends: .native_build_job_template
371  needs:
372    job: amd64-debian-user-cross-container
373  variables:
374    IMAGE: debian-all-test-cross
375    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
376      --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
377      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
378    MAKE_CHECK_ARGS: check-unit check-tcg
379
380# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
381# On gitlab runners, default value sometimes end up calling 2 lds concurrently and
382# triggers an Out-Of-Memory error
383#
384# Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together
385# with QEMU and linked as a static library to avoid false positives in CFI checks.
386# This can be accomplished by using -enable-slirp=git, which avoids the use of
387# a system-wide version of the library
388#
389# Split in three sets of build/check/acceptance to limit the execution time of each
390# job
391build-cfi-aarch64:
392  extends: .native_build_job_template
393  needs:
394  - job: amd64-fedora-container
395  variables:
396    LD_JOBS: 1
397    AR: llvm-ar
398    IMAGE: fedora
399    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
400      --enable-safe-stack --enable-slirp=git
401    TARGETS: aarch64-softmmu
402    MAKE_CHECK_ARGS: check-build
403  timeout: 70m
404  artifacts:
405    expire_in: 2 days
406    paths:
407      - build
408
409check-cfi-aarch64:
410  extends: .native_test_job_template
411  needs:
412    - job: build-cfi-aarch64
413      artifacts: true
414  variables:
415    IMAGE: fedora
416    MAKE_CHECK_ARGS: check
417
418acceptance-cfi-aarch64:
419  extends: .acceptance_test_job_template
420  needs:
421    - job: build-cfi-aarch64
422      artifacts: true
423  variables:
424    IMAGE: fedora
425    MAKE_CHECK_ARGS: check-acceptance
426
427build-cfi-ppc64-s390x:
428  extends: .native_build_job_template
429  needs:
430  - job: amd64-fedora-container
431  variables:
432    LD_JOBS: 1
433    AR: llvm-ar
434    IMAGE: fedora
435    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
436      --enable-safe-stack --enable-slirp=git
437    TARGETS: ppc64-softmmu s390x-softmmu
438    MAKE_CHECK_ARGS: check-build
439  timeout: 70m
440  artifacts:
441    expire_in: 2 days
442    paths:
443      - build
444
445check-cfi-ppc64-s390x:
446  extends: .native_test_job_template
447  needs:
448    - job: build-cfi-ppc64-s390x
449      artifacts: true
450  variables:
451    IMAGE: fedora
452    MAKE_CHECK_ARGS: check
453
454acceptance-cfi-ppc64-s390x:
455  extends: .acceptance_test_job_template
456  needs:
457    - job: build-cfi-ppc64-s390x
458      artifacts: true
459  variables:
460    IMAGE: fedora
461    MAKE_CHECK_ARGS: check-acceptance
462
463build-cfi-x86_64:
464  extends: .native_build_job_template
465  needs:
466  - job: amd64-fedora-container
467  variables:
468    LD_JOBS: 1
469    AR: llvm-ar
470    IMAGE: fedora
471    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
472      --enable-safe-stack --enable-slirp=git
473    TARGETS: x86_64-softmmu
474    MAKE_CHECK_ARGS: check-build
475  timeout: 70m
476  artifacts:
477    expire_in: 2 days
478    paths:
479      - build
480
481check-cfi-x86_64:
482  extends: .native_test_job_template
483  needs:
484    - job: build-cfi-x86_64
485      artifacts: true
486  variables:
487    IMAGE: fedora
488    MAKE_CHECK_ARGS: check
489
490acceptance-cfi-x86_64:
491  extends: .acceptance_test_job_template
492  needs:
493    - job: build-cfi-x86_64
494      artifacts: true
495  variables:
496    IMAGE: fedora
497    MAKE_CHECK_ARGS: check-acceptance
498
499tsan-build:
500  extends: .native_build_job_template
501  needs:
502    job: amd64-ubuntu2004-container
503  variables:
504    IMAGE: ubuntu2004
505    CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
506          --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system
507    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
508    MAKE_CHECK_ARGS: bench V=1
509
510# These targets are on the way out
511build-deprecated:
512  extends: .native_build_job_template
513  needs:
514    job: amd64-debian-user-cross-container
515  variables:
516    IMAGE: debian-all-test-cross
517    CONFIGURE_ARGS: --disable-tools
518    MAKE_CHECK_ARGS: build-tcg
519    TARGETS: ppc64abi32-linux-user
520  artifacts:
521    expire_in: 2 days
522    paths:
523      - build
524
525# We split the check-tcg step as test failures are expected but we still
526# want to catch the build breaking.
527check-deprecated:
528  extends: .native_test_job_template
529  needs:
530    - job: build-deprecated
531      artifacts: true
532  variables:
533    IMAGE: debian-all-test-cross
534    MAKE_CHECK_ARGS: check-tcg
535  allow_failure: true
536
537# gprof/gcov are GCC features
538build-gprof-gcov:
539  extends: .native_build_job_template
540  needs:
541    job: amd64-ubuntu2004-container
542  variables:
543    IMAGE: ubuntu2004
544    CONFIGURE_ARGS: --enable-gprof --enable-gcov
545    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
546  artifacts:
547    expire_in: 1 days
548    paths:
549      - build
550
551check-gprof-gcov:
552  extends: .native_test_job_template
553  needs:
554    - job: build-gprof-gcov
555      artifacts: true
556  variables:
557    IMAGE: ubuntu2004
558    MAKE_CHECK_ARGS: check
559  after_script:
560    - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
561
562build-oss-fuzz:
563  extends: .native_build_job_template
564  needs:
565    job: amd64-fedora-container
566  variables:
567    IMAGE: fedora
568  script:
569    - mkdir build-oss-fuzz
570    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
571      ./scripts/oss-fuzz/build.sh
572    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
573    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
574                      | grep -v slirp); do
575        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
576        echo Testing ${fuzzer} ... ;
577        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
578      done
579    # Unrelated to fuzzer: run some tests with -fsanitize=address
580    - cd build-oss-fuzz && make check-qtest-i386 check-unit
581
582build-tci:
583  extends: .native_build_job_template
584  needs:
585    job: amd64-debian-user-cross-container
586  variables:
587    IMAGE: debian-all-test-cross
588  script:
589    - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64"
590    - mkdir build
591    - cd build
592    - ../configure --enable-tcg-interpreter
593        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
594    - make -j"$JOBS"
595    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
596    - for tg in $TARGETS ; do
597        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
598        ./tests/qtest/boot-serial-test || exit 1 ;
599        ./tests/qtest/cdrom-test || exit 1 ;
600      done
601    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
602    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
603    - make check-tcg
604
605# Alternate coroutines implementations are only really of interest to KVM users
606# However we can't test against KVM on Gitlab-CI so we can only run unit tests
607build-coroutine-sigaltstack:
608  extends: .native_build_job_template
609  needs:
610    job: amd64-ubuntu2004-container
611  variables:
612    IMAGE: ubuntu2004
613    CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
614                    --enable-trace-backends=ftrace
615    MAKE_CHECK_ARGS: check-unit
616
617# Check our reduced build configurations
618build-without-default-devices:
619  extends: .native_build_job_template
620  needs:
621    job: amd64-centos8-container
622  variables:
623    IMAGE: centos8
624    CONFIGURE_ARGS: --without-default-devices --disable-user
625
626build-without-default-features:
627  extends: .native_build_job_template
628  needs:
629    job: amd64-debian-container
630  variables:
631    IMAGE: debian-amd64
632    CONFIGURE_ARGS: --without-default-features --disable-user
633        --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu
634    MAKE_CHECK_ARGS: check-unit
635
636build-libvhost-user:
637  stage: build
638  image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
639  needs:
640    job: amd64-fedora-container
641  before_script:
642    - dnf install -y meson ninja-build
643  script:
644    - mkdir subprojects/libvhost-user/build
645    - cd subprojects/libvhost-user/build
646    - meson
647    - ninja
648
649# No targets are built here, just tools, docs, and unit tests. This
650# also feeds into the eventual documentation deployment steps later
651build-tools-and-docs-debian:
652  extends: .native_build_job_template
653  needs:
654    job: amd64-debian-container
655  variables:
656    IMAGE: debian-amd64
657    MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
658    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
659  artifacts:
660    expire_in: 2 days
661    paths:
662      - build
663
664# Prepare for GitLab pages deployment. Anything copied into the
665# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
666pages:
667  image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
668  stage: test
669  needs:
670    - job: build-tools-and-docs-debian
671  script:
672    - mkdir -p public
673    # HTML-ised source tree
674    - make gtags
675    - htags -anT --tree-view=filetree -m qemu_init
676        -t "Welcome to the QEMU sourcecode"
677    - mv HTML public/src
678    # Project documentation
679    - make -C build install DESTDIR=$(pwd)/temp-install
680    - mv temp-install/usr/local/share/doc/qemu/* public/
681  artifacts:
682    paths:
683      - public
684