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 lm32-softmmu unicore32-softmmu
508 # We split the check-tcg step as test failures are expected but we still
509 # want to catch the build breaking.
511 <<: *native_test_job_definition
513 - job: build-deprecated
516 IMAGE: debian-all-test-cross
517 MAKE_CHECK_ARGS: check-tcg
520 # gprof/gcov are GCC features
522 <<: *native_build_job_definition
525 CONFIGURE_ARGS: --enable-gprof --enable-gcov
526 MAKE_CHECK_ARGS: check
527 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
530 - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
533 <<: *native_build_job_definition
535 job: amd64-fedora-container
539 - mkdir build-oss-fuzz
540 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
541 ./scripts/oss-fuzz/build.sh
542 - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
543 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
545 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
546 echo Testing ${fuzzer} ... ;
547 "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
549 # Unrelated to fuzzer: run some tests with -fsanitize=address
550 - cd build-oss-fuzz && make check-qtest-i386 check-unit
553 <<: *native_build_job_definition
555 job: amd64-debian-user-cross-container
557 IMAGE: debian-all-test-cross
559 - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
562 - ../configure --enable-tcg-interpreter
563 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
565 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
566 - for tg in $TARGETS ; do
567 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
568 ./tests/qtest/boot-serial-test || exit 1 ;
569 ./tests/qtest/cdrom-test || exit 1 ;
571 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
572 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
575 # Alternate coroutines implementations are only really of interest to KVM users
576 # However we can't test against KVM on Gitlab-CI so we can only run unit tests
577 build-coroutine-ucontext:
578 <<: *native_build_job_definition
580 job: amd64-ubuntu2004-container
583 CONFIGURE_ARGS: --with-coroutine=ucontext --disable-tcg
584 MAKE_CHECK_ARGS: check-unit
586 build-coroutine-sigaltstack:
587 <<: *native_build_job_definition
589 job: amd64-ubuntu2004-container
592 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
593 MAKE_CHECK_ARGS: check-unit
595 # Most jobs test latest gcrypt or nettle builds
597 # These jobs test old gcrypt and nettle from RHEL7
598 # which had some API differences.
599 build-crypto-old-nettle:
600 <<: *native_build_job_definition
602 job: amd64-centos7-container
605 TARGETS: x86_64-softmmu x86_64-linux-user
606 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
607 MAKE_CHECK_ARGS: check-build
612 check-crypto-old-nettle:
613 <<: *native_test_job_definition
615 - job: build-crypto-old-nettle
619 MAKE_CHECK_ARGS: check
622 build-crypto-old-gcrypt:
623 <<: *native_build_job_definition
625 job: amd64-centos7-container
628 TARGETS: x86_64-softmmu x86_64-linux-user
629 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
630 MAKE_CHECK_ARGS: check-build
635 check-crypto-old-gcrypt:
636 <<: *native_test_job_definition
638 - job: build-crypto-old-gcrypt
642 MAKE_CHECK_ARGS: check
645 build-crypto-only-gnutls:
646 <<: *native_build_job_definition
648 job: amd64-centos7-container
651 TARGETS: x86_64-softmmu x86_64-linux-user
652 CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
653 MAKE_CHECK_ARGS: check-build
658 check-crypto-only-gnutls:
659 <<: *native_test_job_definition
661 - job: build-crypto-only-gnutls
665 MAKE_CHECK_ARGS: check
667 # We don't need to exercise every backend with every front-end
668 build-trace-multi-user:
669 <<: *native_build_job_definition
671 job: amd64-ubuntu2004-container
674 CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system
676 build-trace-ftrace-system:
677 <<: *native_build_job_definition
679 job: amd64-ubuntu2004-container
682 CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu
684 build-trace-ust-system:
685 <<: *native_build_job_definition
687 job: amd64-ubuntu2004-container
690 CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu
692 # Check our reduced build configurations
693 build-without-default-devices:
694 <<: *native_build_job_definition
696 job: amd64-centos8-container
699 CONFIGURE_ARGS: --without-default-devices --disable-user
701 build-without-default-features:
702 <<: *native_build_job_definition
704 job: amd64-debian-container
707 CONFIGURE_ARGS: --without-default-features --disable-user
708 --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu
709 MAKE_CHECK_ARGS: check-unit
713 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
715 job: amd64-centos8-container
716 script: .gitlab-ci.d/check-patch.py
719 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
726 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
728 job: amd64-centos8-container
729 script: .gitlab-ci.d/check-dco.py
732 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
738 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
740 job: amd64-fedora-container
742 - dnf install -y meson ninja-build
744 - mkdir subprojects/libvhost-user/build
745 - cd subprojects/libvhost-user/build
749 # Prepare for GitLab pages deployment. Anything copied into the
750 # "public" directory will be deployed to $USER.gitlab.io/$PROJECT
752 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
755 - job: build-tools-and-docs-debian
758 # HTML-ised source tree
760 - htags -anT --tree-view=filetree -m qemu_init
761 -t "Welcome to the QEMU sourcecode"
763 # Project documentation
764 - make -C build install DESTDIR=$(pwd)/temp-install
765 - mv temp-install/usr/local/share/doc/qemu/* public/