target/mips: Inline cpu_state_reset() in mips_cpu_reset()
[qemu/kevin.git] / .gitlab-ci.yml
blob4532f1718a2f6ec9a717c43b4fa6bf7fb0d91d7f
1 # Currently we have two build stages after our containers are built:
2 #  - build (for traditional build and test or first stage build)
3 #  - test (for test stages, using build artefacts from a build stage)
4 stages:
5   - containers
6   - containers-layer2
7   - build
8   - test
10 include:
11   - local: '/.gitlab-ci.d/edk2.yml'
12   - local: '/.gitlab-ci.d/opensbi.yml'
13   - local: '/.gitlab-ci.d/containers.yml'
14   - local: '/.gitlab-ci.d/crossbuilds.yml'
16 .native_build_job_template: &native_build_job_definition
17   stage: build
18   image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
19   before_script:
20     - JOBS=$(expr $(nproc) + 1)
21     - sed -i s,git.qemu.org/git,gitlab.com/qemu-project, .gitmodules
22   script:
23     - mkdir build
24     - cd build
25     - if test -n "$TARGETS";
26       then
27         ../configure --enable-werror $CONFIGURE_ARGS --target-list="$TARGETS" ;
28       else
29         ../configure --enable-werror $CONFIGURE_ARGS ;
30       fi || { cat config.log meson-logs/meson-log.txt && exit 1; }
31     - make -j"$JOBS"
32     - if test -n "$MAKE_CHECK_ARGS";
33       then
34         make -j"$JOBS" $MAKE_CHECK_ARGS ;
35       fi
37 .native_test_job_template: &native_test_job_definition
38   stage: test
39   image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
40   script:
41     - cd build
42     - find . -type f -exec touch {} +
43     - make $MAKE_CHECK_ARGS
45 .acceptance_template: &acceptance_definition
46   cache:
47     key: "${CI_JOB_NAME}-cache"
48     paths:
49       - ${CI_PROJECT_DIR}/avocado-cache
50     policy: pull-push
51   artifacts:
52     name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
53     when: always
54     expire_in: 2 days
55     paths:
56       - build/tests/results/latest/results.xml
57       - build/tests/results/latest/test-results
58     reports:
59       junit: build/tests/results/latest/results.xml
60   before_script:
61     - mkdir -p ~/.config/avocado
62     - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf
63     - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']"
64            >> ~/.config/avocado/avocado.conf
65     - echo -e '[job.output.testlogs]\nstatuses = ["FAIL"]'
66            >> ~/.config/avocado/avocado.conf
67     - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then
68         du -chs ${CI_PROJECT_DIR}/avocado-cache ;
69       fi
70     - export AVOCADO_ALLOW_UNTRUSTED_CODE=1
71   after_script:
72     - cd build
73     - du -chs ${CI_PROJECT_DIR}/avocado-cache
75 build-system-ubuntu:
76   <<: *native_build_job_definition
77   variables:
78     IMAGE: ubuntu2004
79     TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
80       moxie-softmmu microblazeel-softmmu mips64el-softmmu
81     MAKE_CHECK_ARGS: check-build
82     CONFIGURE_ARGS: --enable-docs
83   artifacts:
84     expire_in: 2 days
85     paths:
86       - build
88 check-system-ubuntu:
89   <<: *native_test_job_definition
90   needs:
91     - job: build-system-ubuntu
92       artifacts: true
93   variables:
94     IMAGE: ubuntu2004
95     MAKE_CHECK_ARGS: check
97 acceptance-system-ubuntu:
98   <<: *native_test_job_definition
99   needs:
100     - job: build-system-ubuntu
101       artifacts: true
102   variables:
103     IMAGE: ubuntu2004
104     MAKE_CHECK_ARGS: check-acceptance
105   <<: *acceptance_definition
107 build-system-debian:
108   <<: *native_build_job_definition
109   variables:
110     IMAGE: debian-amd64
111     TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
112       riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
113     MAKE_CHECK_ARGS: check-build
114     CONFIGURE_ARGS: --enable-docs
115   artifacts:
116     expire_in: 2 days
117     paths:
118       - build
120 check-system-debian:
121   <<: *native_test_job_definition
122   needs:
123     - job: build-system-debian
124       artifacts: true
125   variables:
126     IMAGE: debian-amd64
127     MAKE_CHECK_ARGS: check
129 acceptance-system-debian:
130   <<: *native_test_job_definition
131   needs:
132     - job: build-system-debian
133       artifacts: true
134   variables:
135     IMAGE: debian-amd64
136     MAKE_CHECK_ARGS: check-acceptance
137   <<: *acceptance_definition
139 build-system-fedora:
140   <<: *native_build_job_definition
141   variables:
142     IMAGE: fedora
143     CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
144     TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
145       xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
146     MAKE_CHECK_ARGS: check-build
147   artifacts:
148     expire_in: 2 days
149     paths:
150       - build
152 check-system-fedora:
153   <<: *native_test_job_definition
154   needs:
155     - job: build-system-fedora
156       artifacts: true
157   variables:
158     IMAGE: fedora
159     MAKE_CHECK_ARGS: check
161 acceptance-system-fedora:
162   <<: *native_test_job_definition
163   needs:
164     - job: build-system-fedora
165       artifacts: true
166   variables:
167     IMAGE: fedora
168     MAKE_CHECK_ARGS: check-acceptance
169   <<: *acceptance_definition
171 build-system-centos:
172   <<: *native_build_job_definition
173   variables:
174     IMAGE: centos8
175     CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
176     TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
177       x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
178     MAKE_CHECK_ARGS: check-build
179   artifacts:
180     expire_in: 2 days
181     paths:
182       - build
184 check-system-centos:
185   <<: *native_test_job_definition
186   needs:
187     - job: build-system-centos
188       artifacts: true
189   variables:
190     IMAGE: centos8
191     MAKE_CHECK_ARGS: check
193 acceptance-system-centos:
194   <<: *native_test_job_definition
195   needs:
196     - job: build-system-centos
197       artifacts: true
198   variables:
199     IMAGE: centos8
200     MAKE_CHECK_ARGS: check-acceptance
201   <<: *acceptance_definition
203 build-system-opensuse:
204   <<: *native_build_job_definition
205   variables:
206     IMAGE: opensuse-leap
207     TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
208     MAKE_CHECK_ARGS: check-build
209   artifacts:
210     expire_in: 2 days
211     paths:
212       - build
214 check-system-opensuse:
215   <<: *native_test_job_definition
216   needs:
217     - job: build-system-opensuse
218       artifacts: true
219   variables:
220     IMAGE: opensuse-leap
221     MAKE_CHECK_ARGS: check
223 acceptance-system-opensuse:
224    <<: *native_test_job_definition
225    needs:
226      - job: build-system-opensuse
227        artifacts: true
228    variables:
229      IMAGE: opensuse-leap
230      MAKE_CHECK_ARGS: check-acceptance
231    <<: *acceptance_definition
234 build-disabled:
235   <<: *native_build_job_definition
236   variables:
237     IMAGE: fedora
238     CONFIGURE_ARGS:
239       --disable-attr
240       --disable-auth-pam
241       --disable-avx2
242       --disable-bochs
243       --disable-brlapi
244       --disable-bzip2
245       --disable-cap-ng
246       --disable-capstone
247       --disable-cloop
248       --disable-coroutine-pool
249       --disable-curl
250       --disable-curses
251       --disable-dmg
252       --disable-docs
253       --disable-gcrypt
254       --disable-glusterfs
255       --disable-gnutls
256       --disable-gtk
257       --disable-guest-agent
258       --disable-iconv
259       --disable-keyring
260       --disable-kvm
261       --disable-libiscsi
262       --disable-libpmem
263       --disable-libssh
264       --disable-libudev
265       --disable-libusb
266       --disable-libxml2
267       --disable-linux-aio
268       --disable-live-block-migration
269       --disable-lzo
270       --disable-malloc-trim
271       --disable-mpath
272       --disable-nettle
273       --disable-numa
274       --disable-opengl
275       --disable-parallels
276       --disable-pie
277       --disable-qcow1
278       --disable-qed
279       --disable-qom-cast-debug
280       --disable-rbd
281       --disable-rdma
282       --disable-replication
283       --disable-sdl
284       --disable-seccomp
285       --disable-sheepdog
286       --disable-slirp
287       --disable-smartcard
288       --disable-snappy
289       --disable-sparse
290       --disable-spice
291       --disable-strip
292       --disable-tpm
293       --disable-usb-redir
294       --disable-vdi
295       --disable-vhost-crypto
296       --disable-vhost-net
297       --disable-vhost-scsi
298       --disable-vhost-user
299       --disable-vhost-vdpa
300       --disable-vhost-vsock
301       --disable-virglrenderer
302       --disable-vnc
303       --disable-vte
304       --disable-vvfat
305       --disable-xen
306       --disable-zstd
307     TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
308       s390x-softmmu i386-linux-user
309     MAKE_CHECK_ARGS: check-qtest SPEED=slow
311 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
312 # the configure script. The container doesn't contain Xen headers so
313 # Xen accelerator is not detected / selected. As result it build the
314 # i386-softmmu and x86_64-softmmu with KVM being the single accelerator
315 # available.
316 build-tcg-disabled:
317   <<: *native_build_job_definition
318   variables:
319     IMAGE: centos8
320   script:
321     - mkdir build
322     - cd build
323     - ../configure --disable-tcg --audio-drv-list="" || { cat config.log meson-logs/meson-log.txt && exit 1; }
324     - make -j"$JOBS"
325     - make check-unit
326     - make check-qapi-schema
327     - cd tests/qemu-iotests/
328     - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
329             052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
330             170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
331     - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
332             124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
333             208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
334             260 261 262 263 264 270 272 273 277 279
336 build-user:
337   <<: *native_build_job_definition
338   variables:
339     IMAGE: debian-all-test-cross
340     CONFIGURE_ARGS: --disable-tools --disable-system
341     MAKE_CHECK_ARGS: check-tcg
343 build-user-static:
344   <<: *native_build_job_definition
345   variables:
346     IMAGE: debian-all-test-cross
347     CONFIGURE_ARGS: --disable-tools --disable-system --static
348     MAKE_CHECK_ARGS: check-tcg
350 # Only build the softmmu targets we have check-tcg tests for
351 build-some-softmmu:
352   <<: *native_build_job_definition
353   variables:
354     IMAGE: debian-all-test-cross
355     CONFIGURE_ARGS: --disable-tools --enable-debug-tcg
356     TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
357     MAKE_CHECK_ARGS: check-tcg
359 # Run check-tcg against linux-user (with plugins)
360 # we skip sparc64-linux-user until it has been fixed somewhat
361 # we skip cris-linux-user as it doesn't use the common run loop
362 build-user-plugins:
363   <<: *native_build_job_definition
364   variables:
365     IMAGE: debian-all-test-cross
366     CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
367     MAKE_CHECK_ARGS: check-tcg
368   timeout: 1h 30m
370 build-some-softmmu-plugins:
371   <<: *native_build_job_definition
372   variables:
373     IMAGE: debian-all-test-cross
374     CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg
375     TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
376     MAKE_CHECK_ARGS: check-tcg
378 build-clang:
379   <<: *native_build_job_definition
380   variables:
381     IMAGE: fedora
382     CONFIGURE_ARGS: --cc=clang --cxx=clang++
383     TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
384       ppc-softmmu s390x-softmmu arm-linux-user
385     MAKE_CHECK_ARGS: check
387 # These targets are on the way out
388 build-deprecated:
389   <<: *native_build_job_definition
390   variables:
391     IMAGE: debian-all-test-cross
392     CONFIGURE_ARGS: --disable-docs --disable-tools
393     MAKE_CHECK_ARGS: build-tcg
394     TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu
395       unicore32-softmmu
396   artifacts:
397     expire_in: 2 days
398     paths:
399       - build
401 # We split the check-tcg step as test failures are expected but we still
402 # want to catch the build breaking.
403 check-deprecated:
404   <<: *native_test_job_definition
405   needs:
406     - job: build-deprecated
407       artifacts: true
408   variables:
409     IMAGE: debian-all-test-cross
410     MAKE_CHECK_ARGS: check-tcg
411   allow_failure: true
413 build-oss-fuzz:
414   <<: *native_build_job_definition
415   variables:
416     IMAGE: fedora
417   script:
418     - mkdir build-oss-fuzz
419     - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
420       ./scripts/oss-fuzz/build.sh
421     - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
422     - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
423                       | grep -v slirp); do
424         grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
425         echo Testing ${fuzzer} ... ;
426         "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
427       done
428     # Unrelated to fuzzer: run some tests with -fsanitize=address
429     - cd build-oss-fuzz && make check-qtest-i386 check-unit
431 build-tci:
432   <<: *native_build_job_definition
433   variables:
434     IMAGE: fedora
435   script:
436     - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
437     - mkdir build
438     - cd build
439     - ../configure --enable-tcg-interpreter
440         --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
441     - make -j"$JOBS"
442     - make run-tcg-tests-x86_64-softmmu
443     - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
444     - for tg in $TARGETS ; do
445         export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
446         ./tests/qtest/boot-serial-test || exit 1 ;
447         ./tests/qtest/cdrom-test || exit 1 ;
448       done
449     - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
450     - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
452 # Alternate coroutines implementations are only really of interest to KVM users
453 # However we can't test against KVM on Gitlab-CI so we can only run unit tests
454 build-coroutine-ucontext:
455   <<: *native_build_job_definition
456   variables:
457     IMAGE: ubuntu2004
458     CONFIGURE_ARGS: --with-coroutine=ucontext --disable-tcg
459     MAKE_CHECK_ARGS: check-unit
461 build-coroutine-sigaltstack:
462   <<: *native_build_job_definition
463   variables:
464     IMAGE: ubuntu2004
465     CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
466     MAKE_CHECK_ARGS: check-unit
468 # Most jobs test latest gcrypt or nettle builds
470 # These jobs test old gcrypt and nettle from RHEL7
471 # which had some API differences.
472 build-crypto-old-nettle:
473   <<: *native_build_job_definition
474   variables:
475     IMAGE: centos7
476     TARGETS: x86_64-softmmu x86_64-linux-user
477     CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
478     MAKE_CHECK_ARGS: check-build
479   artifacts:
480     paths:
481       - build
483 check-crypto-old-nettle:
484   <<: *native_test_job_definition
485   needs:
486     - job: build-crypto-old-nettle
487       artifacts: true
488   variables:
489     IMAGE: centos7
490     MAKE_CHECK_ARGS: check
493 build-crypto-old-gcrypt:
494   <<: *native_build_job_definition
495   variables:
496     IMAGE: centos7
497     TARGETS: x86_64-softmmu x86_64-linux-user
498     CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
499     MAKE_CHECK_ARGS: check-build
500   artifacts:
501     paths:
502       - build
504 check-crypto-old-gcrypt:
505   <<: *native_test_job_definition
506   needs:
507     - job: build-crypto-old-gcrypt
508       artifacts: true
509   variables:
510     IMAGE: centos7
511     MAKE_CHECK_ARGS: check
514 build-crypto-only-gnutls:
515   <<: *native_build_job_definition
516   variables:
517     IMAGE: centos7
518     TARGETS: x86_64-softmmu x86_64-linux-user
519     CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
520     MAKE_CHECK_ARGS: check-build
521   artifacts:
522     paths:
523       - build
525 check-crypto-only-gnutls:
526   <<: *native_test_job_definition
527   needs:
528     - job: build-crypto-only-gnutls
529       artifacts: true
530   variables:
531     IMAGE: centos7
532     MAKE_CHECK_ARGS: check
534 # We don't need to exercise every backend with every front-end
535 build-trace-multi-user:
536   <<: *native_build_job_definition
537   variables:
538     IMAGE: ubuntu2004
539     CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system
541 build-trace-ftrace-system:
542   <<: *native_build_job_definition
543   variables:
544     IMAGE: ubuntu2004
545     CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu
547 build-trace-ust-system:
548   <<: *native_build_job_definition
549   variables:
550     IMAGE: ubuntu2004
551     CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu
553 # Check our reduced build configurations
554 build-without-default-devices:
555   <<: *native_build_job_definition
556   variables:
557     IMAGE: centos8
558     CONFIGURE_ARGS: --without-default-devices --disable-user
560 build-without-default-features:
561   <<: *native_build_job_definition
562   variables:
563     IMAGE: debian-amd64
564     CONFIGURE_ARGS: --without-default-features --disable-user
565     MAKE_CHECK_ARGS: check-unit
567 check-patch:
568   stage: build
569   image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
570   script: .gitlab-ci.d/check-patch.py
571   except:
572     variables:
573       - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
574   variables:
575     GIT_DEPTH: 1000
576   allow_failure: true
578 check-dco:
579   stage: build
580   image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
581   script: .gitlab-ci.d/check-dco.py
582   except:
583     variables:
584       - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
585   variables:
586     GIT_DEPTH: 1000
588 build-libvhost-user:
589   stage: build
590   image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
591   before_script:
592     - dnf install -y meson ninja-build
593   script:
594     - mkdir subprojects/libvhost-user/build
595     - cd subprojects/libvhost-user/build
596     - meson
597     - ninja
599 pages:
600   image: $CI_REGISTRY_IMAGE/qemu/ubuntu2004:latest
601   stage: test
602   needs:
603     - job: build-system-ubuntu
604       artifacts: true
605   script:
606     - mkdir public
607     - mv build/docs/index.html public/
608     - for i in devel interop specs system tools user ; do mv build/docs/$i public/ ; done
609   artifacts:
610     paths:
611       - public