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 acceptance-system-debian:
171 <<: *native_test_job_definition
173 - job: build-system-debian
177 MAKE_CHECK_ARGS: check-acceptance
178 <<: *acceptance_definition
181 <<: *native_build_job_definition
183 job: amd64-fedora-container
186 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
187 --enable-fdt=system --enable-slirp=system --enable-capstone=system
188 TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
189 xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
190 MAKE_CHECK_ARGS: check-build
197 <<: *native_test_job_definition
199 - job: build-system-fedora
203 MAKE_CHECK_ARGS: check
205 acceptance-system-fedora:
206 <<: *native_test_job_definition
208 - job: build-system-fedora
212 MAKE_CHECK_ARGS: check-acceptance
213 <<: *acceptance_definition
216 <<: *native_build_job_definition
218 job: amd64-centos8-container
221 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
223 TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
224 x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
225 MAKE_CHECK_ARGS: check-build
232 <<: *native_test_job_definition
234 - job: build-system-centos
238 MAKE_CHECK_ARGS: check
240 acceptance-system-centos:
241 <<: *native_test_job_definition
243 - job: build-system-centos
247 MAKE_CHECK_ARGS: check-acceptance
248 <<: *acceptance_definition
250 build-system-opensuse:
251 <<: *native_build_job_definition
253 job: amd64-opensuse-leap-container
256 CONFIGURE_ARGS: --enable-fdt=system
257 TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
258 MAKE_CHECK_ARGS: check-build
264 check-system-opensuse:
265 <<: *native_test_job_definition
267 - job: build-system-opensuse
271 MAKE_CHECK_ARGS: check
273 acceptance-system-opensuse:
274 <<: *native_test_job_definition
276 - job: build-system-opensuse
280 MAKE_CHECK_ARGS: check-acceptance
281 <<: *acceptance_definition
285 <<: *native_build_job_definition
287 job: amd64-fedora-container
300 --disable-coroutine-pool
309 --disable-guest-agent
320 --disable-live-block-migration
322 --disable-malloc-trim
331 --disable-qom-cast-debug
334 --disable-replication
347 --disable-vhost-crypto
350 --disable-vhost-kernel
353 --disable-vhost-vsock
354 --disable-virglrenderer
360 TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
361 s390x-softmmu i386-linux-user
362 MAKE_CHECK_ARGS: check-qtest SPEED=slow
364 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
365 # the configure script. The container doesn't contain Xen headers so
366 # Xen accelerator is not detected / selected. As result it build the
367 # i386-softmmu and x86_64-softmmu with KVM being the single accelerator
370 <<: *native_build_job_definition
372 job: amd64-centos8-container
378 - ../configure --disable-tcg --audio-drv-list="" || { cat config.log meson-logs/meson-log.txt && exit 1; }
381 - make check-qapi-schema
382 - cd tests/qemu-iotests/
383 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
384 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
385 170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
386 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
387 124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
388 208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
389 260 261 262 263 264 270 272 273 277 279
392 <<: *native_build_job_definition
394 job: amd64-debian-user-cross-container
396 IMAGE: debian-all-test-cross
397 CONFIGURE_ARGS: --disable-tools --disable-system
398 MAKE_CHECK_ARGS: check-tcg
401 <<: *native_build_job_definition
403 job: amd64-debian-user-cross-container
405 IMAGE: debian-all-test-cross
406 CONFIGURE_ARGS: --disable-tools --disable-system --static
407 MAKE_CHECK_ARGS: check-tcg
409 # Only build the softmmu targets we have check-tcg tests for
411 <<: *native_build_job_definition
413 job: amd64-debian-user-cross-container
415 IMAGE: debian-all-test-cross
416 CONFIGURE_ARGS: --disable-tools --enable-debug
417 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
418 MAKE_CHECK_ARGS: check-tcg
420 # Run check-tcg against linux-user (with plugins)
421 # we skip sparc64-linux-user until it has been fixed somewhat
422 # we skip cris-linux-user as it doesn't use the common run loop
424 <<: *native_build_job_definition
426 job: amd64-debian-user-cross-container
428 IMAGE: debian-all-test-cross
429 CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
430 MAKE_CHECK_ARGS: check-tcg
434 <<: *native_build_job_definition
437 CONFIGURE_ARGS: --disable-system --disable-tools --disable-docs
438 MAKE_CHECK_ARGS: check-tcg
440 build-some-softmmu-plugins:
441 <<: *native_build_job_definition
443 job: amd64-debian-user-cross-container
445 IMAGE: debian-all-test-cross
446 CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg
447 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
448 MAKE_CHECK_ARGS: check-tcg
451 <<: *native_build_job_definition
453 job: amd64-fedora-container
456 CONFIGURE_ARGS: --cc=clang --cxx=clang++
457 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
458 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
459 ppc-softmmu s390x-softmmu
460 MAKE_CHECK_ARGS: check-qtest check-tcg
463 <<: *native_build_job_definition
465 IMAGE: debian-all-test-cross
466 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
467 --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
468 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
469 MAKE_CHECK_ARGS: check-unit check-tcg
472 <<: *native_build_job_definition
475 CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10 --disable-docs
476 --enable-fdt=system --enable-slirp=system
477 TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
478 MAKE_CHECK_ARGS: bench V=1
480 # These targets are on the way out
482 <<: *native_build_job_definition
484 job: amd64-debian-user-cross-container
486 IMAGE: debian-all-test-cross
487 CONFIGURE_ARGS: --disable-docs --disable-tools
488 MAKE_CHECK_ARGS: build-tcg
489 TARGETS: ppc64abi32-linux-user lm32-softmmu unicore32-softmmu
495 # We split the check-tcg step as test failures are expected but we still
496 # want to catch the build breaking.
498 <<: *native_test_job_definition
500 - job: build-deprecated
503 IMAGE: debian-all-test-cross
504 MAKE_CHECK_ARGS: check-tcg
507 # gprof/gcov are GCC features
509 <<: *native_build_job_definition
512 CONFIGURE_ARGS: --enable-gprof --enable-gcov
513 MAKE_CHECK_ARGS: check
514 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
517 - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
520 <<: *native_build_job_definition
522 job: amd64-fedora-container
526 - mkdir build-oss-fuzz
527 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
528 ./scripts/oss-fuzz/build.sh
529 - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
530 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
532 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
533 echo Testing ${fuzzer} ... ;
534 "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
536 # Unrelated to fuzzer: run some tests with -fsanitize=address
537 - cd build-oss-fuzz && make check-qtest-i386 check-unit
540 <<: *native_build_job_definition
542 job: amd64-debian-user-cross-container
544 IMAGE: debian-all-test-cross
546 - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
549 - ../configure --enable-tcg-interpreter
550 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
552 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
553 - for tg in $TARGETS ; do
554 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
555 ./tests/qtest/boot-serial-test || exit 1 ;
556 ./tests/qtest/cdrom-test || exit 1 ;
558 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
559 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
562 # Alternate coroutines implementations are only really of interest to KVM users
563 # However we can't test against KVM on Gitlab-CI so we can only run unit tests
564 build-coroutine-ucontext:
565 <<: *native_build_job_definition
567 job: amd64-ubuntu2004-container
570 CONFIGURE_ARGS: --with-coroutine=ucontext --disable-tcg
571 MAKE_CHECK_ARGS: check-unit
573 build-coroutine-sigaltstack:
574 <<: *native_build_job_definition
576 job: amd64-ubuntu2004-container
579 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
580 MAKE_CHECK_ARGS: check-unit
582 # Most jobs test latest gcrypt or nettle builds
584 # These jobs test old gcrypt and nettle from RHEL7
585 # which had some API differences.
586 build-crypto-old-nettle:
587 <<: *native_build_job_definition
589 job: amd64-centos7-container
592 TARGETS: x86_64-softmmu x86_64-linux-user
593 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
594 MAKE_CHECK_ARGS: check-build
599 check-crypto-old-nettle:
600 <<: *native_test_job_definition
602 - job: build-crypto-old-nettle
606 MAKE_CHECK_ARGS: check
609 build-crypto-old-gcrypt:
610 <<: *native_build_job_definition
612 job: amd64-centos7-container
615 TARGETS: x86_64-softmmu x86_64-linux-user
616 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
617 MAKE_CHECK_ARGS: check-build
622 check-crypto-old-gcrypt:
623 <<: *native_test_job_definition
625 - job: build-crypto-old-gcrypt
629 MAKE_CHECK_ARGS: check
632 build-crypto-only-gnutls:
633 <<: *native_build_job_definition
635 job: amd64-centos7-container
638 TARGETS: x86_64-softmmu x86_64-linux-user
639 CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
640 MAKE_CHECK_ARGS: check-build
645 check-crypto-only-gnutls:
646 <<: *native_test_job_definition
648 - job: build-crypto-only-gnutls
652 MAKE_CHECK_ARGS: check
654 # We don't need to exercise every backend with every front-end
655 build-trace-multi-user:
656 <<: *native_build_job_definition
658 job: amd64-ubuntu2004-container
661 CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system
663 build-trace-ftrace-system:
664 <<: *native_build_job_definition
666 job: amd64-ubuntu2004-container
669 CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu
671 build-trace-ust-system:
672 <<: *native_build_job_definition
674 job: amd64-ubuntu2004-container
677 CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu
679 # Check our reduced build configurations
680 build-without-default-devices:
681 <<: *native_build_job_definition
683 job: amd64-centos8-container
686 CONFIGURE_ARGS: --without-default-devices --disable-user
688 build-without-default-features:
689 <<: *native_build_job_definition
691 job: amd64-debian-container
694 CONFIGURE_ARGS: --without-default-features --disable-user
695 --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu
696 MAKE_CHECK_ARGS: check-unit
700 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
702 job: amd64-centos8-container
703 script: .gitlab-ci.d/check-patch.py
706 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
713 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
715 job: amd64-centos8-container
716 script: .gitlab-ci.d/check-dco.py
719 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
725 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
727 job: amd64-fedora-container
729 - dnf install -y meson ninja-build
731 - mkdir subprojects/libvhost-user/build
732 - cd subprojects/libvhost-user/build
736 # No targets are built here, just tools, docs, and unit tests. This
737 # also feeds into the eventual documentation deployment steps later
738 build-tools-and-docs-debian:
739 <<: *native_build_job_definition
741 job: amd64-debian-container
744 MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
745 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
751 # Prepare for GitLab pages deployment. Anything copied into the
752 # "public" directory will be deployed to $USER.gitlab.io/$PROJECT
754 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
757 - job: build-tools-and-docs-debian
760 # HTML-ised source tree
762 - htags -anT --tree-view=filetree -m qemu_init
763 -t "Welcome to the QEMU sourcecode"
765 # Project documentation
766 - make -C build install DESTDIR=$(pwd)/temp-install
767 - mv temp-install/usr/local/share/doc/qemu/* public/