1include: 2 - local: '/.gitlab-ci.d/buildtest-template.yml' 3 4build-system-alpine: 5 extends: 6 - .native_build_job_template 7 - .native_build_artifact_template 8 needs: 9 - job: amd64-alpine-container 10 variables: 11 IMAGE: alpine 12 TARGETS: avr-softmmu loongarch64-softmmu mips64-softmmu mipsel-softmmu 13 MAKE_CHECK_ARGS: check-build 14 CONFIGURE_ARGS: --enable-docs --enable-trace-backends=log,simple,syslog 15 16check-system-alpine: 17 extends: .native_test_job_template 18 needs: 19 - job: build-system-alpine 20 artifacts: true 21 variables: 22 IMAGE: alpine 23 MAKE_CHECK_ARGS: check-unit check-qtest 24 25avocado-system-alpine: 26 extends: .avocado_test_job_template 27 needs: 28 - job: build-system-alpine 29 artifacts: true 30 variables: 31 IMAGE: alpine 32 MAKE_CHECK_ARGS: check-avocado 33 34build-system-ubuntu: 35 extends: 36 - .native_build_job_template 37 - .native_build_artifact_template 38 needs: 39 job: amd64-ubuntu2204-container 40 variables: 41 IMAGE: ubuntu2204 42 CONFIGURE_ARGS: --enable-docs 43 TARGETS: alpha-softmmu cris-softmmu hppa-softmmu 44 microblazeel-softmmu mips64el-softmmu 45 MAKE_CHECK_ARGS: check-build 46 47check-system-ubuntu: 48 extends: .native_test_job_template 49 needs: 50 - job: build-system-ubuntu 51 artifacts: true 52 variables: 53 IMAGE: ubuntu2204 54 MAKE_CHECK_ARGS: check 55 56avocado-system-ubuntu: 57 extends: .avocado_test_job_template 58 needs: 59 - job: build-system-ubuntu 60 artifacts: true 61 variables: 62 IMAGE: ubuntu2204 63 MAKE_CHECK_ARGS: check-avocado 64 65build-system-debian: 66 extends: 67 - .native_build_job_template 68 - .native_build_artifact_template 69 needs: 70 job: amd64-debian-container 71 variables: 72 IMAGE: debian-amd64 73 CONFIGURE_ARGS: --with-coroutine=sigaltstack 74 TARGETS: arm-softmmu i386-softmmu riscv64-softmmu sh4eb-softmmu 75 sparc-softmmu xtensaeb-softmmu 76 MAKE_CHECK_ARGS: check-build 77 78check-system-debian: 79 extends: .native_test_job_template 80 needs: 81 - job: build-system-debian 82 artifacts: true 83 variables: 84 IMAGE: debian-amd64 85 MAKE_CHECK_ARGS: check 86 87avocado-system-debian: 88 extends: .avocado_test_job_template 89 needs: 90 - job: build-system-debian 91 artifacts: true 92 variables: 93 IMAGE: debian-amd64 94 MAKE_CHECK_ARGS: check-avocado 95 96crash-test-debian: 97 extends: .native_test_job_template 98 needs: 99 - job: build-system-debian 100 artifacts: true 101 variables: 102 IMAGE: debian-amd64 103 script: 104 - cd build 105 - make NINJA=":" check-venv 106 - tests/venv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386 107 108build-system-fedora: 109 extends: 110 - .native_build_job_template 111 - .native_build_artifact_template 112 needs: 113 job: amd64-fedora-container 114 variables: 115 IMAGE: fedora 116 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs 117 TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu 118 xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu 119 MAKE_CHECK_ARGS: check-build 120 121check-system-fedora: 122 extends: .native_test_job_template 123 needs: 124 - job: build-system-fedora 125 artifacts: true 126 variables: 127 IMAGE: fedora 128 MAKE_CHECK_ARGS: check 129 130avocado-system-fedora: 131 extends: .avocado_test_job_template 132 needs: 133 - job: build-system-fedora 134 artifacts: true 135 variables: 136 IMAGE: fedora 137 MAKE_CHECK_ARGS: check-avocado 138 139crash-test-fedora: 140 extends: .native_test_job_template 141 needs: 142 - job: build-system-fedora 143 artifacts: true 144 variables: 145 IMAGE: fedora 146 script: 147 - cd build 148 - make NINJA=":" check-venv 149 - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc 150 - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32 151 152build-system-centos: 153 extends: 154 - .native_build_job_template 155 - .native_build_artifact_template 156 needs: 157 job: amd64-centos8-container 158 variables: 159 IMAGE: centos8 160 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-vfio-user-server 161 --enable-modules --enable-trace-backends=dtrace --enable-docs 162 TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu 163 x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu 164 MAKE_CHECK_ARGS: check-build 165 166check-system-centos: 167 extends: .native_test_job_template 168 needs: 169 - job: build-system-centos 170 artifacts: true 171 variables: 172 IMAGE: centos8 173 MAKE_CHECK_ARGS: check 174 175avocado-system-centos: 176 extends: .avocado_test_job_template 177 needs: 178 - job: build-system-centos 179 artifacts: true 180 variables: 181 IMAGE: centos8 182 MAKE_CHECK_ARGS: check-avocado 183 184build-system-opensuse: 185 extends: 186 - .native_build_job_template 187 - .native_build_artifact_template 188 needs: 189 job: amd64-opensuse-leap-container 190 variables: 191 IMAGE: opensuse-leap 192 TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu 193 MAKE_CHECK_ARGS: check-build 194 195check-system-opensuse: 196 extends: .native_test_job_template 197 needs: 198 - job: build-system-opensuse 199 artifacts: true 200 variables: 201 IMAGE: opensuse-leap 202 MAKE_CHECK_ARGS: check 203 204avocado-system-opensuse: 205 extends: .avocado_test_job_template 206 needs: 207 - job: build-system-opensuse 208 artifacts: true 209 variables: 210 IMAGE: opensuse-leap 211 MAKE_CHECK_ARGS: check-avocado 212 213 214# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by 215# the configure script. The container doesn't contain Xen headers so 216# Xen accelerator is not detected / selected. As result it build the 217# i386-softmmu and x86_64-softmmu with KVM being the single accelerator 218# available. 219# Also use a different coroutine implementation (which is only really of 220# interest to KVM users, i.e. with TCG disabled) 221build-tcg-disabled: 222 extends: .native_build_job_template 223 needs: 224 job: amd64-centos8-container 225 variables: 226 IMAGE: centos8 227 script: 228 - mkdir build 229 - cd build 230 - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext 231 --disable-docs --disable-sdl --disable-gtk --disable-vnc 232 || { cat config.log meson-logs/meson-log.txt && exit 1; } 233 - make -j"$JOBS" 234 - make check-unit 235 - make check-qapi-schema 236 - cd tests/qemu-iotests/ 237 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048 238 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163 239 170 171 183 184 192 194 208 221 226 227 236 253 277 image-fleecing 240 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122 241 124 132 139 142 144 145 151 152 155 157 165 194 196 200 202 242 208 209 216 218 227 234 246 247 248 250 254 255 257 258 243 260 261 262 263 264 270 272 273 277 279 image-fleecing 244 245build-user: 246 extends: .native_build_job_template 247 needs: 248 job: amd64-debian-user-cross-container 249 variables: 250 IMAGE: debian-all-test-cross 251 CONFIGURE_ARGS: --disable-tools --disable-system 252 MAKE_CHECK_ARGS: check-tcg 253 254build-user-static: 255 extends: .native_build_job_template 256 needs: 257 job: amd64-debian-user-cross-container 258 variables: 259 IMAGE: debian-all-test-cross 260 CONFIGURE_ARGS: --disable-tools --disable-system --static 261 MAKE_CHECK_ARGS: check-tcg 262 263build-user-hexagon: 264 extends: .native_build_job_template 265 needs: 266 job: hexagon-cross-container 267 variables: 268 IMAGE: debian-hexagon-cross 269 TARGETS: hexagon-linux-user 270 CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg 271 MAKE_CHECK_ARGS: check-tcg 272 273# Only build the softmmu targets we have check-tcg tests for 274build-some-softmmu: 275 extends: .native_build_job_template 276 needs: 277 job: amd64-debian-user-cross-container 278 variables: 279 IMAGE: debian-all-test-cross 280 CONFIGURE_ARGS: --disable-tools --enable-debug 281 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu 282 MAKE_CHECK_ARGS: check-tcg 283 284# We build tricore in a very minimal tricore only container 285build-tricore-softmmu: 286 extends: .native_build_job_template 287 needs: 288 job: tricore-debian-cross-container 289 variables: 290 IMAGE: debian-tricore-cross 291 CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug 292 TARGETS: tricore-softmmu 293 MAKE_CHECK_ARGS: check-tcg 294 295clang-system: 296 extends: .native_build_job_template 297 needs: 298 job: amd64-fedora-container 299 variables: 300 IMAGE: fedora 301 CONFIGURE_ARGS: --cc=clang --cxx=clang++ 302 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 303 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu s390x-softmmu 304 MAKE_CHECK_ARGS: check-qtest check-tcg 305 306clang-user: 307 extends: .native_build_job_template 308 needs: 309 job: amd64-debian-user-cross-container 310 timeout: 70m 311 variables: 312 IMAGE: debian-all-test-cross 313 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system 314 --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user 315 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 316 MAKE_CHECK_ARGS: check-unit check-tcg 317 318# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory. 319# On gitlab runners, default value sometimes end up calling 2 lds concurrently and 320# triggers an Out-Of-Memory error 321# 322# Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with 323# CFI builds, and thus have to disable it here. 324# 325# Split in three sets of build/check/avocado to limit the execution time of each 326# job 327build-cfi-aarch64: 328 extends: 329 - .native_build_job_template 330 - .native_build_artifact_template 331 needs: 332 - job: amd64-fedora-container 333 variables: 334 LD_JOBS: 1 335 AR: llvm-ar 336 IMAGE: fedora 337 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 338 --enable-safe-stack --disable-slirp 339 TARGETS: aarch64-softmmu 340 MAKE_CHECK_ARGS: check-build 341 # FIXME: This job is often failing, likely due to out-of-memory problems in 342 # the constrained containers of the shared runners. Thus this is marked as 343 # skipped until the situation has been solved. 344 QEMU_JOB_SKIPPED: 1 345 timeout: 90m 346 347check-cfi-aarch64: 348 extends: .native_test_job_template 349 needs: 350 - job: build-cfi-aarch64 351 artifacts: true 352 variables: 353 IMAGE: fedora 354 MAKE_CHECK_ARGS: check 355 356avocado-cfi-aarch64: 357 extends: .avocado_test_job_template 358 needs: 359 - job: build-cfi-aarch64 360 artifacts: true 361 variables: 362 IMAGE: fedora 363 MAKE_CHECK_ARGS: check-avocado 364 365build-cfi-ppc64-s390x: 366 extends: 367 - .native_build_job_template 368 - .native_build_artifact_template 369 needs: 370 - job: amd64-fedora-container 371 variables: 372 LD_JOBS: 1 373 AR: llvm-ar 374 IMAGE: fedora 375 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 376 --enable-safe-stack --disable-slirp 377 TARGETS: ppc64-softmmu s390x-softmmu 378 MAKE_CHECK_ARGS: check-build 379 # FIXME: This job is often failing, likely due to out-of-memory problems in 380 # the constrained containers of the shared runners. Thus this is marked as 381 # skipped until the situation has been solved. 382 QEMU_JOB_SKIPPED: 1 383 timeout: 80m 384 385check-cfi-ppc64-s390x: 386 extends: .native_test_job_template 387 needs: 388 - job: build-cfi-ppc64-s390x 389 artifacts: true 390 variables: 391 IMAGE: fedora 392 MAKE_CHECK_ARGS: check 393 394avocado-cfi-ppc64-s390x: 395 extends: .avocado_test_job_template 396 needs: 397 - job: build-cfi-ppc64-s390x 398 artifacts: true 399 variables: 400 IMAGE: fedora 401 MAKE_CHECK_ARGS: check-avocado 402 403build-cfi-x86_64: 404 extends: 405 - .native_build_job_template 406 - .native_build_artifact_template 407 needs: 408 - job: amd64-fedora-container 409 variables: 410 LD_JOBS: 1 411 AR: llvm-ar 412 IMAGE: fedora 413 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 414 --enable-safe-stack --disable-slirp 415 TARGETS: x86_64-softmmu 416 MAKE_CHECK_ARGS: check-build 417 timeout: 70m 418 419check-cfi-x86_64: 420 extends: .native_test_job_template 421 needs: 422 - job: build-cfi-x86_64 423 artifacts: true 424 variables: 425 IMAGE: fedora 426 MAKE_CHECK_ARGS: check 427 428avocado-cfi-x86_64: 429 extends: .avocado_test_job_template 430 needs: 431 - job: build-cfi-x86_64 432 artifacts: true 433 variables: 434 IMAGE: fedora 435 MAKE_CHECK_ARGS: check-avocado 436 437tsan-build: 438 extends: .native_build_job_template 439 needs: 440 job: amd64-ubuntu2204-container 441 variables: 442 IMAGE: ubuntu2204 443 CONFIGURE_ARGS: --enable-tsan --cc=clang --cxx=clang++ 444 --enable-trace-backends=ust --disable-slirp 445 TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user 446 447# gcov is a GCC features 448gcov: 449 extends: .native_build_job_template 450 needs: 451 job: amd64-ubuntu2204-container 452 timeout: 80m 453 variables: 454 IMAGE: ubuntu2204 455 CONFIGURE_ARGS: --enable-gcov 456 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu 457 MAKE_CHECK_ARGS: check 458 after_script: 459 - cd build 460 - gcovr --xml-pretty --exclude-unreachable-branches --print-summary 461 -o coverage.xml --root ${CI_PROJECT_DIR} . *.p 462 coverage: /^\s*lines:\s*\d+.\d+\%/ 463 artifacts: 464 name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA} 465 expire_in: 2 days 466 reports: 467 coverage_report: 468 coverage_format: cobertura 469 path: build/coverage.xml 470 471build-oss-fuzz: 472 extends: .native_build_job_template 473 needs: 474 job: amd64-fedora-container 475 variables: 476 IMAGE: fedora 477 script: 478 - mkdir build-oss-fuzz 479 - export LSAN_OPTIONS=suppressions=scripts/oss-fuzz/lsan_suppressions.txt 480 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address" 481 ./scripts/oss-fuzz/build.sh 482 - export ASAN_OPTIONS="fast_unwind_on_malloc=0" 483 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f 484 | grep -v slirp); do 485 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ; 486 echo Testing ${fuzzer} ... ; 487 "${fuzzer}" -runs=1 -seed=1 || exit 1 ; 488 done 489 490build-tci: 491 extends: .native_build_job_template 492 needs: 493 job: amd64-debian-user-cross-container 494 variables: 495 IMAGE: debian-all-test-cross 496 script: 497 - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64" 498 - mkdir build 499 - cd build 500 - ../configure --enable-tcg-interpreter --disable-docs --disable-gtk --disable-vnc 501 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" 502 || { cat config.log meson-logs/meson-log.txt && exit 1; } 503 - make -j"$JOBS" 504 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test 505 - for tg in $TARGETS ; do 506 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ; 507 ./tests/qtest/boot-serial-test || exit 1 ; 508 ./tests/qtest/cdrom-test || exit 1 ; 509 done 510 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test 511 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow 512 - make check-tcg 513 514# Check our reduced build configurations 515build-without-defaults: 516 extends: .native_build_job_template 517 needs: 518 job: amd64-centos8-container 519 variables: 520 IMAGE: centos8 521 CONFIGURE_ARGS: 522 --without-default-devices 523 --without-default-features 524 --disable-fdt 525 --disable-pie 526 --disable-qom-cast-debug 527 --disable-strip 528 TARGETS: avr-softmmu mips64-softmmu s390x-softmmu sh4-softmmu 529 sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user 530 MAKE_CHECK_ARGS: check 531 532build-libvhost-user: 533 extends: .base_job_template 534 stage: build 535 image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG 536 needs: 537 job: amd64-fedora-container 538 script: 539 - mkdir subprojects/libvhost-user/build 540 - cd subprojects/libvhost-user/build 541 - meson 542 - ninja 543 544# No targets are built here, just tools, docs, and unit tests. This 545# also feeds into the eventual documentation deployment steps later 546build-tools-and-docs-debian: 547 extends: 548 - .native_build_job_template 549 - .native_build_artifact_template 550 needs: 551 job: amd64-debian-container 552 # when running on 'master' we use pre-existing container 553 optional: true 554 variables: 555 IMAGE: debian-amd64 556 MAKE_CHECK_ARGS: check-unit ctags TAGS cscope 557 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools 558 QEMU_JOB_PUBLISH: 1 559 560# Prepare for GitLab pages deployment. Anything copied into the 561# "public" directory will be deployed to $USER.gitlab.io/$PROJECT 562# 563# GitLab publishes from any branch that triggers a CI pipeline 564# 565# For the main repo we don't want to publish from 'staging' 566# since that content may not be pushed, nor do we wish to 567# publish from 'stable-NNN' branches as that content is outdated. 568# Thus we restrict to just the default branch 569# 570# For contributor forks we want to publish from any repo so 571# that users can see the results of their commits, regardless 572# of what topic branch they're currently using 573pages: 574 extends: .base_job_template 575 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:$QEMU_CI_CONTAINER_TAG 576 stage: test 577 needs: 578 - job: build-tools-and-docs-debian 579 script: 580 - mkdir -p public 581 # HTML-ised source tree 582 - make gtags 583 - htags -anT --tree-view=filetree -m qemu_init 584 -t "Welcome to the QEMU sourcecode" 585 - mv HTML public/src 586 # Project documentation 587 - make -C build install DESTDIR=$(pwd)/temp-install 588 - mv temp-install/usr/local/share/doc/qemu/* public/ 589 artifacts: 590 paths: 591 - public 592 variables: 593 QEMU_JOB_PUBLISH: 1 594