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) 4stages: 5 - containers 6 - containers-layer2 7 - build 8 - test 9 10include: 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' 15 16.native_build_job_template: &native_build_job_definition 17 stage: build 18 image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest 19 before_script: 20 - JOBS=$(expr $(nproc) + 1) 21 - sed -i s,git.qemu.org/git,gitlab.com/qemu-project, .gitmodules 22 script: 23 - mkdir build 24 - cd build 25 - if test -n "$TARGETS"; 26 then 27 ../configure --enable-werror $CONFIGURE_ARGS --target-list="$TARGETS" ; 28 else 29 ../configure --enable-werror $CONFIGURE_ARGS ; 30 fi || { cat config.log meson-logs/meson-log.txt && exit 1; } 31 - make -j"$JOBS" 32 - if test -n "$MAKE_CHECK_ARGS"; 33 then 34 make -j"$JOBS" $MAKE_CHECK_ARGS ; 35 fi 36 37.native_test_job_template: &native_test_job_definition 38 stage: test 39 image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest 40 script: 41 - cd build 42 - find . -type f -exec touch {} + 43 - make $MAKE_CHECK_ARGS 44 45.acceptance_template: &acceptance_definition 46 cache: 47 key: "${CI_JOB_NAME}-cache" 48 paths: 49 - ${CI_PROJECT_DIR}/avocado-cache 50 policy: pull-push 51 artifacts: 52 paths: 53 - build/tests/results/latest/results.xml 54 reports: 55 junit: build/tests/results/latest/results.xml 56 before_script: 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 ; 63 fi 64 - export AVOCADO_ALLOW_UNTRUSTED_CODE=1 65 after_script: 66 - cd build 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 69 70build-system-ubuntu: 71 <<: *native_build_job_definition 72 variables: 73 IMAGE: ubuntu2004 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 78 artifacts: 79 expire_in: 2 days 80 paths: 81 - build 82 83check-system-ubuntu: 84 <<: *native_test_job_definition 85 needs: 86 - job: build-system-ubuntu 87 artifacts: true 88 variables: 89 IMAGE: ubuntu2004 90 MAKE_CHECK_ARGS: check 91 92acceptance-system-ubuntu: 93 <<: *native_test_job_definition 94 needs: 95 - job: build-system-ubuntu 96 artifacts: true 97 variables: 98 IMAGE: ubuntu2004 99 MAKE_CHECK_ARGS: check-acceptance 100 <<: *acceptance_definition 101 102build-system-debian: 103 <<: *native_build_job_definition 104 variables: 105 IMAGE: debian-amd64 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 110 artifacts: 111 expire_in: 2 days 112 paths: 113 - build 114 115check-system-debian: 116 <<: *native_test_job_definition 117 needs: 118 - job: build-system-debian 119 artifacts: true 120 variables: 121 IMAGE: debian-amd64 122 MAKE_CHECK_ARGS: check 123 124acceptance-system-debian: 125 <<: *native_test_job_definition 126 needs: 127 - job: build-system-debian 128 artifacts: true 129 variables: 130 IMAGE: debian-amd64 131 MAKE_CHECK_ARGS: check-acceptance 132 <<: *acceptance_definition 133 134build-system-fedora: 135 <<: *native_build_job_definition 136 variables: 137 IMAGE: fedora 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 142 artifacts: 143 expire_in: 2 days 144 paths: 145 - build 146 147check-system-fedora: 148 <<: *native_test_job_definition 149 needs: 150 - job: build-system-fedora 151 artifacts: true 152 variables: 153 IMAGE: fedora 154 MAKE_CHECK_ARGS: check 155 156acceptance-system-fedora: 157 <<: *native_test_job_definition 158 needs: 159 - job: build-system-fedora 160 artifacts: true 161 variables: 162 IMAGE: fedora 163 MAKE_CHECK_ARGS: check-acceptance 164 <<: *acceptance_definition 165 166build-system-centos: 167 <<: *native_build_job_definition 168 variables: 169 IMAGE: centos8 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 174 artifacts: 175 expire_in: 2 days 176 paths: 177 - build 178 179check-system-centos: 180 <<: *native_test_job_definition 181 needs: 182 - job: build-system-centos 183 artifacts: true 184 variables: 185 IMAGE: centos8 186 MAKE_CHECK_ARGS: check 187 188acceptance-system-centos: 189 <<: *native_test_job_definition 190 needs: 191 - job: build-system-centos 192 artifacts: true 193 variables: 194 IMAGE: centos8 195 MAKE_CHECK_ARGS: check-acceptance 196 <<: *acceptance_definition 197 198build-disabled: 199 <<: *native_build_job_definition 200 variables: 201 IMAGE: fedora 202 CONFIGURE_ARGS: 203 --disable-attr 204 --disable-auth-pam 205 --disable-avx2 206 --disable-bochs 207 --disable-brlapi 208 --disable-bzip2 209 --disable-cap-ng 210 --disable-capstone 211 --disable-cloop 212 --disable-coroutine-pool 213 --disable-curl 214 --disable-curses 215 --disable-dmg 216 --disable-docs 217 --disable-gcrypt 218 --disable-glusterfs 219 --disable-gnutls 220 --disable-gtk 221 --disable-guest-agent 222 --disable-iconv 223 --disable-keyring 224 --disable-kvm 225 --disable-libiscsi 226 --disable-libpmem 227 --disable-libssh 228 --disable-libudev 229 --disable-libusb 230 --disable-libxml2 231 --disable-linux-aio 232 --disable-live-block-migration 233 --disable-lzo 234 --disable-malloc-trim 235 --disable-mpath 236 --disable-nettle 237 --disable-numa 238 --disable-opengl 239 --disable-parallels 240 --disable-pie 241 --disable-qcow1 242 --disable-qed 243 --disable-qom-cast-debug 244 --disable-rbd 245 --disable-rdma 246 --disable-replication 247 --disable-sdl 248 --disable-seccomp 249 --disable-sheepdog 250 --disable-slirp 251 --disable-smartcard 252 --disable-snappy 253 --disable-sparse 254 --disable-spice 255 --disable-strip 256 --disable-tpm 257 --disable-usb-redir 258 --disable-vdi 259 --disable-vhost-crypto 260 --disable-vhost-net 261 --disable-vhost-scsi 262 --disable-vhost-user 263 --disable-vhost-vdpa 264 --disable-vhost-vsock 265 --disable-virglrenderer 266 --disable-vnc 267 --disable-vte 268 --disable-vvfat 269 --disable-xen 270 --disable-zstd 271 TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu 272 s390x-softmmu i386-linux-user 273 MAKE_CHECK_ARGS: check-qtest SPEED=slow 274 275# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by 276# the configure script. The container doesn't contain Xen headers so 277# Xen accelerator is not detected / selected. As result it build the 278# i386-softmmu and x86_64-softmmu with KVM being the single accelerator 279# available. 280build-tcg-disabled: 281 <<: *native_build_job_definition 282 variables: 283 IMAGE: centos8 284 script: 285 - mkdir build 286 - cd build 287 - ../configure --disable-tcg --audio-drv-list="" || { cat config.log meson-logs/meson-log.txt && exit 1; } 288 - make -j"$JOBS" 289 - make check-unit 290 - make check-qapi-schema 291 - cd tests/qemu-iotests/ 292 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048 293 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163 294 170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277 295 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122 296 124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202 297 208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258 298 260 261 262 263 264 270 272 273 277 279 299 300build-user: 301 <<: *native_build_job_definition 302 variables: 303 IMAGE: debian-all-test-cross 304 CONFIGURE_ARGS: --disable-tools --disable-system 305 MAKE_CHECK_ARGS: check-tcg 306 307build-user-static: 308 <<: *native_build_job_definition 309 variables: 310 IMAGE: debian-all-test-cross 311 CONFIGURE_ARGS: --disable-tools --disable-system --static 312 MAKE_CHECK_ARGS: check-tcg 313 314# Only build the softmmu targets we have check-tcg tests for 315build-some-softmmu: 316 <<: *native_build_job_definition 317 variables: 318 IMAGE: debian-all-test-cross 319 CONFIGURE_ARGS: --disable-tools --enable-debug-tcg 320 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu 321 MAKE_CHECK_ARGS: check-tcg 322 323# Run check-tcg against linux-user (with plugins) 324# we skip sparc64-linux-user until it has been fixed somewhat 325# we skip cris-linux-user as it doesn't use the common run loop 326build-user-plugins: 327 <<: *native_build_job_definition 328 variables: 329 IMAGE: debian-all-test-cross 330 CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user 331 MAKE_CHECK_ARGS: check-tcg 332 timeout: 1h 30m 333 334build-some-softmmu-plugins: 335 <<: *native_build_job_definition 336 variables: 337 IMAGE: debian-all-test-cross 338 CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg 339 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu 340 MAKE_CHECK_ARGS: check-tcg 341 342build-clang: 343 <<: *native_build_job_definition 344 variables: 345 IMAGE: fedora 346 CONFIGURE_ARGS: --cc=clang --cxx=clang++ 347 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu 348 ppc-softmmu s390x-softmmu arm-linux-user 349 MAKE_CHECK_ARGS: check 350 351# These targets are on the way out 352build-deprecated: 353 <<: *native_build_job_definition 354 variables: 355 IMAGE: debian-all-test-cross 356 CONFIGURE_ARGS: --disable-docs --disable-tools 357 MAKE_CHECK_ARGS: build-tcg 358 TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu 359 unicore32-softmmu 360 artifacts: 361 expire_in: 2 days 362 paths: 363 - build 364 365# We split the check-tcg step as test failures are expected but we still 366# want to catch the build breaking. 367check-deprecated: 368 <<: *native_test_job_definition 369 needs: 370 - job: build-deprecated 371 artifacts: true 372 variables: 373 IMAGE: debian-all-test-cross 374 MAKE_CHECK_ARGS: check-tcg 375 allow_failure: true 376 377build-oss-fuzz: 378 <<: *native_build_job_definition 379 variables: 380 IMAGE: fedora 381 script: 382 - mkdir build-oss-fuzz 383 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address" 384 ./scripts/oss-fuzz/build.sh 385 - export ASAN_OPTIONS="fast_unwind_on_malloc=0" 386 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f 387 | grep -v slirp); do 388 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ; 389 echo Testing ${fuzzer} ... ; 390 "${fuzzer}" -runs=1 -seed=1 || exit 1 ; 391 done 392 # Unrelated to fuzzer: run some tests with -fsanitize=address 393 - cd build-oss-fuzz && make check-qtest-i386 check-unit 394 395build-tci: 396 <<: *native_build_job_definition 397 variables: 398 IMAGE: fedora 399 script: 400 - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64" 401 - mkdir build 402 - cd build 403 - ../configure --enable-tcg-interpreter 404 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; } 405 - make -j"$JOBS" 406 - make run-tcg-tests-x86_64-softmmu 407 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test 408 - for tg in $TARGETS ; do 409 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ; 410 ./tests/qtest/boot-serial-test || exit 1 ; 411 ./tests/qtest/cdrom-test || exit 1 ; 412 done 413 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test 414 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow 415 416# Alternate coroutines implementations are only really of interest to KVM users 417# However we can't test against KVM on Gitlab-CI so we can only run unit tests 418build-coroutine-ucontext: 419 <<: *native_build_job_definition 420 variables: 421 IMAGE: ubuntu2004 422 CONFIGURE_ARGS: --with-coroutine=ucontext --disable-tcg 423 MAKE_CHECK_ARGS: check-unit 424 425build-coroutine-sigaltstack: 426 <<: *native_build_job_definition 427 variables: 428 IMAGE: ubuntu2004 429 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg 430 MAKE_CHECK_ARGS: check-unit 431 432# Most jobs test latest gcrypt or nettle builds 433# 434# These jobs test old gcrypt and nettle from RHEL7 435# which had some API differences. 436build-crypto-old-nettle: 437 <<: *native_build_job_definition 438 variables: 439 IMAGE: centos7 440 TARGETS: x86_64-softmmu x86_64-linux-user 441 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle 442 MAKE_CHECK_ARGS: check-build 443 artifacts: 444 paths: 445 - build 446 447check-crypto-old-nettle: 448 <<: *native_test_job_definition 449 needs: 450 - job: build-crypto-old-nettle 451 artifacts: true 452 variables: 453 IMAGE: centos7 454 MAKE_CHECK_ARGS: check 455 456 457build-crypto-old-gcrypt: 458 <<: *native_build_job_definition 459 variables: 460 IMAGE: centos7 461 TARGETS: x86_64-softmmu x86_64-linux-user 462 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt 463 MAKE_CHECK_ARGS: check-build 464 artifacts: 465 paths: 466 - build 467 468check-crypto-old-gcrypt: 469 <<: *native_test_job_definition 470 needs: 471 - job: build-crypto-old-gcrypt 472 artifacts: true 473 variables: 474 IMAGE: centos7 475 MAKE_CHECK_ARGS: check 476 477 478build-crypto-only-gnutls: 479 <<: *native_build_job_definition 480 variables: 481 IMAGE: centos7 482 TARGETS: x86_64-softmmu x86_64-linux-user 483 CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls 484 MAKE_CHECK_ARGS: check-build 485 artifacts: 486 paths: 487 - build 488 489check-crypto-only-gnutls: 490 <<: *native_test_job_definition 491 needs: 492 - job: build-crypto-only-gnutls 493 artifacts: true 494 variables: 495 IMAGE: centos7 496 MAKE_CHECK_ARGS: check 497 498# We don't need to exercise every backend with every front-end 499build-trace-multi-user: 500 <<: *native_build_job_definition 501 variables: 502 IMAGE: ubuntu2004 503 CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system 504 505build-trace-ftrace-system: 506 <<: *native_build_job_definition 507 variables: 508 IMAGE: ubuntu2004 509 CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu 510 511build-trace-ust-system: 512 <<: *native_build_job_definition 513 variables: 514 IMAGE: ubuntu2004 515 CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu 516 517check-patch: 518 stage: build 519 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest 520 script: .gitlab-ci.d/check-patch.py 521 except: 522 variables: 523 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master' 524 variables: 525 GIT_DEPTH: 1000 526 allow_failure: true 527 528check-dco: 529 stage: build 530 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest 531 script: .gitlab-ci.d/check-dco.py 532 except: 533 variables: 534 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master' 535 variables: 536 GIT_DEPTH: 1000 537 538build-libvhost-user: 539 stage: build 540 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest 541 before_script: 542 - dnf install -y meson ninja-build 543 script: 544 - mkdir subprojects/libvhost-user/build 545 - cd subprojects/libvhost-user/build 546 - meson 547 - ninja 548 549pages: 550 image: $CI_REGISTRY_IMAGE/qemu/ubuntu2004:latest 551 stage: test 552 needs: 553 - job: build-system-ubuntu 554 artifacts: true 555 script: 556 - mkdir public 557 - mv build/docs/index.html public/ 558 - for i in devel interop specs system tools user ; do mv build/docs/$i public/ ; done 559 artifacts: 560 paths: 561 - public 562