xref: /qemu/.gitlab-ci.d/buildtest.yml (revision b83a80e8)
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-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
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    - scripts/device-crash-test -q ./qemu-system-i386
113
114build-system-fedora:
115  extends: .native_build_job_template
116  needs:
117    job: amd64-fedora-container
118  variables:
119    IMAGE: fedora
120    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
121             --enable-fdt=system --enable-slirp=system --enable-capstone=system
122    TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
123      xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
124    MAKE_CHECK_ARGS: check-build
125  artifacts:
126    expire_in: 2 days
127    paths:
128      - build
129
130check-system-fedora:
131  extends: .native_test_job_template
132  needs:
133    - job: build-system-fedora
134      artifacts: true
135  variables:
136    IMAGE: fedora
137    MAKE_CHECK_ARGS: check
138
139avocado-system-fedora:
140  extends: .avocado_test_job_template
141  needs:
142    - job: build-system-fedora
143      artifacts: true
144  variables:
145    IMAGE: fedora
146    MAKE_CHECK_ARGS: check-avocado
147
148crash-test-fedora:
149  extends: .native_test_job_template
150  needs:
151    - job: build-system-fedora
152      artifacts: true
153  variables:
154    IMAGE: fedora
155  script:
156    - cd build
157    - scripts/device-crash-test -q ./qemu-system-ppc
158    - scripts/device-crash-test -q ./qemu-system-riscv32
159
160build-system-centos:
161  extends: .native_build_job_template
162  needs:
163    job: amd64-centos8-container
164  variables:
165    IMAGE: centos8
166    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
167      --enable-modules --enable-trace-backends=dtrace --enable-docs
168    TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
169      x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
170    MAKE_CHECK_ARGS: check-build
171  artifacts:
172    expire_in: 2 days
173    paths:
174      - build
175
176check-system-centos:
177  extends: .native_test_job_template
178  needs:
179    - job: build-system-centos
180      artifacts: true
181  variables:
182    IMAGE: centos8
183    MAKE_CHECK_ARGS: check
184
185avocado-system-centos:
186  extends: .avocado_test_job_template
187  needs:
188    - job: build-system-centos
189      artifacts: true
190  variables:
191    IMAGE: centos8
192    MAKE_CHECK_ARGS: check-avocado
193
194build-system-opensuse:
195  extends: .native_build_job_template
196  needs:
197    job: amd64-opensuse-leap-container
198  variables:
199    IMAGE: opensuse-leap
200    CONFIGURE_ARGS: --enable-fdt=system
201    TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
202    MAKE_CHECK_ARGS: check-build
203  artifacts:
204    expire_in: 2 days
205    paths:
206      - build
207
208check-system-opensuse:
209  extends: .native_test_job_template
210  needs:
211    - job: build-system-opensuse
212      artifacts: true
213  variables:
214    IMAGE: opensuse-leap
215    MAKE_CHECK_ARGS: check
216
217avocado-system-opensuse:
218  extends: .avocado_test_job_template
219  needs:
220    - job: build-system-opensuse
221      artifacts: true
222  variables:
223    IMAGE: opensuse-leap
224    MAKE_CHECK_ARGS: check-avocado
225
226
227# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
228# the configure script. The container doesn't contain Xen headers so
229# Xen accelerator is not detected / selected. As result it build the
230# i386-softmmu and x86_64-softmmu with KVM being the single accelerator
231# available.
232# Also use a different coroutine implementation (which is only really of
233# interest to KVM users, i.e. with TCG disabled)
234build-tcg-disabled:
235  extends: .native_build_job_template
236  needs:
237    job: amd64-centos8-container
238  variables:
239    IMAGE: centos8
240  script:
241    - mkdir build
242    - cd build
243    - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
244      || { cat config.log meson-logs/meson-log.txt && exit 1; }
245    - make -j"$JOBS"
246    - make check-unit
247    - make check-qapi-schema
248    - cd tests/qemu-iotests/
249    - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
250            052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
251            170 171 183 184 192 194 208 221 226 227 236 253 277 image-fleecing
252    - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
253            124 132 139 142 144 145 151 152 155 157 165 194 196 200 202
254            208 209 216 218 227 234 246 247 248 250 254 255 257 258
255            260 261 262 263 264 270 272 273 277 279 image-fleecing
256
257build-user:
258  extends: .native_build_job_template
259  needs:
260    job: amd64-debian-user-cross-container
261  variables:
262    IMAGE: debian-all-test-cross
263    CONFIGURE_ARGS: --disable-tools --disable-system
264    MAKE_CHECK_ARGS: check-tcg
265
266build-user-static:
267  extends: .native_build_job_template
268  needs:
269    job: amd64-debian-user-cross-container
270  variables:
271    IMAGE: debian-all-test-cross
272    CONFIGURE_ARGS: --disable-tools --disable-system --static
273    MAKE_CHECK_ARGS: check-tcg
274
275# Because the hexagon cross-compiler takes so long to build we don't rely
276# on the CI system to build it and hence this job has an optional dependency
277# declared. The image is manually uploaded.
278build-user-hexagon:
279  extends: .native_build_job_template
280  needs:
281    job: hexagon-cross-container
282    optional: true
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
320      ppc-softmmu s390x-softmmu
321    MAKE_CHECK_ARGS: check-qtest check-tcg
322
323clang-user:
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: --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, slirp needs to be compiled together
339# with QEMU and linked as a static library to avoid false positives in CFI checks.
340# This can be accomplished by using -enable-slirp=git, which avoids the use of
341# a system-wide version of the library
342#
343# Split in three sets of build/check/avocado to limit the execution time of each
344# job
345build-cfi-aarch64:
346  extends: .native_build_job_template
347  needs:
348  - job: amd64-fedora-container
349  variables:
350    LD_JOBS: 1
351    AR: llvm-ar
352    IMAGE: fedora
353    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
354      --enable-safe-stack --enable-slirp=git
355    TARGETS: aarch64-softmmu
356    MAKE_CHECK_ARGS: check-build
357  timeout: 70m
358  artifacts:
359    expire_in: 2 days
360    paths:
361      - build
362  rules:
363    # FIXME: This job is often failing, likely due to out-of-memory problems in
364    # the constrained containers of the shared runners. Thus this is marked as
365    # manual until the situation has been solved.
366    - when: manual
367      allow_failure: true
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 --enable-slirp=git
397    TARGETS: ppc64-softmmu s390x-softmmu
398    MAKE_CHECK_ARGS: check-build
399  timeout: 70m
400  artifacts:
401    expire_in: 2 days
402    paths:
403      - build
404  rules:
405    # FIXME: This job is often failing, likely due to out-of-memory problems in
406    # the constrained containers of the shared runners. Thus this is marked as
407    # manual until the situation has been solved.
408    - when: manual
409      allow_failure: true
410
411check-cfi-ppc64-s390x:
412  extends: .native_test_job_template
413  needs:
414    - job: build-cfi-ppc64-s390x
415      artifacts: true
416  variables:
417    IMAGE: fedora
418    MAKE_CHECK_ARGS: check
419
420avocado-cfi-ppc64-s390x:
421  extends: .avocado_test_job_template
422  needs:
423    - job: build-cfi-ppc64-s390x
424      artifacts: true
425  variables:
426    IMAGE: fedora
427    MAKE_CHECK_ARGS: check-avocado
428
429build-cfi-x86_64:
430  extends: .native_build_job_template
431  needs:
432  - job: amd64-fedora-container
433  variables:
434    LD_JOBS: 1
435    AR: llvm-ar
436    IMAGE: fedora
437    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
438      --enable-safe-stack --enable-slirp=git
439    TARGETS: x86_64-softmmu
440    MAKE_CHECK_ARGS: check-build
441  timeout: 70m
442  artifacts:
443    expire_in: 2 days
444    paths:
445      - build
446
447check-cfi-x86_64:
448  extends: .native_test_job_template
449  needs:
450    - job: build-cfi-x86_64
451      artifacts: true
452  variables:
453    IMAGE: fedora
454    MAKE_CHECK_ARGS: check
455
456avocado-cfi-x86_64:
457  extends: .avocado_test_job_template
458  needs:
459    - job: build-cfi-x86_64
460      artifacts: true
461  variables:
462    IMAGE: fedora
463    MAKE_CHECK_ARGS: check-avocado
464
465tsan-build:
466  extends: .native_build_job_template
467  needs:
468    job: amd64-ubuntu2004-container
469  variables:
470    IMAGE: ubuntu2004
471    CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
472          --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system
473    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
474    MAKE_CHECK_ARGS: bench V=1
475
476# These targets are on the way out
477build-deprecated:
478  extends: .native_build_job_template
479  needs:
480    job: amd64-debian-user-cross-container
481  variables:
482    IMAGE: debian-all-test-cross
483    CONFIGURE_ARGS: --disable-tools
484    MAKE_CHECK_ARGS: build-tcg
485    TARGETS: ppc64abi32-linux-user
486  artifacts:
487    expire_in: 2 days
488    paths:
489      - build
490
491# We split the check-tcg step as test failures are expected but we still
492# want to catch the build breaking.
493check-deprecated:
494  extends: .native_test_job_template
495  needs:
496    - job: build-deprecated
497      artifacts: true
498  variables:
499    IMAGE: debian-all-test-cross
500    MAKE_CHECK_ARGS: check-tcg
501  allow_failure: true
502
503# gprof/gcov are GCC features
504build-gprof-gcov:
505  extends: .native_build_job_template
506  needs:
507    job: amd64-ubuntu2004-container
508  variables:
509    IMAGE: ubuntu2004
510    CONFIGURE_ARGS: --enable-gprof --enable-gcov
511    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
512  artifacts:
513    expire_in: 1 days
514    paths:
515      - build
516
517check-gprof-gcov:
518  extends: .native_test_job_template
519  needs:
520    - job: build-gprof-gcov
521      artifacts: true
522  variables:
523    IMAGE: ubuntu2004
524    MAKE_CHECK_ARGS: check
525  after_script:
526    - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
527
528build-oss-fuzz:
529  extends: .native_build_job_template
530  needs:
531    job: amd64-fedora-container
532  variables:
533    IMAGE: fedora
534  script:
535    - mkdir build-oss-fuzz
536    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
537      ./scripts/oss-fuzz/build.sh
538    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
539    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
540                      | grep -v slirp); do
541        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
542        echo Testing ${fuzzer} ... ;
543        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
544      done
545    # Unrelated to fuzzer: run some tests with -fsanitize=address
546    - cd build-oss-fuzz && make check-qtest-i386 check-unit
547
548build-tci:
549  extends: .native_build_job_template
550  needs:
551    job: amd64-debian-user-cross-container
552  variables:
553    IMAGE: debian-all-test-cross
554  script:
555    - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64"
556    - mkdir build
557    - cd build
558    - ../configure --enable-tcg-interpreter
559        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
560    - make -j"$JOBS"
561    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
562    - for tg in $TARGETS ; do
563        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
564        ./tests/qtest/boot-serial-test || exit 1 ;
565        ./tests/qtest/cdrom-test || exit 1 ;
566      done
567    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
568    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
569    - make check-tcg
570
571# Alternate coroutines implementations are only really of interest to KVM users
572# However we can't test against KVM on Gitlab-CI so we can only run unit tests
573build-coroutine-sigaltstack:
574  extends: .native_build_job_template
575  needs:
576    job: amd64-ubuntu2004-container
577  variables:
578    IMAGE: ubuntu2004
579    CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
580                    --enable-trace-backends=ftrace
581    MAKE_CHECK_ARGS: check-unit
582
583# Check our reduced build configurations
584build-without-default-devices:
585  extends: .native_build_job_template
586  needs:
587    job: amd64-centos8-container
588  variables:
589    IMAGE: centos8
590    CONFIGURE_ARGS: --without-default-devices --disable-user
591
592build-without-default-features:
593  extends: .native_build_job_template
594  needs:
595    job: amd64-fedora-container
596  variables:
597    IMAGE: fedora
598    CONFIGURE_ARGS:
599      --without-default-features
600      --disable-capstone
601      --disable-pie
602      --disable-qom-cast-debug
603      --disable-slirp
604      --disable-strip
605    TARGETS: avr-softmmu i386-softmmu mips64-softmmu s390x-softmmu sh4-softmmu
606      sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
607    MAKE_CHECK_ARGS: check-unit check-qtest SPEED=slow
608
609build-libvhost-user:
610  stage: build
611  image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
612  needs:
613    job: amd64-fedora-container
614  script:
615    - mkdir subprojects/libvhost-user/build
616    - cd subprojects/libvhost-user/build
617    - meson
618    - ninja
619
620# No targets are built here, just tools, docs, and unit tests. This
621# also feeds into the eventual documentation deployment steps later
622build-tools-and-docs-debian:
623  extends: .native_build_job_template
624  needs:
625    job: amd64-debian-container
626  variables:
627    IMAGE: debian-amd64
628    MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
629    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
630  artifacts:
631    expire_in: 2 days
632    paths:
633      - build
634
635# Prepare for GitLab pages deployment. Anything copied into the
636# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
637#
638# GitLab publishes from any branch that triggers a CI pipeline
639#
640# For the main repo we don't want to publish from 'staging'
641# since that content may not be pushed, nor do we wish to
642# publish from 'stable-NNN' branches as that content is outdated.
643# Thus we restrict to just the default branch
644#
645# For contributor forks we want to publish from any repo so
646# that users can see the results of their commits, regardless
647# of what topic branch they're currently using
648pages:
649  image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
650  stage: test
651  needs:
652    - job: build-tools-and-docs-debian
653  script:
654    - mkdir -p public
655    # HTML-ised source tree
656    - make gtags
657    - htags -anT --tree-view=filetree -m qemu_init
658        -t "Welcome to the QEMU sourcecode"
659    - mv HTML public/src
660    # Project documentation
661    - make -C build install DESTDIR=$(pwd)/temp-install
662    - mv temp-install/usr/local/share/doc/qemu/* public/
663  artifacts:
664    paths:
665      - public
666  rules:
667    - if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
668      when: on_success
669    - if: '$CI_PROJECT_NAMESPACE == "qemu-project"'
670      when: never
671    - if: '$CI_PROJECT_NAMESPACE != "qemu-project"'
672      when: on_success
673