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