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