| # Currently we have two build stages after our containers are built: |
| # - build (for traditional build and test or first stage build) |
| # - test (for test stages, using build artefacts from a build stage) |
| stages: |
| - containers |
| - containers-layer2 |
| - build |
| - test |
| |
| include: |
| - local: '/.gitlab-ci.d/edk2.yml' |
| - local: '/.gitlab-ci.d/opensbi.yml' |
| - local: '/.gitlab-ci.d/containers.yml' |
| - local: '/.gitlab-ci.d/crossbuilds.yml' |
| |
| .native_build_job_template: &native_build_job_definition |
| stage: build |
| image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest |
| before_script: |
| - JOBS=$(expr $(nproc) + 1) |
| - sed -i s,git.qemu.org/git,gitlab.com/qemu-project, .gitmodules |
| script: |
| - mkdir build |
| - cd build |
| - if test -n "$TARGETS"; |
| then |
| ../configure --enable-werror $CONFIGURE_ARGS --target-list="$TARGETS" ; |
| else |
| ../configure --enable-werror $CONFIGURE_ARGS ; |
| fi || { cat config.log meson-logs/meson-log.txt && exit 1; } |
| - make -j"$JOBS" |
| - if test -n "$MAKE_CHECK_ARGS"; |
| then |
| make -j"$JOBS" $MAKE_CHECK_ARGS ; |
| fi |
| |
| .native_test_job_template: &native_test_job_definition |
| stage: test |
| image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest |
| script: |
| - cd build |
| - find . -type f -exec touch {} + |
| - make $MAKE_CHECK_ARGS |
| |
| .acceptance_template: &acceptance_definition |
| cache: |
| key: "${CI_JOB_NAME}-cache" |
| paths: |
| - ${CI_PROJECT_DIR}/avocado-cache |
| policy: pull-push |
| artifacts: |
| name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" |
| when: always |
| expire_in: 2 days |
| paths: |
| - build/tests/results/latest/results.xml |
| - build/tests/results/latest/test-results |
| reports: |
| junit: build/tests/results/latest/results.xml |
| before_script: |
| - mkdir -p ~/.config/avocado |
| - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf |
| - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']" |
| >> ~/.config/avocado/avocado.conf |
| - echo -e '[job.output.testlogs]\nstatuses = ["FAIL"]' |
| >> ~/.config/avocado/avocado.conf |
| - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then |
| du -chs ${CI_PROJECT_DIR}/avocado-cache ; |
| fi |
| - export AVOCADO_ALLOW_UNTRUSTED_CODE=1 |
| after_script: |
| - cd build |
| - du -chs ${CI_PROJECT_DIR}/avocado-cache |
| |
| build-system-ubuntu: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: ubuntu2004 |
| TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu |
| moxie-softmmu microblazeel-softmmu mips64el-softmmu |
| MAKE_CHECK_ARGS: check-build |
| artifacts: |
| expire_in: 2 days |
| paths: |
| - build |
| |
| check-system-ubuntu: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-system-ubuntu |
| artifacts: true |
| variables: |
| IMAGE: ubuntu2004 |
| MAKE_CHECK_ARGS: check |
| |
| acceptance-system-ubuntu: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-system-ubuntu |
| artifacts: true |
| variables: |
| IMAGE: ubuntu2004 |
| MAKE_CHECK_ARGS: check-acceptance |
| <<: *acceptance_definition |
| |
| build-system-debian: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: debian-amd64 |
| TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu |
| riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu |
| MAKE_CHECK_ARGS: check-build |
| artifacts: |
| expire_in: 2 days |
| paths: |
| - build |
| |
| check-system-debian: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-system-debian |
| artifacts: true |
| variables: |
| IMAGE: debian-amd64 |
| MAKE_CHECK_ARGS: check |
| |
| # No targets are built here, just tools, docs, and unit tests. This |
| # also feeds into the eventual documentation deployment steps later |
| build-tools-and-docs-debian: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: debian-amd64 |
| MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope |
| CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools |
| artifacts: |
| expire_in: 2 days |
| paths: |
| - build |
| |
| acceptance-system-debian: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-system-debian |
| artifacts: true |
| variables: |
| IMAGE: debian-amd64 |
| MAKE_CHECK_ARGS: check-acceptance |
| <<: *acceptance_definition |
| |
| build-system-fedora: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: fedora |
| CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs |
| TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu |
| xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu |
| MAKE_CHECK_ARGS: check-build |
| artifacts: |
| expire_in: 2 days |
| paths: |
| - build |
| |
| check-system-fedora: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-system-fedora |
| artifacts: true |
| variables: |
| IMAGE: fedora |
| MAKE_CHECK_ARGS: check |
| |
| acceptance-system-fedora: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-system-fedora |
| artifacts: true |
| variables: |
| IMAGE: fedora |
| MAKE_CHECK_ARGS: check-acceptance |
| <<: *acceptance_definition |
| |
| build-system-centos: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: centos8 |
| CONFIGURE_ARGS: --disable-nettle --enable-gcrypt |
| TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu |
| x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu |
| MAKE_CHECK_ARGS: check-build |
| artifacts: |
| expire_in: 2 days |
| paths: |
| - build |
| |
| check-system-centos: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-system-centos |
| artifacts: true |
| variables: |
| IMAGE: centos8 |
| MAKE_CHECK_ARGS: check |
| |
| acceptance-system-centos: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-system-centos |
| artifacts: true |
| variables: |
| IMAGE: centos8 |
| MAKE_CHECK_ARGS: check-acceptance |
| <<: *acceptance_definition |
| |
| build-system-opensuse: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: opensuse-leap |
| TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu |
| MAKE_CHECK_ARGS: check-build |
| artifacts: |
| expire_in: 2 days |
| paths: |
| - build |
| |
| check-system-opensuse: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-system-opensuse |
| artifacts: true |
| variables: |
| IMAGE: opensuse-leap |
| MAKE_CHECK_ARGS: check |
| |
| acceptance-system-opensuse: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-system-opensuse |
| artifacts: true |
| variables: |
| IMAGE: opensuse-leap |
| MAKE_CHECK_ARGS: check-acceptance |
| <<: *acceptance_definition |
| |
| |
| build-disabled: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: fedora |
| CONFIGURE_ARGS: |
| --disable-attr |
| --disable-auth-pam |
| --disable-avx2 |
| --disable-bochs |
| --disable-brlapi |
| --disable-bzip2 |
| --disable-cap-ng |
| --disable-capstone |
| --disable-cloop |
| --disable-coroutine-pool |
| --disable-curl |
| --disable-curses |
| --disable-dmg |
| --disable-docs |
| --disable-gcrypt |
| --disable-glusterfs |
| --disable-gnutls |
| --disable-gtk |
| --disable-guest-agent |
| --disable-iconv |
| --disable-keyring |
| --disable-kvm |
| --disable-libiscsi |
| --disable-libpmem |
| --disable-libssh |
| --disable-libudev |
| --disable-libusb |
| --disable-libxml2 |
| --disable-linux-aio |
| --disable-live-block-migration |
| --disable-lzo |
| --disable-malloc-trim |
| --disable-mpath |
| --disable-nettle |
| --disable-numa |
| --disable-opengl |
| --disable-parallels |
| --disable-pie |
| --disable-qcow1 |
| --disable-qed |
| --disable-qom-cast-debug |
| --disable-rbd |
| --disable-rdma |
| --disable-replication |
| --disable-sdl |
| --disable-seccomp |
| --disable-sheepdog |
| --disable-slirp |
| --disable-smartcard |
| --disable-snappy |
| --disable-sparse |
| --disable-spice |
| --disable-strip |
| --disable-tpm |
| --disable-usb-redir |
| --disable-vdi |
| --disable-vhost-crypto |
| --disable-vhost-net |
| --disable-vhost-scsi |
| --disable-vhost-user |
| --disable-vhost-vdpa |
| --disable-vhost-vsock |
| --disable-virglrenderer |
| --disable-vnc |
| --disable-vte |
| --disable-vvfat |
| --disable-xen |
| --disable-zstd |
| TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu |
| s390x-softmmu i386-linux-user |
| MAKE_CHECK_ARGS: check-qtest SPEED=slow |
| |
| # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by |
| # the configure script. The container doesn't contain Xen headers so |
| # Xen accelerator is not detected / selected. As result it build the |
| # i386-softmmu and x86_64-softmmu with KVM being the single accelerator |
| # available. |
| build-tcg-disabled: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: centos8 |
| script: |
| - mkdir build |
| - cd build |
| - ../configure --disable-tcg --audio-drv-list="" || { cat config.log meson-logs/meson-log.txt && exit 1; } |
| - make -j"$JOBS" |
| - make check-unit |
| - make check-qapi-schema |
| - cd tests/qemu-iotests/ |
| - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048 |
| 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163 |
| 170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277 |
| - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122 |
| 124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202 |
| 208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258 |
| 260 261 262 263 264 270 272 273 277 279 |
| |
| build-user: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: debian-all-test-cross |
| CONFIGURE_ARGS: --disable-tools --disable-system |
| MAKE_CHECK_ARGS: check-tcg |
| |
| build-user-static: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: debian-all-test-cross |
| CONFIGURE_ARGS: --disable-tools --disable-system --static |
| MAKE_CHECK_ARGS: check-tcg |
| |
| # Only build the softmmu targets we have check-tcg tests for |
| build-some-softmmu: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: debian-all-test-cross |
| CONFIGURE_ARGS: --disable-tools --enable-debug-tcg |
| TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu |
| MAKE_CHECK_ARGS: check-tcg |
| |
| # Run check-tcg against linux-user (with plugins) |
| # we skip sparc64-linux-user until it has been fixed somewhat |
| # we skip cris-linux-user as it doesn't use the common run loop |
| build-user-plugins: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: debian-all-test-cross |
| CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user |
| MAKE_CHECK_ARGS: check-tcg |
| timeout: 1h 30m |
| |
| build-some-softmmu-plugins: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: debian-all-test-cross |
| CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg |
| TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu |
| MAKE_CHECK_ARGS: check-tcg |
| |
| build-clang: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: fedora |
| CONFIGURE_ARGS: --cc=clang --cxx=clang++ |
| TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu |
| ppc-softmmu s390x-softmmu arm-linux-user |
| MAKE_CHECK_ARGS: check |
| |
| # These targets are on the way out |
| build-deprecated: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: debian-all-test-cross |
| CONFIGURE_ARGS: --disable-docs --disable-tools |
| MAKE_CHECK_ARGS: build-tcg |
| TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu |
| unicore32-softmmu |
| artifacts: |
| expire_in: 2 days |
| paths: |
| - build |
| |
| # We split the check-tcg step as test failures are expected but we still |
| # want to catch the build breaking. |
| check-deprecated: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-deprecated |
| artifacts: true |
| variables: |
| IMAGE: debian-all-test-cross |
| MAKE_CHECK_ARGS: check-tcg |
| allow_failure: true |
| |
| build-oss-fuzz: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: fedora |
| script: |
| - mkdir build-oss-fuzz |
| - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address" |
| ./scripts/oss-fuzz/build.sh |
| - export ASAN_OPTIONS="fast_unwind_on_malloc=0" |
| - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f |
| | grep -v slirp); do |
| grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ; |
| echo Testing ${fuzzer} ... ; |
| "${fuzzer}" -runs=1 -seed=1 || exit 1 ; |
| done |
| # Unrelated to fuzzer: run some tests with -fsanitize=address |
| - cd build-oss-fuzz && make check-qtest-i386 check-unit |
| |
| build-tci: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: fedora |
| script: |
| - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64" |
| - mkdir build |
| - cd build |
| - ../configure --enable-tcg-interpreter |
| --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; } |
| - make -j"$JOBS" |
| - make run-tcg-tests-x86_64-softmmu |
| - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test |
| - for tg in $TARGETS ; do |
| export QTEST_QEMU_BINARY="./qemu-system-${tg}" ; |
| ./tests/qtest/boot-serial-test || exit 1 ; |
| ./tests/qtest/cdrom-test || exit 1 ; |
| done |
| - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test |
| - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow |
| |
| # Alternate coroutines implementations are only really of interest to KVM users |
| # However we can't test against KVM on Gitlab-CI so we can only run unit tests |
| build-coroutine-ucontext: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: ubuntu2004 |
| CONFIGURE_ARGS: --with-coroutine=ucontext --disable-tcg |
| MAKE_CHECK_ARGS: check-unit |
| |
| build-coroutine-sigaltstack: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: ubuntu2004 |
| CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg |
| MAKE_CHECK_ARGS: check-unit |
| |
| # Most jobs test latest gcrypt or nettle builds |
| # |
| # These jobs test old gcrypt and nettle from RHEL7 |
| # which had some API differences. |
| build-crypto-old-nettle: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: centos7 |
| TARGETS: x86_64-softmmu x86_64-linux-user |
| CONFIGURE_ARGS: --disable-gcrypt --enable-nettle |
| MAKE_CHECK_ARGS: check-build |
| artifacts: |
| paths: |
| - build |
| |
| check-crypto-old-nettle: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-crypto-old-nettle |
| artifacts: true |
| variables: |
| IMAGE: centos7 |
| MAKE_CHECK_ARGS: check |
| |
| |
| build-crypto-old-gcrypt: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: centos7 |
| TARGETS: x86_64-softmmu x86_64-linux-user |
| CONFIGURE_ARGS: --disable-nettle --enable-gcrypt |
| MAKE_CHECK_ARGS: check-build |
| artifacts: |
| paths: |
| - build |
| |
| check-crypto-old-gcrypt: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-crypto-old-gcrypt |
| artifacts: true |
| variables: |
| IMAGE: centos7 |
| MAKE_CHECK_ARGS: check |
| |
| |
| build-crypto-only-gnutls: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: centos7 |
| TARGETS: x86_64-softmmu x86_64-linux-user |
| CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls |
| MAKE_CHECK_ARGS: check-build |
| artifacts: |
| paths: |
| - build |
| |
| check-crypto-only-gnutls: |
| <<: *native_test_job_definition |
| needs: |
| - job: build-crypto-only-gnutls |
| artifacts: true |
| variables: |
| IMAGE: centos7 |
| MAKE_CHECK_ARGS: check |
| |
| # We don't need to exercise every backend with every front-end |
| build-trace-multi-user: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: ubuntu2004 |
| CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system |
| |
| build-trace-ftrace-system: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: ubuntu2004 |
| CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu |
| |
| build-trace-ust-system: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: ubuntu2004 |
| CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu |
| |
| # Check our reduced build configurations |
| build-without-default-devices: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: centos8 |
| CONFIGURE_ARGS: --without-default-devices --disable-user |
| |
| build-without-default-features: |
| <<: *native_build_job_definition |
| variables: |
| IMAGE: debian-amd64 |
| CONFIGURE_ARGS: --without-default-features --disable-user |
| MAKE_CHECK_ARGS: check-unit |
| |
| check-patch: |
| stage: build |
| image: $CI_REGISTRY_IMAGE/qemu/centos8:latest |
| script: .gitlab-ci.d/check-patch.py |
| except: |
| variables: |
| - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master' |
| variables: |
| GIT_DEPTH: 1000 |
| allow_failure: true |
| |
| check-dco: |
| stage: build |
| image: $CI_REGISTRY_IMAGE/qemu/centos8:latest |
| script: .gitlab-ci.d/check-dco.py |
| except: |
| variables: |
| - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master' |
| variables: |
| GIT_DEPTH: 1000 |
| |
| build-libvhost-user: |
| stage: build |
| image: $CI_REGISTRY_IMAGE/qemu/fedora:latest |
| before_script: |
| - dnf install -y meson ninja-build |
| script: |
| - mkdir subprojects/libvhost-user/build |
| - cd subprojects/libvhost-user/build |
| - meson |
| - ninja |
| |
| # Prepare for GitLab pages deployment. Anything copied into the |
| # "public" directory will be deployed to $USER.gitlab.io/$PROJECT |
| pages: |
| image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest |
| stage: test |
| needs: |
| - job: build-tools-and-docs-debian |
| script: |
| - mkdir -p public |
| # HTML-ised source tree |
| - make gtags |
| - htags -anT --tree-view=filetree -m qemu_init |
| -t "Welcome to the QEMU sourcecode" |
| - mv HTML public/src |
| # Project documentation |
| - mv build/docs/index.html public/ |
| - for i in devel interop specs system tools user ; do mv build/docs/$i public/ ; done |
| artifacts: |
| paths: |
| - public |