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)
21 - sed -i s,git.qemu.org/git,gitlab.com/qemu-project, .gitmodules
25 - if test -n "$TARGETS";
27 ../configure --enable-werror $CONFIGURE_ARGS --target-list="$TARGETS" ;
29 ../configure --enable-werror $CONFIGURE_ARGS ;
30 fi || { cat config.log meson-logs/meson-log.txt && exit 1; }
32 - if test -n "$MAKE_CHECK_ARGS";
34 make -j"$JOBS" $MAKE_CHECK_ARGS ;
37 .native_test_job_template: &native_test_job_definition
39 image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
42 - find . -type f -exec touch {} +
43 - make $MAKE_CHECK_ARGS
45 .acceptance_template: &acceptance_definition
47 key: "${CI_JOB_NAME}-cache"
49 - ${CI_PROJECT_DIR}/avocado-cache
53 - build/tests/results/latest/results.xml
55 junit: build/tests/results/latest/results.xml
57 - mkdir -p ~/.config/avocado
58 - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf
59 - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']"
60 >> ~/.config/avocado/avocado.conf
61 - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then
62 du -chs ${CI_PROJECT_DIR}/avocado-cache ;
64 - export AVOCADO_ALLOW_UNTRUSTED_CODE=1
67 - 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
68 - du -chs ${CI_PROJECT_DIR}/avocado-cache
71 <<: *native_build_job_definition
74 TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
75 moxie-softmmu microblazeel-softmmu mips64el-softmmu
76 MAKE_CHECK_ARGS: check-build
77 CONFIGURE_ARGS: --enable-docs
84 <<: *native_test_job_definition
86 - job: build-system-ubuntu
90 MAKE_CHECK_ARGS: check
92 acceptance-system-ubuntu:
93 <<: *native_test_job_definition
95 - job: build-system-ubuntu
99 MAKE_CHECK_ARGS: check-acceptance
100 <<: *acceptance_definition
103 <<: *native_build_job_definition
106 TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
107 riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
108 MAKE_CHECK_ARGS: check-build
109 CONFIGURE_ARGS: --enable-docs
116 <<: *native_test_job_definition
118 - job: build-system-debian
122 MAKE_CHECK_ARGS: check
124 acceptance-system-debian:
125 <<: *native_test_job_definition
127 - job: build-system-debian
131 MAKE_CHECK_ARGS: check-acceptance
132 <<: *acceptance_definition
135 <<: *native_build_job_definition
138 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
139 TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
140 xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
141 MAKE_CHECK_ARGS: check-build
148 <<: *native_test_job_definition
150 - job: build-system-fedora
154 MAKE_CHECK_ARGS: check
156 acceptance-system-fedora:
157 <<: *native_test_job_definition
159 - job: build-system-fedora
163 MAKE_CHECK_ARGS: check-acceptance
164 <<: *acceptance_definition
167 <<: *native_build_job_definition
170 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
171 TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
172 x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
173 MAKE_CHECK_ARGS: check-build
180 <<: *native_test_job_definition
182 - job: build-system-centos
186 MAKE_CHECK_ARGS: check
188 acceptance-system-centos:
189 <<: *native_test_job_definition
191 - job: build-system-centos
195 MAKE_CHECK_ARGS: check-acceptance
196 <<: *acceptance_definition
199 <<: *native_build_job_definition
202 CONFIGURE_ARGS: --disable-attr --disable-avx2 --disable-bochs
203 --disable-brlapi --disable-bzip2 --disable-cap-ng --disable-capstone
204 --disable-cloop --disable-coroutine-pool --disable-curl --disable-curses
205 --disable-dmg --disable-docs --disable-glusterfs --disable-gnutls
206 --disable-gtk --disable-guest-agent --disable-iconv --disable-kvm
207 --disable-libiscsi --disable-libpmem --disable-libssh --disable-libusb
208 --disable-libxml2 --disable-linux-aio --disable-live-block-migration
209 --disable-lzo --disable-malloc-trim --disable-mpath --disable-nettle
210 --disable-numa --disable-parallels --disable-pie --disable-qcow1
211 --disable-qed --disable-qom-cast-debug --disable-rbd --disable-rdma
212 --disable-replication --disable-sdl --disable-seccomp --disable-sheepdog
213 --disable-slirp --disable-smartcard --disable-snappy --disable-spice
214 --disable-strip --disable-tpm --disable-usb-redir --disable-vdi
215 --disable-vhost-crypto --disable-vhost-net --disable-vhost-scsi
216 --disable-vhost-user --disable-vhost-vdpa --disable-vhost-vsock
217 --disable-virglrenderer --disable-vnc --disable-vte --disable-vvfat
218 --disable-xen --disable-zstd
219 TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
220 s390x-softmmu i386-linux-user
221 MAKE_CHECK_ARGS: check-qtest SPEED=slow
223 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
224 # the configure script. The container doesn't contain Xen headers so
225 # Xen accelerator is not detected / selected. As result it build the
226 # i386-softmmu and x86_64-softmmu with KVM being the single accelerator
229 <<: *native_build_job_definition
235 - ../configure --disable-tcg --audio-drv-list="" || { cat config.log meson-logs/meson-log.txt && exit 1; }
238 - make check-qapi-schema
239 - cd tests/qemu-iotests/
240 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
241 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
242 170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
243 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
244 124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
245 208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
246 260 261 262 263 264 270 272 273 277 279
249 <<: *native_build_job_definition
251 IMAGE: debian-all-test-cross
252 CONFIGURE_ARGS: --disable-tools --disable-system
253 MAKE_CHECK_ARGS: check-tcg
255 # Only build the softmmu targets we have check-tcg tests for
257 <<: *native_build_job_definition
259 IMAGE: debian-all-test-cross
260 CONFIGURE_ARGS: --disable-tools --enable-debug-tcg
261 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
262 MAKE_CHECK_ARGS: check-tcg
264 # Run check-tcg against linux-user (with plugins)
265 # we skip sparc64-linux-user until it has been fixed somewhat
266 # we skip cris-linux-user as it doesn't use the common run loop
268 <<: *native_build_job_definition
270 IMAGE: debian-all-test-cross
271 CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
272 MAKE_CHECK_ARGS: check-tcg
275 build-some-softmmu-plugins:
276 <<: *native_build_job_definition
278 IMAGE: debian-all-test-cross
279 CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg
280 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
281 MAKE_CHECK_ARGS: check-tcg
284 <<: *native_build_job_definition
287 CONFIGURE_ARGS: --cc=clang --cxx=clang++
288 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
289 ppc-softmmu s390x-softmmu arm-linux-user
290 MAKE_CHECK_ARGS: check
292 # These targets are on the way out
294 <<: *native_build_job_definition
296 IMAGE: debian-all-test-cross
297 CONFIGURE_ARGS: --disable-docs --disable-tools
298 MAKE_CHECK_ARGS: build-tcg
299 TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu
306 # We split the check-tcg step as test failures are expected but we still
307 # want to catch the build breaking.
309 <<: *native_test_job_definition
311 - job: build-deprecated
314 IMAGE: debian-all-test-cross
315 MAKE_CHECK_ARGS: check-tcg
319 <<: *native_build_job_definition
323 - mkdir build-oss-fuzz
324 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
325 ./scripts/oss-fuzz/build.sh
326 - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
327 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
329 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
330 echo Testing ${fuzzer} ... ;
331 "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
333 # Unrelated to fuzzer: run some tests with -fsanitize=address
334 - cd build-oss-fuzz && make check-qtest-i386 check-unit
337 <<: *native_build_job_definition
341 - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
344 - ../configure --enable-tcg-interpreter
345 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
347 - make run-tcg-tests-x86_64-softmmu
348 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
349 - for tg in $TARGETS ; do
350 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
351 ./tests/qtest/boot-serial-test || exit 1 ;
352 ./tests/qtest/cdrom-test || exit 1 ;
354 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
355 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
357 # Most jobs test latest gcrypt or nettle builds
359 # These jobs test old gcrypt and nettle from RHEL7
360 # which had some API differences.
361 build-crypto-old-nettle:
362 <<: *native_build_job_definition
365 TARGETS: x86_64-softmmu x86_64-linux-user
366 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
367 MAKE_CHECK_ARGS: check-build
372 check-crypto-old-nettle:
373 <<: *native_test_job_definition
375 - job: build-crypto-old-nettle
379 MAKE_CHECK_ARGS: check
382 build-crypto-old-gcrypt:
383 <<: *native_build_job_definition
386 TARGETS: x86_64-softmmu x86_64-linux-user
387 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
388 MAKE_CHECK_ARGS: check-build
393 check-crypto-old-gcrypt:
394 <<: *native_test_job_definition
396 - job: build-crypto-old-gcrypt
400 MAKE_CHECK_ARGS: check
403 build-crypto-only-gnutls:
404 <<: *native_build_job_definition
407 TARGETS: x86_64-softmmu x86_64-linux-user
408 CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
409 MAKE_CHECK_ARGS: check-build
414 check-crypto-only-gnutls:
415 <<: *native_test_job_definition
417 - job: build-crypto-only-gnutls
421 MAKE_CHECK_ARGS: check
423 # We don't need to exercise every backend with every front-end
424 build-trace-multi-user:
425 <<: *native_build_job_definition
428 CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system
430 build-trace-ftrace-system:
431 <<: *native_build_job_definition
434 CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu
436 build-trace-ust-system:
437 <<: *native_build_job_definition
440 CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu
444 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
445 script: .gitlab-ci.d/check-patch.py
448 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
455 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
456 script: .gitlab-ci.d/check-dco.py
459 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
464 image: $CI_REGISTRY_IMAGE/qemu/ubuntu2004:latest
467 - job: build-system-ubuntu
471 - mv build/docs/index.html public/
472 - for i in devel interop specs system tools user ; do mv build/docs/$i public/ ; done