xref: /qemu/.gitlab-ci.d/buildtest.yml (revision 84615a19)
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                   --disable-docs --disable-sdl --disable-gtk --disable-vnc
248      || { cat config.log meson-logs/meson-log.txt && exit 1; }
249    - make -j"$JOBS"
250    - make check-unit
251    - make check-qapi-schema
252    - cd tests/qemu-iotests/
253    - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
254            052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
255            170 171 183 184 192 194 208 221 226 227 236 253 277 image-fleecing
256    - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
257            124 132 139 142 144 145 151 152 155 157 165 194 196 200 202
258            208 209 216 218 227 234 246 247 248 250 254 255 257 258
259            260 261 262 263 264 270 272 273 277 279 image-fleecing
260
261build-user:
262  extends: .native_build_job_template
263  needs:
264    job: amd64-debian-user-cross-container
265  variables:
266    IMAGE: debian-all-test-cross
267    CONFIGURE_ARGS: --disable-tools --disable-system
268    MAKE_CHECK_ARGS: check-tcg
269
270build-user-static:
271  extends: .native_build_job_template
272  needs:
273    job: amd64-debian-user-cross-container
274  variables:
275    IMAGE: debian-all-test-cross
276    CONFIGURE_ARGS: --disable-tools --disable-system --static
277    MAKE_CHECK_ARGS: check-tcg
278
279build-user-hexagon:
280  extends: .native_build_job_template
281  needs:
282    job: hexagon-cross-container
283  variables:
284    IMAGE: debian-hexagon-cross
285    TARGETS: hexagon-linux-user
286    CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
287    MAKE_CHECK_ARGS: check-tcg
288
289# Only build the softmmu targets we have check-tcg tests for
290build-some-softmmu:
291  extends: .native_build_job_template
292  needs:
293    job: amd64-debian-user-cross-container
294  variables:
295    IMAGE: debian-all-test-cross
296    CONFIGURE_ARGS: --disable-tools --enable-debug
297    TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
298    MAKE_CHECK_ARGS: check-tcg
299
300# We build tricore in a very minimal tricore only container
301build-tricore-softmmu:
302  extends: .native_build_job_template
303  needs:
304    job: tricore-debian-cross-container
305  variables:
306    IMAGE: debian-tricore-cross
307    CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug
308    TARGETS: tricore-softmmu
309    MAKE_CHECK_ARGS: check-tcg
310
311clang-system:
312  extends: .native_build_job_template
313  needs:
314    job: amd64-fedora-container
315  variables:
316    IMAGE: fedora
317    CONFIGURE_ARGS: --cc=clang --cxx=clang++
318      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
319    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu s390x-softmmu
320    MAKE_CHECK_ARGS: check-qtest check-tcg
321
322clang-user:
323  extends: .native_build_job_template
324  needs:
325    job: amd64-debian-user-cross-container
326  timeout: 70m
327  variables:
328    IMAGE: debian-all-test-cross
329    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
330      --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
331      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
332    MAKE_CHECK_ARGS: check-unit check-tcg
333
334# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
335# On gitlab runners, default value sometimes end up calling 2 lds concurrently and
336# triggers an Out-Of-Memory error
337#
338# Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with
339# CFI builds, and thus have to disable it here.
340#
341# Split in three sets of build/check/avocado to limit the execution time of each
342# job
343build-cfi-aarch64:
344  extends: .native_build_job_template
345  needs:
346  - job: amd64-fedora-container
347  variables:
348    LD_JOBS: 1
349    AR: llvm-ar
350    IMAGE: fedora
351    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
352      --enable-safe-stack --disable-slirp
353    TARGETS: aarch64-softmmu
354    MAKE_CHECK_ARGS: check-build
355    # FIXME: This job is often failing, likely due to out-of-memory problems in
356    # the constrained containers of the shared runners. Thus this is marked as
357    # skipped until the situation has been solved.
358    QEMU_JOB_SKIPPED: 1
359  timeout: 90m
360  artifacts:
361    expire_in: 2 days
362    paths:
363      - build
364
365check-cfi-aarch64:
366  extends: .native_test_job_template
367  needs:
368    - job: build-cfi-aarch64
369      artifacts: true
370  variables:
371    IMAGE: fedora
372    MAKE_CHECK_ARGS: check
373
374avocado-cfi-aarch64:
375  extends: .avocado_test_job_template
376  needs:
377    - job: build-cfi-aarch64
378      artifacts: true
379  variables:
380    IMAGE: fedora
381    MAKE_CHECK_ARGS: check-avocado
382
383build-cfi-ppc64-s390x:
384  extends: .native_build_job_template
385  needs:
386  - job: amd64-fedora-container
387  variables:
388    LD_JOBS: 1
389    AR: llvm-ar
390    IMAGE: fedora
391    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
392      --enable-safe-stack --disable-slirp
393    TARGETS: ppc64-softmmu s390x-softmmu
394    MAKE_CHECK_ARGS: check-build
395    # FIXME: This job is often failing, likely due to out-of-memory problems in
396    # the constrained containers of the shared runners. Thus this is marked as
397    # skipped until the situation has been solved.
398    QEMU_JOB_SKIPPED: 1
399  timeout: 80m
400  artifacts:
401    expire_in: 2 days
402    paths:
403      - build
404
405check-cfi-ppc64-s390x:
406  extends: .native_test_job_template
407  needs:
408    - job: build-cfi-ppc64-s390x
409      artifacts: true
410  variables:
411    IMAGE: fedora
412    MAKE_CHECK_ARGS: check
413
414avocado-cfi-ppc64-s390x:
415  extends: .avocado_test_job_template
416  needs:
417    - job: build-cfi-ppc64-s390x
418      artifacts: true
419  variables:
420    IMAGE: fedora
421    MAKE_CHECK_ARGS: check-avocado
422
423build-cfi-x86_64:
424  extends: .native_build_job_template
425  needs:
426  - job: amd64-fedora-container
427  variables:
428    LD_JOBS: 1
429    AR: llvm-ar
430    IMAGE: fedora
431    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
432      --enable-safe-stack --disable-slirp
433    TARGETS: x86_64-softmmu
434    MAKE_CHECK_ARGS: check-build
435  timeout: 70m
436  artifacts:
437    expire_in: 2 days
438    paths:
439      - build
440
441check-cfi-x86_64:
442  extends: .native_test_job_template
443  needs:
444    - job: build-cfi-x86_64
445      artifacts: true
446  variables:
447    IMAGE: fedora
448    MAKE_CHECK_ARGS: check
449
450avocado-cfi-x86_64:
451  extends: .avocado_test_job_template
452  needs:
453    - job: build-cfi-x86_64
454      artifacts: true
455  variables:
456    IMAGE: fedora
457    MAKE_CHECK_ARGS: check-avocado
458
459tsan-build:
460  extends: .native_build_job_template
461  needs:
462    job: amd64-ubuntu2004-container
463  variables:
464    IMAGE: ubuntu2004
465    CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
466          --enable-trace-backends=ust --enable-fdt=system --disable-slirp
467    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
468    MAKE_CHECK_ARGS: bench V=1
469
470# gprof/gcov are GCC features
471build-gprof-gcov:
472  extends: .native_build_job_template
473  needs:
474    job: amd64-ubuntu2004-container
475  variables:
476    IMAGE: ubuntu2004
477    CONFIGURE_ARGS: --enable-gprof --enable-gcov
478    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
479  artifacts:
480    expire_in: 1 days
481    paths:
482      - build
483
484check-gprof-gcov:
485  extends: .native_test_job_template
486  needs:
487    - job: build-gprof-gcov
488      artifacts: true
489  variables:
490    IMAGE: ubuntu2004
491    MAKE_CHECK_ARGS: check
492  after_script:
493    - cd build
494    - gcovr --xml-pretty --exclude-unreachable-branches --print-summary
495        -o coverage.xml --root ${CI_PROJECT_DIR} . *.p
496  coverage: /^\s*lines:\s*\d+.\d+\%/
497  artifacts:
498    name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
499    expire_in: 2 days
500    reports:
501      coverage_report:
502        coverage_format: cobertura
503        path: build/coverage.xml
504
505build-oss-fuzz:
506  extends: .native_build_job_template
507  needs:
508    job: amd64-fedora-container
509  variables:
510    IMAGE: fedora
511  script:
512    - mkdir build-oss-fuzz
513    - export LSAN_OPTIONS=suppressions=scripts/oss-fuzz/lsan_suppressions.txt
514    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
515      ./scripts/oss-fuzz/build.sh
516    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
517    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
518                      | grep -v slirp); do
519        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
520        echo Testing ${fuzzer} ... ;
521        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
522      done
523
524build-tci:
525  extends: .native_build_job_template
526  needs:
527    job: amd64-debian-user-cross-container
528  variables:
529    IMAGE: debian-all-test-cross
530  script:
531    - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64"
532    - mkdir build
533    - cd build
534    - ../configure --enable-tcg-interpreter --disable-docs --disable-gtk --disable-vnc
535        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)"
536        || { cat config.log meson-logs/meson-log.txt && exit 1; }
537    - make -j"$JOBS"
538    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
539    - for tg in $TARGETS ; do
540        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
541        ./tests/qtest/boot-serial-test || exit 1 ;
542        ./tests/qtest/cdrom-test || exit 1 ;
543      done
544    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
545    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
546    - make check-tcg
547
548# Alternate coroutines implementations are only really of interest to KVM users
549# However we can't test against KVM on Gitlab-CI so we can only run unit tests
550build-coroutine-sigaltstack:
551  extends: .native_build_job_template
552  needs:
553    job: amd64-ubuntu2004-container
554  variables:
555    IMAGE: ubuntu2004
556    CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
557                    --enable-trace-backends=ftrace
558    MAKE_CHECK_ARGS: check-unit
559
560# Check our reduced build configurations
561build-without-defaults:
562  extends: .native_build_job_template
563  needs:
564    job: amd64-centos8-container
565  variables:
566    IMAGE: centos8
567    CONFIGURE_ARGS:
568      --without-default-devices
569      --without-default-features
570      --disable-fdt
571      --disable-pie
572      --disable-qom-cast-debug
573      --disable-strip
574    TARGETS: avr-softmmu mips64-softmmu s390x-softmmu sh4-softmmu
575      sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
576    MAKE_CHECK_ARGS: check-unit check-qtest-avr check-qtest-mips64
577
578build-libvhost-user:
579  extends: .base_job_template
580  stage: build
581  image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
582  needs:
583    job: amd64-fedora-container
584  script:
585    - mkdir subprojects/libvhost-user/build
586    - cd subprojects/libvhost-user/build
587    - meson
588    - ninja
589
590# No targets are built here, just tools, docs, and unit tests. This
591# also feeds into the eventual documentation deployment steps later
592build-tools-and-docs-debian:
593  extends: .native_build_job_template
594  needs:
595    job: amd64-debian-container
596    # when running on 'master' we use pre-existing container
597    optional: true
598  variables:
599    IMAGE: debian-amd64
600    MAKE_CHECK_ARGS: check-unit ctags TAGS cscope
601    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
602    QEMU_JOB_PUBLISH: 1
603  artifacts:
604    expire_in: 2 days
605    paths:
606      - build
607
608# Prepare for GitLab pages deployment. Anything copied into the
609# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
610#
611# GitLab publishes from any branch that triggers a CI pipeline
612#
613# For the main repo we don't want to publish from 'staging'
614# since that content may not be pushed, nor do we wish to
615# publish from 'stable-NNN' branches as that content is outdated.
616# Thus we restrict to just the default branch
617#
618# For contributor forks we want to publish from any repo so
619# that users can see the results of their commits, regardless
620# of what topic branch they're currently using
621pages:
622  extends: .base_job_template
623  image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
624  stage: test
625  needs:
626    - job: build-tools-and-docs-debian
627  script:
628    - mkdir -p public
629    # HTML-ised source tree
630    - make gtags
631    - htags -anT --tree-view=filetree -m qemu_init
632        -t "Welcome to the QEMU sourcecode"
633    - mv HTML public/src
634    # Project documentation
635    - make -C build install DESTDIR=$(pwd)/temp-install
636    - mv temp-install/usr/local/share/doc/qemu/* public/
637  artifacts:
638    paths:
639      - public
640  variables:
641    QEMU_JOB_PUBLISH: 1
642