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