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
369 # Also use a different coroutine implementation (which is only really of
370 # interest to KVM users, i.e. with TCG disabled)
372 <<: *native_build_job_definition
374 job: amd64-centos8-container
380 - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
381 || { cat config.log meson-logs/meson-log.txt && exit 1; }
384 - make check-qapi-schema
385 - cd tests/qemu-iotests/
386 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
387 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
388 170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
389 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
390 124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
391 208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
392 260 261 262 263 264 270 272 273 277 279
395 <<: *native_build_job_definition
397 job: amd64-debian-user-cross-container
399 IMAGE: debian-all-test-cross
400 CONFIGURE_ARGS: --disable-tools --disable-system
401 MAKE_CHECK_ARGS: check-tcg
404 <<: *native_build_job_definition
406 job: amd64-debian-user-cross-container
408 IMAGE: debian-all-test-cross
409 CONFIGURE_ARGS: --disable-tools --disable-system --static
410 MAKE_CHECK_ARGS: check-tcg
412 # Only build the softmmu targets we have check-tcg tests for
414 <<: *native_build_job_definition
416 job: amd64-debian-user-cross-container
418 IMAGE: debian-all-test-cross
419 CONFIGURE_ARGS: --disable-tools --enable-debug
420 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
421 MAKE_CHECK_ARGS: check-tcg
423 # Run check-tcg against linux-user (with plugins)
424 # we skip sparc64-linux-user until it has been fixed somewhat
425 # we skip cris-linux-user as it doesn't use the common run loop
427 <<: *native_build_job_definition
429 job: amd64-debian-user-cross-container
431 IMAGE: debian-all-test-cross
432 CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
433 MAKE_CHECK_ARGS: check-tcg
437 <<: *native_build_job_definition
439 job: amd64-centos7-container
442 CONFIGURE_ARGS: --disable-system --disable-tools --disable-docs
443 MAKE_CHECK_ARGS: check-tcg
445 build-some-softmmu-plugins:
446 <<: *native_build_job_definition
448 job: amd64-debian-user-cross-container
450 IMAGE: debian-all-test-cross
451 CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg
452 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
453 MAKE_CHECK_ARGS: check-tcg
456 <<: *native_build_job_definition
458 job: amd64-fedora-container
461 CONFIGURE_ARGS: --cc=clang --cxx=clang++
462 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
463 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
464 ppc-softmmu s390x-softmmu
465 MAKE_CHECK_ARGS: check-qtest check-tcg
468 <<: *native_build_job_definition
470 job: amd64-debian-user-cross-container
472 IMAGE: debian-all-test-cross
473 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
474 --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
475 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
476 MAKE_CHECK_ARGS: check-unit check-tcg
479 <<: *native_build_job_definition
481 job: amd64-ubuntu2004-container
484 CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10 --disable-docs
485 --enable-fdt=system --enable-slirp=system
486 TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
487 MAKE_CHECK_ARGS: bench V=1
489 # These targets are on the way out
491 <<: *native_build_job_definition
493 job: amd64-debian-user-cross-container
495 IMAGE: debian-all-test-cross
496 CONFIGURE_ARGS: --disable-docs --disable-tools
497 MAKE_CHECK_ARGS: build-tcg
498 TARGETS: ppc64abi32-linux-user lm32-softmmu unicore32-softmmu
504 # We split the check-tcg step as test failures are expected but we still
505 # want to catch the build breaking.
507 <<: *native_test_job_definition
509 - job: build-deprecated
512 IMAGE: debian-all-test-cross
513 MAKE_CHECK_ARGS: check-tcg
516 # gprof/gcov are GCC features
518 <<: *native_build_job_definition
520 job: amd64-ubuntu2004-container
523 CONFIGURE_ARGS: --enable-gprof --enable-gcov
524 MAKE_CHECK_ARGS: check
525 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
528 - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
531 <<: *native_build_job_definition
533 job: amd64-fedora-container
537 - mkdir build-oss-fuzz
538 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
539 ./scripts/oss-fuzz/build.sh
540 - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
541 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
543 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
544 echo Testing ${fuzzer} ... ;
545 "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
547 # Unrelated to fuzzer: run some tests with -fsanitize=address
548 - cd build-oss-fuzz && make check-qtest-i386 check-unit
551 <<: *native_build_job_definition
553 job: amd64-debian-user-cross-container
555 IMAGE: debian-all-test-cross
557 - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
560 - ../configure --enable-tcg-interpreter
561 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
563 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
564 - for tg in $TARGETS ; do
565 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
566 ./tests/qtest/boot-serial-test || exit 1 ;
567 ./tests/qtest/cdrom-test || exit 1 ;
569 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
570 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
573 # Alternate coroutines implementations are only really of interest to KVM users
574 # However we can't test against KVM on Gitlab-CI so we can only run unit tests
575 build-coroutine-sigaltstack:
576 <<: *native_build_job_definition
578 job: amd64-ubuntu2004-container
581 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
582 MAKE_CHECK_ARGS: check-unit
584 # Most jobs test latest gcrypt or nettle builds
586 # These jobs test old gcrypt and nettle from RHEL7
587 # which had some API differences.
589 <<: *native_build_job_definition
591 job: amd64-centos7-container
594 TARGETS: x86_64-softmmu x86_64-linux-user
595 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
596 MAKE_CHECK_ARGS: check
599 <<: *native_build_job_definition
601 job: amd64-centos7-container
604 TARGETS: x86_64-softmmu x86_64-linux-user
605 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
606 MAKE_CHECK_ARGS: check
609 <<: *native_build_job_definition
611 job: amd64-centos7-container
614 TARGETS: x86_64-softmmu x86_64-linux-user
615 CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
616 MAKE_CHECK_ARGS: check
619 # We don't need to exercise every backend with every front-end
620 build-trace-multi-user:
621 <<: *native_build_job_definition
623 job: amd64-ubuntu2004-container
626 CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system
628 build-trace-ftrace-system:
629 <<: *native_build_job_definition
631 job: amd64-ubuntu2004-container
634 CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu
636 build-trace-ust-system:
637 <<: *native_build_job_definition
639 job: amd64-ubuntu2004-container
642 CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu
644 # Check our reduced build configurations
645 build-without-default-devices:
646 <<: *native_build_job_definition
648 job: amd64-centos8-container
651 CONFIGURE_ARGS: --without-default-devices --disable-user
653 build-without-default-features:
654 <<: *native_build_job_definition
656 job: amd64-debian-container
659 CONFIGURE_ARGS: --without-default-features --disable-user
660 --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu
661 MAKE_CHECK_ARGS: check-unit
665 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
667 job: amd64-centos8-container
668 script: .gitlab-ci.d/check-patch.py
671 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
678 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
680 job: amd64-centos8-container
681 script: .gitlab-ci.d/check-dco.py
684 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
690 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
692 job: amd64-fedora-container
694 - dnf install -y meson ninja-build
696 - mkdir subprojects/libvhost-user/build
697 - cd subprojects/libvhost-user/build
701 # No targets are built here, just tools, docs, and unit tests. This
702 # also feeds into the eventual documentation deployment steps later
703 build-tools-and-docs-debian:
704 <<: *native_build_job_definition
706 job: amd64-debian-container
709 MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
710 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
716 # Prepare for GitLab pages deployment. Anything copied into the
717 # "public" directory will be deployed to $USER.gitlab.io/$PROJECT
719 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
722 - job: build-tools-and-docs-debian
725 # HTML-ised source tree
727 - htags -anT --tree-view=filetree -m qemu_init
728 -t "Welcome to the QEMU sourcecode"
730 # Project documentation
731 - make -C build install DESTDIR=$(pwd)/temp-install
732 - mv temp-install/usr/local/share/doc/qemu/* public/