xref: /qemu/.gitlab-ci.d/buildtest.yml (revision 39ce9237)
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
357# We build tricore in a very minimal tricore only container
358build-tricore-softmmu:
359  extends: .native_build_job_template
360  needs:
361    job: tricore-debian-cross-container
362  variables:
363    IMAGE: debian-tricore-cross
364    CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug
365    TARGETS: tricore-softmmu
366    MAKE_CHECK_ARGS: check-tcg
367
368clang-system:
369  extends: .native_build_job_template
370  needs:
371    job: amd64-fedora-container
372  variables:
373    IMAGE: fedora
374    CONFIGURE_ARGS: --cc=clang --cxx=clang++
375      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
376    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
377      ppc-softmmu s390x-softmmu
378    MAKE_CHECK_ARGS: check-qtest check-tcg
379
380clang-user:
381  extends: .native_build_job_template
382  needs:
383    job: amd64-debian-user-cross-container
384  variables:
385    IMAGE: debian-all-test-cross
386    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
387      --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
388      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
389    MAKE_CHECK_ARGS: check-unit check-tcg
390
391# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
392# On gitlab runners, default value sometimes end up calling 2 lds concurrently and
393# triggers an Out-Of-Memory error
394#
395# Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together
396# with QEMU and linked as a static library to avoid false positives in CFI checks.
397# This can be accomplished by using -enable-slirp=git, which avoids the use of
398# a system-wide version of the library
399#
400# Split in three sets of build/check/acceptance to limit the execution time of each
401# job
402build-cfi-aarch64:
403  extends: .native_build_job_template
404  needs:
405  - job: amd64-fedora-container
406  variables:
407    LD_JOBS: 1
408    AR: llvm-ar
409    IMAGE: fedora
410    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
411      --enable-safe-stack --enable-slirp=git
412    TARGETS: aarch64-softmmu
413    MAKE_CHECK_ARGS: check-build
414  timeout: 70m
415  artifacts:
416    expire_in: 2 days
417    paths:
418      - build
419
420check-cfi-aarch64:
421  extends: .native_test_job_template
422  needs:
423    - job: build-cfi-aarch64
424      artifacts: true
425  variables:
426    IMAGE: fedora
427    MAKE_CHECK_ARGS: check
428
429acceptance-cfi-aarch64:
430  extends: .acceptance_test_job_template
431  needs:
432    - job: build-cfi-aarch64
433      artifacts: true
434  variables:
435    IMAGE: fedora
436    MAKE_CHECK_ARGS: check-acceptance
437
438build-cfi-ppc64-s390x:
439  extends: .native_build_job_template
440  needs:
441  - job: amd64-fedora-container
442  variables:
443    LD_JOBS: 1
444    AR: llvm-ar
445    IMAGE: fedora
446    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
447      --enable-safe-stack --enable-slirp=git
448    TARGETS: ppc64-softmmu s390x-softmmu
449    MAKE_CHECK_ARGS: check-build
450  timeout: 70m
451  artifacts:
452    expire_in: 2 days
453    paths:
454      - build
455
456check-cfi-ppc64-s390x:
457  extends: .native_test_job_template
458  needs:
459    - job: build-cfi-ppc64-s390x
460      artifacts: true
461  variables:
462    IMAGE: fedora
463    MAKE_CHECK_ARGS: check
464
465acceptance-cfi-ppc64-s390x:
466  extends: .acceptance_test_job_template
467  needs:
468    - job: build-cfi-ppc64-s390x
469      artifacts: true
470  variables:
471    IMAGE: fedora
472    MAKE_CHECK_ARGS: check-acceptance
473
474build-cfi-x86_64:
475  extends: .native_build_job_template
476  needs:
477  - job: amd64-fedora-container
478  variables:
479    LD_JOBS: 1
480    AR: llvm-ar
481    IMAGE: fedora
482    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
483      --enable-safe-stack --enable-slirp=git
484    TARGETS: x86_64-softmmu
485    MAKE_CHECK_ARGS: check-build
486  timeout: 70m
487  artifacts:
488    expire_in: 2 days
489    paths:
490      - build
491
492check-cfi-x86_64:
493  extends: .native_test_job_template
494  needs:
495    - job: build-cfi-x86_64
496      artifacts: true
497  variables:
498    IMAGE: fedora
499    MAKE_CHECK_ARGS: check
500
501acceptance-cfi-x86_64:
502  extends: .acceptance_test_job_template
503  needs:
504    - job: build-cfi-x86_64
505      artifacts: true
506  variables:
507    IMAGE: fedora
508    MAKE_CHECK_ARGS: check-acceptance
509
510tsan-build:
511  extends: .native_build_job_template
512  needs:
513    job: amd64-ubuntu2004-container
514  variables:
515    IMAGE: ubuntu2004
516    CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
517          --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system
518    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
519    MAKE_CHECK_ARGS: bench V=1
520
521# These targets are on the way out
522build-deprecated:
523  extends: .native_build_job_template
524  needs:
525    job: amd64-debian-user-cross-container
526  variables:
527    IMAGE: debian-all-test-cross
528    CONFIGURE_ARGS: --disable-tools
529    MAKE_CHECK_ARGS: build-tcg
530    TARGETS: ppc64abi32-linux-user
531  artifacts:
532    expire_in: 2 days
533    paths:
534      - build
535
536# We split the check-tcg step as test failures are expected but we still
537# want to catch the build breaking.
538check-deprecated:
539  extends: .native_test_job_template
540  needs:
541    - job: build-deprecated
542      artifacts: true
543  variables:
544    IMAGE: debian-all-test-cross
545    MAKE_CHECK_ARGS: check-tcg
546  allow_failure: true
547
548# gprof/gcov are GCC features
549build-gprof-gcov:
550  extends: .native_build_job_template
551  needs:
552    job: amd64-ubuntu2004-container
553  variables:
554    IMAGE: ubuntu2004
555    CONFIGURE_ARGS: --enable-gprof --enable-gcov
556    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
557  artifacts:
558    expire_in: 1 days
559    paths:
560      - build
561
562check-gprof-gcov:
563  extends: .native_test_job_template
564  needs:
565    - job: build-gprof-gcov
566      artifacts: true
567  variables:
568    IMAGE: ubuntu2004
569    MAKE_CHECK_ARGS: check
570  after_script:
571    - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
572
573build-oss-fuzz:
574  extends: .native_build_job_template
575  needs:
576    job: amd64-fedora-container
577  variables:
578    IMAGE: fedora
579  script:
580    - mkdir build-oss-fuzz
581    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
582      ./scripts/oss-fuzz/build.sh
583    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
584    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
585                      | grep -v slirp); do
586        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
587        echo Testing ${fuzzer} ... ;
588        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
589      done
590    # Unrelated to fuzzer: run some tests with -fsanitize=address
591    - cd build-oss-fuzz && make check-qtest-i386 check-unit
592
593build-tci:
594  extends: .native_build_job_template
595  needs:
596    job: amd64-debian-user-cross-container
597  variables:
598    IMAGE: debian-all-test-cross
599  script:
600    - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64"
601    - mkdir build
602    - cd build
603    - ../configure --enable-tcg-interpreter
604        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
605    - make -j"$JOBS"
606    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
607    - for tg in $TARGETS ; do
608        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
609        ./tests/qtest/boot-serial-test || exit 1 ;
610        ./tests/qtest/cdrom-test || exit 1 ;
611      done
612    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
613    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
614    - make check-tcg
615
616# Alternate coroutines implementations are only really of interest to KVM users
617# However we can't test against KVM on Gitlab-CI so we can only run unit tests
618build-coroutine-sigaltstack:
619  extends: .native_build_job_template
620  needs:
621    job: amd64-ubuntu2004-container
622  variables:
623    IMAGE: ubuntu2004
624    CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
625                    --enable-trace-backends=ftrace
626    MAKE_CHECK_ARGS: check-unit
627
628# Check our reduced build configurations
629build-without-default-devices:
630  extends: .native_build_job_template
631  needs:
632    job: amd64-centos8-container
633  variables:
634    IMAGE: centos8
635    CONFIGURE_ARGS: --without-default-devices --disable-user
636
637build-without-default-features:
638  extends: .native_build_job_template
639  needs:
640    job: amd64-debian-container
641  variables:
642    IMAGE: debian-amd64
643    CONFIGURE_ARGS: --without-default-features --disable-user
644        --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu
645    MAKE_CHECK_ARGS: check-unit
646
647build-libvhost-user:
648  stage: build
649  image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
650  needs:
651    job: amd64-fedora-container
652  before_script:
653    - dnf install -y meson ninja-build
654  script:
655    - mkdir subprojects/libvhost-user/build
656    - cd subprojects/libvhost-user/build
657    - meson
658    - ninja
659
660# No targets are built here, just tools, docs, and unit tests. This
661# also feeds into the eventual documentation deployment steps later
662build-tools-and-docs-debian:
663  extends: .native_build_job_template
664  needs:
665    job: amd64-debian-container
666  variables:
667    IMAGE: debian-amd64
668    MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
669    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
670  artifacts:
671    expire_in: 2 days
672    paths:
673      - build
674
675# Prepare for GitLab pages deployment. Anything copied into the
676# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
677pages:
678  image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
679  stage: test
680  needs:
681    - job: build-tools-and-docs-debian
682  script:
683    - mkdir -p public
684    # HTML-ised source tree
685    - make gtags
686    - htags -anT --tree-view=filetree -m qemu_init
687        -t "Welcome to the QEMU sourcecode"
688    - mv HTML public/src
689    # Project documentation
690    - make -C build install DESTDIR=$(pwd)/temp-install
691    - mv temp-install/usr/local/share/doc/qemu/* public/
692  artifacts:
693    paths:
694      - public
695