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