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