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