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:
18 image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
20 - JOBS=$(expr $(nproc) + 1)
22 - if test -n "$LD_JOBS";
24 scripts/git-submodule.sh update meson ;
28 - if test -n "$TARGETS";
30 ../configure --enable-werror --disable-docs ${LD_JOBS:+--meson=internal} $CONFIGURE_ARGS --target-list="$TARGETS" ;
32 ../configure --enable-werror --disable-docs ${LD_JOBS:+--meson=internal} $CONFIGURE_ARGS ;
33 fi || { cat config.log meson-logs/meson-log.txt && exit 1; }
34 - if test -n "$LD_JOBS";
36 ../meson/meson.py configure . -Dbackend_max_links="$LD_JOBS" ;
39 - if test -n "$MAKE_CHECK_ARGS";
41 make -j"$JOBS" $MAKE_CHECK_ARGS ;
44 .native_test_job_template:
46 image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
48 - scripts/git-submodule.sh update
49 $(sed -n '/GIT_SUBMODULES=/ s/.*=// p' build/config-host.mak)
51 - find . -type f -exec touch {} +
52 # Avoid recompiling by hiding ninja with NINJA=":"
53 - make NINJA=":" $MAKE_CHECK_ARGS
55 .acceptance_template: &acceptance_definition
57 key: "${CI_JOB_NAME}-cache"
59 - ${CI_PROJECT_DIR}/avocado-cache
62 name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
66 - build/tests/results/latest/results.xml
67 - build/tests/results/latest/test-results
69 junit: build/tests/results/latest/results.xml
71 - mkdir -p ~/.config/avocado
72 - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf
73 - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']"
74 >> ~/.config/avocado/avocado.conf
75 - echo -e '[job.output.testlogs]\nstatuses = ["FAIL", "INTERRUPT"]'
76 >> ~/.config/avocado/avocado.conf
77 - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then
78 du -chs ${CI_PROJECT_DIR}/avocado-cache ;
80 - export AVOCADO_ALLOW_UNTRUSTED_CODE=1
83 - du -chs ${CI_PROJECT_DIR}/avocado-cache
86 extends: .native_build_job_template
88 - job: amd64-alpine-container
91 TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
92 microblazeel-softmmu mips64el-softmmu
93 MAKE_CHECK_ARGS: check-build
94 CONFIGURE_ARGS: --enable-docs --enable-trace-backends=log,simple,syslog
98 - .git-submodule-status
102 extends: .native_test_job_template
104 - job: build-system-alpine
108 MAKE_CHECK_ARGS: check
110 acceptance-system-alpine:
111 extends: .native_test_job_template
113 - job: build-system-alpine
117 MAKE_CHECK_ARGS: check-acceptance
118 <<: *acceptance_definition
121 extends: .native_build_job_template
123 job: amd64-ubuntu2004-container
126 CONFIGURE_ARGS: --enable-docs --enable-fdt=system --enable-slirp=system
127 TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
128 microblazeel-softmmu mips64el-softmmu
129 MAKE_CHECK_ARGS: check-build
136 extends: .native_test_job_template
138 - job: build-system-ubuntu
142 MAKE_CHECK_ARGS: check
144 acceptance-system-ubuntu:
145 extends: .native_test_job_template
147 - job: build-system-ubuntu
151 MAKE_CHECK_ARGS: check-acceptance
152 <<: *acceptance_definition
155 extends: .native_build_job_template
157 job: amd64-debian-container
160 CONFIGURE_ARGS: --enable-fdt=system
161 TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
162 riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
163 MAKE_CHECK_ARGS: check-build
170 extends: .native_test_job_template
172 - job: build-system-debian
176 MAKE_CHECK_ARGS: check
178 acceptance-system-debian:
179 extends: .native_test_job_template
181 - job: build-system-debian
185 MAKE_CHECK_ARGS: check-acceptance
186 <<: *acceptance_definition
189 extends: .native_build_job_template
191 job: amd64-fedora-container
194 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
195 --enable-fdt=system --enable-slirp=system --enable-capstone=system
196 TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
197 xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
198 MAKE_CHECK_ARGS: check-build
205 extends: .native_test_job_template
207 - job: build-system-fedora
211 MAKE_CHECK_ARGS: check
213 acceptance-system-fedora:
214 extends: .native_test_job_template
216 - job: build-system-fedora
220 MAKE_CHECK_ARGS: check-acceptance
221 <<: *acceptance_definition
224 extends: .native_build_job_template
226 job: amd64-centos8-container
229 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
230 --enable-modules --enable-trace-backends=dtrace
231 TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
232 x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
233 MAKE_CHECK_ARGS: check-build
240 extends: .native_test_job_template
242 - job: build-system-centos
246 MAKE_CHECK_ARGS: check
248 acceptance-system-centos:
249 extends: .native_test_job_template
251 - job: build-system-centos
255 MAKE_CHECK_ARGS: check-acceptance
256 <<: *acceptance_definition
258 build-system-opensuse:
259 extends: .native_build_job_template
261 job: amd64-opensuse-leap-container
264 CONFIGURE_ARGS: --enable-fdt=system
265 TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
266 MAKE_CHECK_ARGS: check-build
272 check-system-opensuse:
273 extends: .native_test_job_template
275 - job: build-system-opensuse
279 MAKE_CHECK_ARGS: check
281 acceptance-system-opensuse:
282 extends: .native_test_job_template
284 - job: build-system-opensuse
288 MAKE_CHECK_ARGS: check-acceptance
289 <<: *acceptance_definition
293 extends: .native_build_job_template
295 job: amd64-fedora-container
308 --disable-coroutine-pool
317 --disable-guest-agent
328 --disable-live-block-migration
330 --disable-malloc-trim
339 --disable-qom-cast-debug
342 --disable-replication
354 --disable-vhost-crypto
357 --disable-vhost-kernel
360 --disable-vhost-vsock
361 --disable-virglrenderer
367 TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
368 s390x-softmmu i386-linux-user
369 MAKE_CHECK_ARGS: check-qtest SPEED=slow
371 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
372 # the configure script. The container doesn't contain Xen headers so
373 # Xen accelerator is not detected / selected. As result it build the
374 # i386-softmmu and x86_64-softmmu with KVM being the single accelerator
376 # Also use a different coroutine implementation (which is only really of
377 # interest to KVM users, i.e. with TCG disabled)
379 extends: .native_build_job_template
381 job: amd64-centos8-container
387 - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
388 || { cat config.log meson-logs/meson-log.txt && exit 1; }
391 - make check-qapi-schema
392 - cd tests/qemu-iotests/
393 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
394 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
395 170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
396 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
397 124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
398 208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
399 260 261 262 263 264 270 272 273 277 279
402 extends: .native_build_job_template
404 job: amd64-debian-user-cross-container
406 IMAGE: debian-all-test-cross
407 CONFIGURE_ARGS: --disable-tools --disable-system
408 MAKE_CHECK_ARGS: check-tcg
411 extends: .native_build_job_template
413 job: amd64-debian-user-cross-container
415 IMAGE: debian-all-test-cross
416 CONFIGURE_ARGS: --disable-tools --disable-system --static
417 MAKE_CHECK_ARGS: check-tcg
419 # Because the hexagon cross-compiler takes so long to build we don't rely
420 # on the CI system to build it and hence this job has an optional dependency
421 # declared. The image is manually uploaded.
423 extends: .native_build_job_template
425 job: hexagon-cross-container
428 IMAGE: debian-hexagon-cross
429 TARGETS: hexagon-linux-user
430 CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
431 MAKE_CHECK_ARGS: check-tcg
433 # Only build the softmmu targets we have check-tcg tests for
435 extends: .native_build_job_template
437 job: amd64-debian-user-cross-container
439 IMAGE: debian-all-test-cross
440 CONFIGURE_ARGS: --disable-tools --enable-debug
441 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
442 MAKE_CHECK_ARGS: check-tcg
444 # Run check-tcg against linux-user (with plugins)
445 # we skip sparc64-linux-user until it has been fixed somewhat
446 # we skip cris-linux-user as it doesn't use the common run loop
448 extends: .native_build_job_template
450 job: amd64-debian-user-cross-container
452 IMAGE: debian-all-test-cross
453 CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
454 MAKE_CHECK_ARGS: check-tcg
458 extends: .native_build_job_template
460 job: amd64-centos7-container
463 CONFIGURE_ARGS: --disable-system --disable-tools --disable-docs
464 MAKE_CHECK_ARGS: check-tcg
466 build-some-softmmu-plugins:
467 extends: .native_build_job_template
469 job: amd64-debian-user-cross-container
471 IMAGE: debian-all-test-cross
472 CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg
473 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
474 MAKE_CHECK_ARGS: check-tcg
477 extends: .native_build_job_template
479 job: amd64-fedora-container
482 CONFIGURE_ARGS: --cc=clang --cxx=clang++
483 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
484 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
485 ppc-softmmu s390x-softmmu
486 MAKE_CHECK_ARGS: check-qtest check-tcg
489 extends: .native_build_job_template
491 job: amd64-debian-user-cross-container
493 IMAGE: debian-all-test-cross
494 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
495 --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
496 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
497 MAKE_CHECK_ARGS: check-unit check-tcg
499 # Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
500 # On gitlab runners, default value sometimes end up calling 2 lds concurrently and
501 # triggers an Out-Of-Memory error
503 # Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together
504 # with QEMU and linked as a static library to avoid false positives in CFI checks.
505 # This can be accomplished by using -enable-slirp=git, which avoids the use of
506 # a system-wide version of the library
508 # Split in three sets of build/check/acceptance to limit the execution time of each
511 extends: .native_build_job_template
513 - job: amd64-fedora-container
518 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
519 --enable-safe-stack --enable-slirp=git
520 TARGETS: aarch64-softmmu
521 MAKE_CHECK_ARGS: check-build
529 extends: .native_test_job_template
531 - job: build-cfi-aarch64
535 MAKE_CHECK_ARGS: check
537 acceptance-cfi-aarch64:
538 extends: .native_test_job_template
540 - job: build-cfi-aarch64
544 MAKE_CHECK_ARGS: check-acceptance
545 <<: *acceptance_definition
547 build-cfi-ppc64-s390x:
548 extends: .native_build_job_template
550 - job: amd64-fedora-container
555 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
556 --enable-safe-stack --enable-slirp=git
557 TARGETS: ppc64-softmmu s390x-softmmu
558 MAKE_CHECK_ARGS: check-build
565 check-cfi-ppc64-s390x:
566 extends: .native_test_job_template
568 - job: build-cfi-ppc64-s390x
572 MAKE_CHECK_ARGS: check
574 acceptance-cfi-ppc64-s390x:
575 extends: .native_test_job_template
577 - job: build-cfi-ppc64-s390x
581 MAKE_CHECK_ARGS: check-acceptance
582 <<: *acceptance_definition
585 extends: .native_build_job_template
587 - job: amd64-fedora-container
592 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
593 --enable-safe-stack --enable-slirp=git
594 TARGETS: x86_64-softmmu
595 MAKE_CHECK_ARGS: check-build
603 extends: .native_test_job_template
605 - job: build-cfi-x86_64
609 MAKE_CHECK_ARGS: check
611 acceptance-cfi-x86_64:
612 extends: .native_test_job_template
614 - job: build-cfi-x86_64
618 MAKE_CHECK_ARGS: check-acceptance
619 <<: *acceptance_definition
622 extends: .native_build_job_template
624 job: amd64-ubuntu2004-container
627 CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
628 --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system
629 TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
630 MAKE_CHECK_ARGS: bench V=1
632 # These targets are on the way out
634 extends: .native_build_job_template
636 job: amd64-debian-user-cross-container
638 IMAGE: debian-all-test-cross
639 CONFIGURE_ARGS: --disable-tools
640 MAKE_CHECK_ARGS: build-tcg
641 TARGETS: ppc64abi32-linux-user
647 # We split the check-tcg step as test failures are expected but we still
648 # want to catch the build breaking.
650 extends: .native_test_job_template
652 - job: build-deprecated
655 IMAGE: debian-all-test-cross
656 MAKE_CHECK_ARGS: check-tcg
659 # gprof/gcov are GCC features
661 extends: .native_build_job_template
663 job: amd64-ubuntu2004-container
666 CONFIGURE_ARGS: --enable-gprof --enable-gcov
667 MAKE_CHECK_ARGS: check
668 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
671 - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
674 extends: .native_build_job_template
676 job: amd64-fedora-container
680 - mkdir build-oss-fuzz
681 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
682 ./scripts/oss-fuzz/build.sh
683 - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
684 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
686 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
687 echo Testing ${fuzzer} ... ;
688 "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
690 # Unrelated to fuzzer: run some tests with -fsanitize=address
691 - cd build-oss-fuzz && make check-qtest-i386 check-unit
694 extends: .native_build_job_template
696 job: amd64-debian-user-cross-container
698 IMAGE: debian-all-test-cross
700 - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64"
703 - ../configure --enable-tcg-interpreter
704 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
706 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
707 - for tg in $TARGETS ; do
708 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
709 ./tests/qtest/boot-serial-test || exit 1 ;
710 ./tests/qtest/cdrom-test || exit 1 ;
712 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
713 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
716 # Alternate coroutines implementations are only really of interest to KVM users
717 # However we can't test against KVM on Gitlab-CI so we can only run unit tests
718 build-coroutine-sigaltstack:
719 extends: .native_build_job_template
721 job: amd64-ubuntu2004-container
724 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
725 --enable-trace-backends=ftrace
726 MAKE_CHECK_ARGS: check-unit
728 # Most jobs test latest gcrypt or nettle builds
730 # These jobs test old gcrypt and nettle from RHEL7
731 # which had some API differences.
733 extends: .native_build_job_template
735 job: amd64-centos7-container
738 TARGETS: x86_64-softmmu x86_64-linux-user
739 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
740 MAKE_CHECK_ARGS: check
743 extends: .native_build_job_template
745 job: amd64-centos7-container
748 TARGETS: x86_64-softmmu x86_64-linux-user
749 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
750 MAKE_CHECK_ARGS: check
753 extends: .native_build_job_template
755 job: amd64-centos7-container
758 TARGETS: x86_64-softmmu x86_64-linux-user
759 CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
760 MAKE_CHECK_ARGS: check
763 # Check our reduced build configurations
764 build-without-default-devices:
765 extends: .native_build_job_template
767 job: amd64-centos8-container
770 CONFIGURE_ARGS: --without-default-devices --disable-user
772 build-without-default-features:
773 extends: .native_build_job_template
775 job: amd64-debian-container
778 CONFIGURE_ARGS: --without-default-features --disable-user
779 --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu
780 MAKE_CHECK_ARGS: check-unit
784 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
786 job: amd64-centos8-container
787 script: .gitlab-ci.d/check-patch.py
790 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
797 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
799 job: amd64-centos8-container
800 script: .gitlab-ci.d/check-dco.py
803 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
809 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
811 job: amd64-fedora-container
813 - dnf install -y meson ninja-build
815 - mkdir subprojects/libvhost-user/build
816 - cd subprojects/libvhost-user/build
820 # No targets are built here, just tools, docs, and unit tests. This
821 # also feeds into the eventual documentation deployment steps later
822 build-tools-and-docs-debian:
823 extends: .native_build_job_template
825 job: amd64-debian-container
828 MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
829 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
835 # Prepare for GitLab pages deployment. Anything copied into the
836 # "public" directory will be deployed to $USER.gitlab.io/$PROJECT
838 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
841 - job: build-tools-and-docs-debian
844 # HTML-ised source tree
846 - htags -anT --tree-view=filetree -m qemu_init
847 -t "Welcome to the QEMU sourcecode"
849 # Project documentation
850 - make -C build install DESTDIR=$(pwd)/temp-install
851 - mv temp-install/usr/local/share/doc/qemu/* public/