target/loongarch: Add CSRs definition
[qemu.git] / .gitlab-ci.d / buildtest.yml
blob544385f5bee1efe42494559b8629be1255122358
1 include:
2   - local: '/.gitlab-ci.d/buildtest-template.yml'
4 build-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
20 check-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
29 avocado-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
38 build-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         --enable-capstone
46     TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
47       microblazeel-softmmu mips64el-softmmu
48     MAKE_CHECK_ARGS: check-build
49   artifacts:
50     expire_in: 2 days
51     paths:
52       - build
54 check-system-ubuntu:
55   extends: .native_test_job_template
56   needs:
57     - job: build-system-ubuntu
58       artifacts: true
59   variables:
60     IMAGE: ubuntu2004
61     MAKE_CHECK_ARGS: check
63 avocado-system-ubuntu:
64   extends: .avocado_test_job_template
65   needs:
66     - job: build-system-ubuntu
67       artifacts: true
68   variables:
69     IMAGE: ubuntu2004
70     MAKE_CHECK_ARGS: check-avocado
72 build-system-debian:
73   extends: .native_build_job_template
74   needs:
75     job: amd64-debian-container
76   variables:
77     IMAGE: debian-amd64
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
86 check-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
95 avocado-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
104 crash-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
116 build-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              --enable-fdt=system --enable-slirp=system --enable-capstone
124     TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
125       xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
126     MAKE_CHECK_ARGS: check-build
127   artifacts:
128     expire_in: 2 days
129     paths:
130       - build
132 check-system-fedora:
133   extends: .native_test_job_template
134   needs:
135     - job: build-system-fedora
136       artifacts: true
137   variables:
138     IMAGE: fedora
139     MAKE_CHECK_ARGS: check
141 avocado-system-fedora:
142   extends: .avocado_test_job_template
143   needs:
144     - job: build-system-fedora
145       artifacts: true
146   variables:
147     IMAGE: fedora
148     MAKE_CHECK_ARGS: check-avocado
150 crash-test-fedora:
151   extends: .native_test_job_template
152   needs:
153     - job: build-system-fedora
154       artifacts: true
155   variables:
156     IMAGE: fedora
157   script:
158     - cd build
159     - make check-venv
160     - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc
161     - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32
163 build-system-centos:
164   extends: .native_build_job_template
165   needs:
166     job: amd64-centos8-container
167   variables:
168     IMAGE: centos8
169     CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
170       --enable-modules --enable-trace-backends=dtrace --enable-docs
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
179 check-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
188 avocado-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
197 build-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
211 check-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
220 avocado-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
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)
237 build-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
260 build-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
269 build-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
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.
281 build-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
292 # Only build the softmmu targets we have check-tcg tests for
293 build-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
303 # We build tricore in a very minimal tricore only container
304 build-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
314 clang-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
326 clang-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
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
341 # Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together
342 # with QEMU and linked as a static library to avoid false positives in CFI checks.
343 # This can be accomplished by using -enable-slirp=git, which avoids the use of
344 # a system-wide version of the library
346 # Split in three sets of build/check/avocado to limit the execution time of each
347 # job
348 build-cfi-aarch64:
349   extends: .native_build_job_template
350   needs:
351   - job: amd64-fedora-container
352   variables:
353     LD_JOBS: 1
354     AR: llvm-ar
355     IMAGE: fedora
356     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
357       --enable-safe-stack --enable-slirp=git
358     TARGETS: aarch64-softmmu
359     MAKE_CHECK_ARGS: check-build
360   timeout: 70m
361   artifacts:
362     expire_in: 2 days
363     paths:
364       - build
365   variables:
366     # FIXME: This job is often failing, likely due to out-of-memory problems in
367     # the constrained containers of the shared runners. Thus this is marked as
368     # skipped until the situation has been solved.
369     QEMU_JOB_SKIPPED: 1
371 check-cfi-aarch64:
372   extends: .native_test_job_template
373   needs:
374     - job: build-cfi-aarch64
375       artifacts: true
376   variables:
377     IMAGE: fedora
378     MAKE_CHECK_ARGS: check
380 avocado-cfi-aarch64:
381   extends: .avocado_test_job_template
382   needs:
383     - job: build-cfi-aarch64
384       artifacts: true
385   variables:
386     IMAGE: fedora
387     MAKE_CHECK_ARGS: check-avocado
389 build-cfi-ppc64-s390x:
390   extends: .native_build_job_template
391   needs:
392   - job: amd64-fedora-container
393   variables:
394     LD_JOBS: 1
395     AR: llvm-ar
396     IMAGE: fedora
397     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
398       --enable-safe-stack --enable-slirp=git
399     TARGETS: ppc64-softmmu s390x-softmmu
400     MAKE_CHECK_ARGS: check-build
401   timeout: 70m
402   artifacts:
403     expire_in: 2 days
404     paths:
405       - build
406   variables:
407     # FIXME: This job is often failing, likely due to out-of-memory problems in
408     # the constrained containers of the shared runners. Thus this is marked as
409     # skipped until the situation has been solved.
410     QEMU_JOB_SKIPPED: 1
412 check-cfi-ppc64-s390x:
413   extends: .native_test_job_template
414   needs:
415     - job: build-cfi-ppc64-s390x
416       artifacts: true
417   variables:
418     IMAGE: fedora
419     MAKE_CHECK_ARGS: check
421 avocado-cfi-ppc64-s390x:
422   extends: .avocado_test_job_template
423   needs:
424     - job: build-cfi-ppc64-s390x
425       artifacts: true
426   variables:
427     IMAGE: fedora
428     MAKE_CHECK_ARGS: check-avocado
430 build-cfi-x86_64:
431   extends: .native_build_job_template
432   needs:
433   - job: amd64-fedora-container
434   variables:
435     LD_JOBS: 1
436     AR: llvm-ar
437     IMAGE: fedora
438     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
439       --enable-safe-stack --enable-slirp=git
440     TARGETS: x86_64-softmmu
441     MAKE_CHECK_ARGS: check-build
442   timeout: 70m
443   artifacts:
444     expire_in: 2 days
445     paths:
446       - build
448 check-cfi-x86_64:
449   extends: .native_test_job_template
450   needs:
451     - job: build-cfi-x86_64
452       artifacts: true
453   variables:
454     IMAGE: fedora
455     MAKE_CHECK_ARGS: check
457 avocado-cfi-x86_64:
458   extends: .avocado_test_job_template
459   needs:
460     - job: build-cfi-x86_64
461       artifacts: true
462   variables:
463     IMAGE: fedora
464     MAKE_CHECK_ARGS: check-avocado
466 tsan-build:
467   extends: .native_build_job_template
468   needs:
469     job: amd64-ubuntu2004-container
470   variables:
471     IMAGE: ubuntu2004
472     CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
473           --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system
474     TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
475     MAKE_CHECK_ARGS: bench V=1
477 # gprof/gcov are GCC features
478 build-gprof-gcov:
479   extends: .native_build_job_template
480   needs:
481     job: amd64-ubuntu2004-container
482   variables:
483     IMAGE: ubuntu2004
484     CONFIGURE_ARGS: --enable-gprof --enable-gcov
485     TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
486   artifacts:
487     expire_in: 1 days
488     paths:
489       - build
491 check-gprof-gcov:
492   extends: .native_test_job_template
493   needs:
494     - job: build-gprof-gcov
495       artifacts: true
496   variables:
497     IMAGE: ubuntu2004
498     MAKE_CHECK_ARGS: check
499   after_script:
500     - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
502 build-oss-fuzz:
503   extends: .native_build_job_template
504   needs:
505     job: amd64-fedora-container
506   variables:
507     IMAGE: fedora
508   script:
509     - mkdir build-oss-fuzz
510     - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
511       ./scripts/oss-fuzz/build.sh
512     - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
513     - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
514                       | grep -v slirp); do
515         grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
516         echo Testing ${fuzzer} ... ;
517         "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
518       done
520 build-tci:
521   extends: .native_build_job_template
522   needs:
523     job: amd64-debian-user-cross-container
524   variables:
525     IMAGE: debian-all-test-cross
526   script:
527     - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64"
528     - mkdir build
529     - cd build
530     - ../configure --enable-tcg-interpreter
531         --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
532     - make -j"$JOBS"
533     - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
534     - for tg in $TARGETS ; do
535         export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
536         ./tests/qtest/boot-serial-test || exit 1 ;
537         ./tests/qtest/cdrom-test || exit 1 ;
538       done
539     - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
540     - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
541     - make check-tcg
543 # Alternate coroutines implementations are only really of interest to KVM users
544 # However we can't test against KVM on Gitlab-CI so we can only run unit tests
545 build-coroutine-sigaltstack:
546   extends: .native_build_job_template
547   needs:
548     job: amd64-ubuntu2004-container
549   variables:
550     IMAGE: ubuntu2004
551     CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
552                     --enable-trace-backends=ftrace
553     MAKE_CHECK_ARGS: check-unit
555 # Check our reduced build configurations
556 build-without-default-devices:
557   extends: .native_build_job_template
558   needs:
559     job: amd64-centos8-container
560   variables:
561     IMAGE: centos8
562     CONFIGURE_ARGS: --without-default-devices --disable-user
564 build-without-default-features:
565   extends: .native_build_job_template
566   needs:
567     job: amd64-fedora-container
568   variables:
569     IMAGE: fedora
570     CONFIGURE_ARGS:
571       --without-default-features
572       --disable-capstone
573       --disable-pie
574       --disable-qom-cast-debug
575       --disable-slirp
576       --disable-strip
577     TARGETS: avr-softmmu i386-softmmu mips64-softmmu s390x-softmmu sh4-softmmu
578       sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
579     MAKE_CHECK_ARGS: check-unit check-qtest SPEED=slow
581 build-libvhost-user:
582   extends: .base_job_template
583   stage: build
584   image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
585   needs:
586     job: amd64-fedora-container
587   script:
588     - mkdir subprojects/libvhost-user/build
589     - cd subprojects/libvhost-user/build
590     - meson
591     - ninja
593 # No targets are built here, just tools, docs, and unit tests. This
594 # also feeds into the eventual documentation deployment steps later
595 build-tools-and-docs-debian:
596   extends: .native_build_job_template
597   needs:
598     job: amd64-debian-container
599     # when running on 'master' we use pre-existing container
600     optional: true
601   variables:
602     IMAGE: debian-amd64
603     MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
604     CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
605     QEMU_JOB_PUBLISH: 1
606   artifacts:
607     expire_in: 2 days
608     paths:
609       - build
611 # Prepare for GitLab pages deployment. Anything copied into the
612 # "public" directory will be deployed to $USER.gitlab.io/$PROJECT
614 # GitLab publishes from any branch that triggers a CI pipeline
616 # For the main repo we don't want to publish from 'staging'
617 # since that content may not be pushed, nor do we wish to
618 # publish from 'stable-NNN' branches as that content is outdated.
619 # Thus we restrict to just the default branch
621 # For contributor forks we want to publish from any repo so
622 # that users can see the results of their commits, regardless
623 # of what topic branch they're currently using
624 pages:
625   extends: .base_job_template
626   image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
627   stage: test
628   needs:
629     - job: build-tools-and-docs-debian
630   script:
631     - mkdir -p public
632     # HTML-ised source tree
633     - make gtags
634     - htags -anT --tree-view=filetree -m qemu_init
635         -t "Welcome to the QEMU sourcecode"
636     - mv HTML public/src
637     # Project documentation
638     - make -C build install DESTDIR=$(pwd)/temp-install
639     - mv temp-install/usr/local/share/doc/qemu/* public/
640   artifacts:
641     paths:
642       - public
643   variables:
644     QEMU_JOB_PUBLISH: 1