xref: /openbmc/qemu/.gitlab-ci.d/buildtest.yml (revision e0091133)
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-unit check-qtest
28
29avocado-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
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-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
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
62avocado-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
70
71build-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
84
85check-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
93
94avocado-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
102
103crash-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
114
115build-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
130
131check-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
139
140avocado-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
148
149crash-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
161
162build-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
178
179check-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
187
188avocado-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
196
197build-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
210
211check-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
219
220avocado-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
228
229
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)
237build-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
259
260build-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
268
269build-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
277
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.
281build-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
291
292# Only build the softmmu targets we have check-tcg tests for
293build-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
302
303# We build tricore in a very minimal tricore only container
304build-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
313
314clang-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
325
326clang-user:
327  extends: .native_build_job_template
328  needs:
329    job: amd64-debian-user-cross-container
330  timeout: 70m
331  variables:
332    IMAGE: debian-all-test-cross
333    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
334      --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
335      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
336    MAKE_CHECK_ARGS: check-unit check-tcg
337
338# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
339# On gitlab runners, default value sometimes end up calling 2 lds concurrently and
340# triggers an Out-Of-Memory error
341#
342# Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with
343# CFI builds, and thus have to disable it here.
344#
345# Split in three sets of build/check/avocado to limit the execution time of each
346# job
347build-cfi-aarch64:
348  extends: .native_build_job_template
349  needs:
350  - job: amd64-fedora-container
351  variables:
352    LD_JOBS: 1
353    AR: llvm-ar
354    IMAGE: fedora
355    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
356      --enable-safe-stack --disable-slirp
357    TARGETS: aarch64-softmmu
358    MAKE_CHECK_ARGS: check-build
359    # FIXME: This job is often failing, likely due to out-of-memory problems in
360    # the constrained containers of the shared runners. Thus this is marked as
361    # skipped until the situation has been solved.
362    QEMU_JOB_SKIPPED: 1
363  timeout: 90m
364  artifacts:
365    expire_in: 2 days
366    paths:
367      - build
368
369check-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
377
378avocado-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
386
387build-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 --disable-slirp
397    TARGETS: ppc64-softmmu s390x-softmmu
398    MAKE_CHECK_ARGS: check-build
399    # FIXME: This job is often failing, likely due to out-of-memory problems in
400    # the constrained containers of the shared runners. Thus this is marked as
401    # skipped until the situation has been solved.
402    QEMU_JOB_SKIPPED: 1
403  timeout: 80m
404  artifacts:
405    expire_in: 2 days
406    paths:
407      - build
408
409check-cfi-ppc64-s390x:
410  extends: .native_test_job_template
411  needs:
412    - job: build-cfi-ppc64-s390x
413      artifacts: true
414  variables:
415    IMAGE: fedora
416    MAKE_CHECK_ARGS: check
417
418avocado-cfi-ppc64-s390x:
419  extends: .avocado_test_job_template
420  needs:
421    - job: build-cfi-ppc64-s390x
422      artifacts: true
423  variables:
424    IMAGE: fedora
425    MAKE_CHECK_ARGS: check-avocado
426
427build-cfi-x86_64:
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 --disable-slirp
437    TARGETS: x86_64-softmmu
438    MAKE_CHECK_ARGS: check-build
439  timeout: 70m
440  artifacts:
441    expire_in: 2 days
442    paths:
443      - build
444
445check-cfi-x86_64:
446  extends: .native_test_job_template
447  needs:
448    - job: build-cfi-x86_64
449      artifacts: true
450  variables:
451    IMAGE: fedora
452    MAKE_CHECK_ARGS: check
453
454avocado-cfi-x86_64:
455  extends: .avocado_test_job_template
456  needs:
457    - job: build-cfi-x86_64
458      artifacts: true
459  variables:
460    IMAGE: fedora
461    MAKE_CHECK_ARGS: check-avocado
462
463tsan-build:
464  extends: .native_build_job_template
465  needs:
466    job: amd64-ubuntu2004-container
467  variables:
468    IMAGE: ubuntu2004
469    CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
470          --enable-trace-backends=ust --enable-fdt=system --disable-slirp
471    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
472    MAKE_CHECK_ARGS: bench V=1
473
474# gprof/gcov are GCC features
475build-gprof-gcov:
476  extends: .native_build_job_template
477  needs:
478    job: amd64-ubuntu2004-container
479  variables:
480    IMAGE: ubuntu2004
481    CONFIGURE_ARGS: --enable-gprof --enable-gcov
482    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
483  artifacts:
484    expire_in: 1 days
485    paths:
486      - build
487
488check-gprof-gcov:
489  extends: .native_test_job_template
490  needs:
491    - job: build-gprof-gcov
492      artifacts: true
493  variables:
494    IMAGE: ubuntu2004
495    MAKE_CHECK_ARGS: check
496  after_script:
497    - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
498
499build-oss-fuzz:
500  extends: .native_build_job_template
501  needs:
502    job: amd64-fedora-container
503  variables:
504    IMAGE: fedora
505  script:
506    - mkdir build-oss-fuzz
507    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
508      ./scripts/oss-fuzz/build.sh
509    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
510    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
511                      | grep -v slirp); do
512        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
513        echo Testing ${fuzzer} ... ;
514        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
515      done
516
517build-tci:
518  extends: .native_build_job_template
519  needs:
520    job: amd64-debian-user-cross-container
521  variables:
522    IMAGE: debian-all-test-cross
523  script:
524    - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64"
525    - mkdir build
526    - cd build
527    - ../configure --enable-tcg-interpreter
528        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
529    - make -j"$JOBS"
530    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
531    - for tg in $TARGETS ; do
532        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
533        ./tests/qtest/boot-serial-test || exit 1 ;
534        ./tests/qtest/cdrom-test || exit 1 ;
535      done
536    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
537    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
538    - make check-tcg
539
540# Alternate coroutines implementations are only really of interest to KVM users
541# However we can't test against KVM on Gitlab-CI so we can only run unit tests
542build-coroutine-sigaltstack:
543  extends: .native_build_job_template
544  needs:
545    job: amd64-ubuntu2004-container
546  variables:
547    IMAGE: ubuntu2004
548    CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
549                    --enable-trace-backends=ftrace
550    MAKE_CHECK_ARGS: check-unit
551
552# Check our reduced build configurations
553build-without-default-devices:
554  extends: .native_build_job_template
555  needs:
556    job: amd64-centos8-container
557  variables:
558    IMAGE: centos8
559    CONFIGURE_ARGS: --without-default-devices --disable-user
560
561build-without-default-features:
562  extends: .native_build_job_template
563  needs:
564    job: amd64-fedora-container
565  variables:
566    IMAGE: fedora
567    CONFIGURE_ARGS:
568      --without-default-features
569      --disable-capstone
570      --disable-pie
571      --disable-qom-cast-debug
572      --disable-strip
573    TARGETS: avr-softmmu i386-softmmu mips64-softmmu s390x-softmmu sh4-softmmu
574      sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
575    MAKE_CHECK_ARGS: check-unit check-qtest SPEED=slow
576
577build-libvhost-user:
578  extends: .base_job_template
579  stage: build
580  image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
581  needs:
582    job: amd64-fedora-container
583  script:
584    - mkdir subprojects/libvhost-user/build
585    - cd subprojects/libvhost-user/build
586    - meson
587    - ninja
588
589# No targets are built here, just tools, docs, and unit tests. This
590# also feeds into the eventual documentation deployment steps later
591build-tools-and-docs-debian:
592  extends: .native_build_job_template
593  needs:
594    job: amd64-debian-container
595    # when running on 'master' we use pre-existing container
596    optional: true
597  variables:
598    IMAGE: debian-amd64
599    MAKE_CHECK_ARGS: check-unit ctags TAGS cscope
600    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
601    QEMU_JOB_PUBLISH: 1
602  artifacts:
603    expire_in: 2 days
604    paths:
605      - build
606
607# Prepare for GitLab pages deployment. Anything copied into the
608# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
609#
610# GitLab publishes from any branch that triggers a CI pipeline
611#
612# For the main repo we don't want to publish from 'staging'
613# since that content may not be pushed, nor do we wish to
614# publish from 'stable-NNN' branches as that content is outdated.
615# Thus we restrict to just the default branch
616#
617# For contributor forks we want to publish from any repo so
618# that users can see the results of their commits, regardless
619# of what topic branch they're currently using
620pages:
621  extends: .base_job_template
622  image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
623  stage: test
624  needs:
625    - job: build-tools-and-docs-debian
626  script:
627    - mkdir -p public
628    # HTML-ised source tree
629    - make gtags
630    - htags -anT --tree-view=filetree -m qemu_init
631        -t "Welcome to the QEMU sourcecode"
632    - mv HTML public/src
633    # Project documentation
634    - make -C build install DESTDIR=$(pwd)/temp-install
635    - mv temp-install/usr/local/share/doc/qemu/* public/
636  artifacts:
637    paths:
638      - public
639  variables:
640    QEMU_JOB_PUBLISH: 1
641