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