- build
- test
-# We assume GitLab has it's own caching set up for RPM/APT repositories so we
-# just take care of avocado assets here.
-cache:
- paths:
- - $HOME/avocado/data/cache
-
include:
- local: '/.gitlab-ci.d/edk2.yml'
- local: '/.gitlab-ci.d/opensbi.yml'
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
stage: test
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
script:
+ - scripts/git-submodule.sh update
+ $(grep GIT_SUBMODULES build/config-host.mak | sed 's/GIT_SUBMODULES=//')
- cd build
- find . -type f -exec touch {} +
- - make $MAKE_CHECK_ARGS
+ # Avoid recompiling by hiding ninja with NINJA=":"
+ - make NINJA=":" $MAKE_CHECK_ARGS
.acceptance_template: &acceptance_definition
cache:
- ${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:
- 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
- - python3 -c 'import json; r = json.load(open("tests/results/latest/results.json")); [print(t["logfile"]) for t in r["tests"] if t["status"] not in ("PASS", "SKIP", "CANCEL")]' | xargs cat
- du -chs ${CI_PROJECT_DIR}/avocado-cache
+build-system-alpine:
+ <<: *native_build_job_definition
+ variables:
+ IMAGE: alpine
+ TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
+ moxie-softmmu microblazeel-softmmu mips64el-softmmu
+ MAKE_CHECK_ARGS: check-build
+ CONFIGURE_ARGS: --enable-docs
+ artifacts:
+ expire_in: 2 days
+ paths:
+ - .git-submodule-status
+ - build
+
+check-system-alpine:
+ <<: *native_test_job_definition
+ needs:
+ - job: build-system-alpine
+ artifacts: true
+ variables:
+ IMAGE: alpine
+ MAKE_CHECK_ARGS: check
+
+acceptance-system-alpine:
+ <<: *native_test_job_definition
+ needs:
+ - job: build-system-alpine
+ artifacts: true
+ variables:
+ IMAGE: alpine
+ MAKE_CHECK_ARGS: check-acceptance
+ <<: *acceptance_definition
+
build-system-ubuntu:
<<: *native_build_job_definition
variables:
IMAGE: ubuntu2004
+ CONFIGURE_ARGS: --enable-fdt=system --enable-slirp=system
TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
moxie-softmmu microblazeel-softmmu mips64el-softmmu
MAKE_CHECK_ARGS: check-build
<<: *native_build_job_definition
variables:
IMAGE: debian-amd64
+ CONFIGURE_ARGS: --enable-fdt=system
TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
MAKE_CHECK_ARGS: check-build
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:
<<: *native_build_job_definition
variables:
IMAGE: fedora
- CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
+ CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
+ --enable-fdt=system --enable-slirp=system --enable-capstone=system
TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
MAKE_CHECK_ARGS: check-build
<<: *native_build_job_definition
variables:
IMAGE: centos8
- CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
+ CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
+ --enable-modules
TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
MAKE_CHECK_ARGS: check-build
MAKE_CHECK_ARGS: check-acceptance
<<: *acceptance_definition
+build-system-opensuse:
+ <<: *native_build_job_definition
+ variables:
+ IMAGE: opensuse-leap
+ CONFIGURE_ARGS: --enable-fdt=system
+ 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-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-glusterfs --disable-gnutls
- --disable-gtk --disable-guest-agent --disable-iconv --disable-kvm
- --disable-libiscsi --disable-libpmem --disable-libssh --disable-libusb
- --disable-libxml2 --disable-linux-aio --disable-live-block-migration
- --disable-lzo --disable-malloc-trim --disable-mpath --disable-nettle
- --disable-numa --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-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
+ 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:
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
+ 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
MAKE_CHECK_ARGS: check-tcg
timeout: 1h 30m
-build-clang:
+build-user-centos7:
+ <<: *native_build_job_definition
+ variables:
+ IMAGE: centos7
+ CONFIGURE_ARGS: --disable-system --disable-tools --disable-docs
+ MAKE_CHECK_ARGS: check-tcg
+
+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
+
+clang-system:
<<: *native_build_job_definition
variables:
IMAGE: fedora
CONFIGURE_ARGS: --cc=clang --cxx=clang++
+ --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
- ppc-softmmu s390x-softmmu arm-linux-user
- MAKE_CHECK_ARGS: check
+ ppc-softmmu s390x-softmmu
+ MAKE_CHECK_ARGS: check-qtest check-tcg
+
+clang-user:
+ <<: *native_build_job_definition
+ variables:
+ IMAGE: debian-all-test-cross
+ CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
+ --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
+ --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
+ MAKE_CHECK_ARGS: check-unit check-tcg
+
+tsan-build:
+ <<: *native_build_job_definition
+ variables:
+ IMAGE: ubuntu2004
+ CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10 --disable-docs
+ --enable-fdt=system --enable-slirp=system
+ TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
+ MAKE_CHECK_ARGS: bench V=1
# These targets are on the way out
build-deprecated:
MAKE_CHECK_ARGS: check-tcg
allow_failure: true
+# gprof/gcov are GCC features
+gprof-gcov:
+ <<: *native_build_job_definition
+ variables:
+ IMAGE: ubuntu2004
+ CONFIGURE_ARGS: --enable-gprof --enable-gcov
+ MAKE_CHECK_ARGS: check
+ TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
+ timeout: 70m
+ after_script:
+ - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
+
build-oss-fuzz:
<<: *native_build_job_definition
variables:
- 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
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
+ --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu
+ MAKE_CHECK_ARGS: check-unit
check-patch:
stage: build
- $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
+ - make -C build install DESTDIR=$(pwd)/temp-install
+ - mv temp-install/usr/local/share/doc/qemu/* public/
+ artifacts:
+ paths:
+ - public