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)
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
18 image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
20 - JOBS=$(expr $(nproc) + 1)
24 - if test -n "$TARGETS";
26 ../configure --enable-werror $CONFIGURE_ARGS --target-list="$TARGETS" ;
28 ../configure --enable-werror $CONFIGURE_ARGS ;
29 fi || { cat config.log meson-logs/meson-log.txt && exit 1; }
31 - if test -n "$MAKE_CHECK_ARGS";
33 make -j"$JOBS" $MAKE_CHECK_ARGS ;
36 .native_test_job_template: &native_test_job_definition
38 image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
40 - scripts/git-submodule.sh update
41 $(grep GIT_SUBMODULES build/config-host.mak | sed 's/GIT_SUBMODULES=//')
43 - find . -type f -exec touch {} +
44 # Avoid recompiling by hiding ninja with NINJA=":"
45 - make NINJA=":" $MAKE_CHECK_ARGS
47 .acceptance_template: &acceptance_definition
49 key: "${CI_JOB_NAME}-cache"
51 - ${CI_PROJECT_DIR}/avocado-cache
54 name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
58 - build/tests/results/latest/results.xml
59 - build/tests/results/latest/test-results
61 junit: build/tests/results/latest/results.xml
63 - mkdir -p ~/.config/avocado
64 - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf
65 - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']"
66 >> ~/.config/avocado/avocado.conf
67 - echo -e '[job.output.testlogs]\nstatuses = ["FAIL", "INTERRUPT"]'
68 >> ~/.config/avocado/avocado.conf
69 - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then
70 du -chs ${CI_PROJECT_DIR}/avocado-cache ;
72 - export AVOCADO_ALLOW_UNTRUSTED_CODE=1
75 - du -chs ${CI_PROJECT_DIR}/avocado-cache
78 <<: *native_build_job_definition
80 - job: amd64-alpine-container
83 TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
84 moxie-softmmu microblazeel-softmmu mips64el-softmmu
85 MAKE_CHECK_ARGS: check-build
86 CONFIGURE_ARGS: --enable-docs
90 - .git-submodule-status
94 <<: *native_test_job_definition
96 - job: build-system-alpine
100 MAKE_CHECK_ARGS: check
102 acceptance-system-alpine:
103 <<: *native_test_job_definition
105 - job: build-system-alpine
109 MAKE_CHECK_ARGS: check-acceptance
110 <<: *acceptance_definition
113 <<: *native_build_job_definition
115 job: amd64-ubuntu2004-container
118 CONFIGURE_ARGS: --enable-fdt=system --enable-slirp=system
119 TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
120 moxie-softmmu microblazeel-softmmu mips64el-softmmu
121 MAKE_CHECK_ARGS: check-build
128 <<: *native_test_job_definition
130 - job: build-system-ubuntu
134 MAKE_CHECK_ARGS: check
136 acceptance-system-ubuntu:
137 <<: *native_test_job_definition
139 - job: build-system-ubuntu
143 MAKE_CHECK_ARGS: check-acceptance
144 <<: *acceptance_definition
147 <<: *native_build_job_definition
149 job: amd64-debian-container
152 CONFIGURE_ARGS: --enable-fdt=system
153 TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
154 riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
155 MAKE_CHECK_ARGS: check-build
162 <<: *native_test_job_definition
164 - job: build-system-debian
168 MAKE_CHECK_ARGS: check
170 # No targets are built here, just tools, docs, and unit tests. This
171 # also feeds into the eventual documentation deployment steps later
172 build-tools-and-docs-debian:
173 <<: *native_build_job_definition
176 MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
177 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
183 acceptance-system-debian:
184 <<: *native_test_job_definition
186 - job: build-system-debian
190 MAKE_CHECK_ARGS: check-acceptance
191 <<: *acceptance_definition
194 <<: *native_build_job_definition
196 job: amd64-fedora-container
199 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
200 --enable-fdt=system --enable-slirp=system --enable-capstone=system
201 TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
202 xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
203 MAKE_CHECK_ARGS: check-build
210 <<: *native_test_job_definition
212 - job: build-system-fedora
216 MAKE_CHECK_ARGS: check
218 acceptance-system-fedora:
219 <<: *native_test_job_definition
221 - job: build-system-fedora
225 MAKE_CHECK_ARGS: check-acceptance
226 <<: *acceptance_definition
229 <<: *native_build_job_definition
231 job: amd64-centos8-container
234 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
236 TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
237 x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
238 MAKE_CHECK_ARGS: check-build
245 <<: *native_test_job_definition
247 - job: build-system-centos
251 MAKE_CHECK_ARGS: check
253 acceptance-system-centos:
254 <<: *native_test_job_definition
256 - job: build-system-centos
260 MAKE_CHECK_ARGS: check-acceptance
261 <<: *acceptance_definition
263 build-system-opensuse:
264 <<: *native_build_job_definition
266 job: amd64-opensuse-leap-container
269 CONFIGURE_ARGS: --enable-fdt=system
270 TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
271 MAKE_CHECK_ARGS: check-build
277 check-system-opensuse:
278 <<: *native_test_job_definition
280 - job: build-system-opensuse
284 MAKE_CHECK_ARGS: check
286 acceptance-system-opensuse:
287 <<: *native_test_job_definition
289 - job: build-system-opensuse
293 MAKE_CHECK_ARGS: check-acceptance
294 <<: *acceptance_definition
298 <<: *native_build_job_definition
300 job: amd64-fedora-container
313 --disable-coroutine-pool
322 --disable-guest-agent
333 --disable-live-block-migration
335 --disable-malloc-trim
344 --disable-qom-cast-debug
347 --disable-replication
360 --disable-vhost-crypto
363 --disable-vhost-kernel
366 --disable-vhost-vsock
367 --disable-virglrenderer
373 TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
374 s390x-softmmu i386-linux-user
375 MAKE_CHECK_ARGS: check-qtest SPEED=slow
377 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
378 # the configure script. The container doesn't contain Xen headers so
379 # Xen accelerator is not detected / selected. As result it build the
380 # i386-softmmu and x86_64-softmmu with KVM being the single accelerator
383 <<: *native_build_job_definition
385 job: amd64-centos8-container
391 - ../configure --disable-tcg --audio-drv-list="" || { cat config.log meson-logs/meson-log.txt && exit 1; }
394 - make check-qapi-schema
395 - cd tests/qemu-iotests/
396 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
397 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
398 170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
399 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
400 124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
401 208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
402 260 261 262 263 264 270 272 273 277 279
405 <<: *native_build_job_definition
407 job: amd64-debian-user-cross-container
409 IMAGE: debian-all-test-cross
410 CONFIGURE_ARGS: --disable-tools --disable-system
411 MAKE_CHECK_ARGS: check-tcg
414 <<: *native_build_job_definition
416 job: amd64-debian-user-cross-container
418 IMAGE: debian-all-test-cross
419 CONFIGURE_ARGS: --disable-tools --disable-system --static
420 MAKE_CHECK_ARGS: check-tcg
422 # Only build the softmmu targets we have check-tcg tests for
424 <<: *native_build_job_definition
426 job: amd64-debian-user-cross-container
428 IMAGE: debian-all-test-cross
429 CONFIGURE_ARGS: --disable-tools --enable-debug
430 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
431 MAKE_CHECK_ARGS: check-tcg
433 # Run check-tcg against linux-user (with plugins)
434 # we skip sparc64-linux-user until it has been fixed somewhat
435 # we skip cris-linux-user as it doesn't use the common run loop
437 <<: *native_build_job_definition
439 job: amd64-debian-user-cross-container
441 IMAGE: debian-all-test-cross
442 CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
443 MAKE_CHECK_ARGS: check-tcg
447 <<: *native_build_job_definition
450 CONFIGURE_ARGS: --disable-system --disable-tools --disable-docs
451 MAKE_CHECK_ARGS: check-tcg
453 build-some-softmmu-plugins:
454 <<: *native_build_job_definition
456 job: amd64-debian-user-cross-container
458 IMAGE: debian-all-test-cross
459 CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg
460 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
461 MAKE_CHECK_ARGS: check-tcg
464 <<: *native_build_job_definition
466 job: amd64-fedora-container
469 CONFIGURE_ARGS: --cc=clang --cxx=clang++
470 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
471 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
472 ppc-softmmu s390x-softmmu
473 MAKE_CHECK_ARGS: check-qtest check-tcg
476 <<: *native_build_job_definition
478 IMAGE: debian-all-test-cross
479 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
480 --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
481 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
482 MAKE_CHECK_ARGS: check-unit check-tcg
485 <<: *native_build_job_definition
488 CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10 --disable-docs
489 --enable-fdt=system --enable-slirp=system
490 TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
491 MAKE_CHECK_ARGS: bench V=1
493 # These targets are on the way out
495 <<: *native_build_job_definition
497 job: amd64-debian-user-cross-container
499 IMAGE: debian-all-test-cross
500 CONFIGURE_ARGS: --disable-docs --disable-tools
501 MAKE_CHECK_ARGS: build-tcg
502 TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu
509 # We split the check-tcg step as test failures are expected but we still
510 # want to catch the build breaking.
512 <<: *native_test_job_definition
514 - job: build-deprecated
517 IMAGE: debian-all-test-cross
518 MAKE_CHECK_ARGS: check-tcg
521 # gprof/gcov are GCC features
523 <<: *native_build_job_definition
526 CONFIGURE_ARGS: --enable-gprof --enable-gcov
527 MAKE_CHECK_ARGS: check
528 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
531 - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
534 <<: *native_build_job_definition
536 job: amd64-fedora-container
540 - mkdir build-oss-fuzz
541 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
542 ./scripts/oss-fuzz/build.sh
543 - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
544 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
546 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
547 echo Testing ${fuzzer} ... ;
548 "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
550 # Unrelated to fuzzer: run some tests with -fsanitize=address
551 - cd build-oss-fuzz && make check-qtest-i386 check-unit
554 <<: *native_build_job_definition
556 job: amd64-debian-user-cross-container
558 IMAGE: debian-all-test-cross
560 - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
563 - ../configure --enable-tcg-interpreter
564 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
566 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
567 - for tg in $TARGETS ; do
568 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
569 ./tests/qtest/boot-serial-test || exit 1 ;
570 ./tests/qtest/cdrom-test || exit 1 ;
572 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
573 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
576 # Alternate coroutines implementations are only really of interest to KVM users
577 # However we can't test against KVM on Gitlab-CI so we can only run unit tests
578 build-coroutine-ucontext:
579 <<: *native_build_job_definition
581 job: amd64-ubuntu2004-container
584 CONFIGURE_ARGS: --with-coroutine=ucontext --disable-tcg
585 MAKE_CHECK_ARGS: check-unit
587 build-coroutine-sigaltstack:
588 <<: *native_build_job_definition
590 job: amd64-ubuntu2004-container
593 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
594 MAKE_CHECK_ARGS: check-unit
596 # Most jobs test latest gcrypt or nettle builds
598 # These jobs test old gcrypt and nettle from RHEL7
599 # which had some API differences.
600 build-crypto-old-nettle:
601 <<: *native_build_job_definition
603 job: amd64-centos7-container
606 TARGETS: x86_64-softmmu x86_64-linux-user
607 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
608 MAKE_CHECK_ARGS: check-build
613 check-crypto-old-nettle:
614 <<: *native_test_job_definition
616 - job: build-crypto-old-nettle
620 MAKE_CHECK_ARGS: check
623 build-crypto-old-gcrypt:
624 <<: *native_build_job_definition
626 job: amd64-centos7-container
629 TARGETS: x86_64-softmmu x86_64-linux-user
630 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
631 MAKE_CHECK_ARGS: check-build
636 check-crypto-old-gcrypt:
637 <<: *native_test_job_definition
639 - job: build-crypto-old-gcrypt
643 MAKE_CHECK_ARGS: check
646 build-crypto-only-gnutls:
647 <<: *native_build_job_definition
649 job: amd64-centos7-container
652 TARGETS: x86_64-softmmu x86_64-linux-user
653 CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
654 MAKE_CHECK_ARGS: check-build
659 check-crypto-only-gnutls:
660 <<: *native_test_job_definition
662 - job: build-crypto-only-gnutls
666 MAKE_CHECK_ARGS: check
668 # We don't need to exercise every backend with every front-end
669 build-trace-multi-user:
670 <<: *native_build_job_definition
672 job: amd64-ubuntu2004-container
675 CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system
677 build-trace-ftrace-system:
678 <<: *native_build_job_definition
680 job: amd64-ubuntu2004-container
683 CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu
685 build-trace-ust-system:
686 <<: *native_build_job_definition
688 job: amd64-ubuntu2004-container
691 CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu
693 # Check our reduced build configurations
694 build-without-default-devices:
695 <<: *native_build_job_definition
697 job: amd64-centos8-container
700 CONFIGURE_ARGS: --without-default-devices --disable-user
702 build-without-default-features:
703 <<: *native_build_job_definition
705 job: amd64-debian-container
708 CONFIGURE_ARGS: --without-default-features --disable-user
709 --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu
710 MAKE_CHECK_ARGS: check-unit
714 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
716 job: amd64-centos8-container
717 script: .gitlab-ci.d/check-patch.py
720 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
727 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
729 job: amd64-centos8-container
730 script: .gitlab-ci.d/check-dco.py
733 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
739 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
741 job: amd64-fedora-container
743 - dnf install -y meson ninja-build
745 - mkdir subprojects/libvhost-user/build
746 - cd subprojects/libvhost-user/build
750 # Prepare for GitLab pages deployment. Anything copied into the
751 # "public" directory will be deployed to $USER.gitlab.io/$PROJECT
753 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
756 - job: build-tools-and-docs-debian
759 # HTML-ised source tree
761 - htags -anT --tree-view=filetree -m qemu_init
762 -t "Welcome to the QEMU sourcecode"
764 # Project documentation
765 - make -C build install DESTDIR=$(pwd)/temp-install
766 - mv temp-install/usr/local/share/doc/qemu/* public/