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