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 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, slirp needs to be compiled together 342# with QEMU and linked as a static library to avoid false positives in CFI checks. 343# This can be accomplished by using -enable-slirp=git, which avoids the use of 344# a system-wide version of the library 345# 346# Split in three sets of build/check/avocado to limit the execution time of each 347# job 348build-cfi-aarch64: 349 extends: .native_build_job_template 350 needs: 351 - job: amd64-fedora-container 352 variables: 353 LD_JOBS: 1 354 AR: llvm-ar 355 IMAGE: fedora 356 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 357 --enable-safe-stack --enable-slirp=git 358 TARGETS: aarch64-softmmu 359 MAKE_CHECK_ARGS: check-build 360 # FIXME: This job is often failing, likely due to out-of-memory problems in 361 # the constrained containers of the shared runners. Thus this is marked as 362 # skipped until the situation has been solved. 363 QEMU_JOB_SKIPPED: 1 364 timeout: 90m 365 artifacts: 366 expire_in: 2 days 367 paths: 368 - build 369 370check-cfi-aarch64: 371 extends: .native_test_job_template 372 needs: 373 - job: build-cfi-aarch64 374 artifacts: true 375 variables: 376 IMAGE: fedora 377 MAKE_CHECK_ARGS: check 378 379avocado-cfi-aarch64: 380 extends: .avocado_test_job_template 381 needs: 382 - job: build-cfi-aarch64 383 artifacts: true 384 variables: 385 IMAGE: fedora 386 MAKE_CHECK_ARGS: check-avocado 387 388build-cfi-ppc64-s390x: 389 extends: .native_build_job_template 390 needs: 391 - job: amd64-fedora-container 392 variables: 393 LD_JOBS: 1 394 AR: llvm-ar 395 IMAGE: fedora 396 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 397 --enable-safe-stack --enable-slirp=git 398 TARGETS: ppc64-softmmu s390x-softmmu 399 MAKE_CHECK_ARGS: check-build 400 # FIXME: This job is often failing, likely due to out-of-memory problems in 401 # the constrained containers of the shared runners. Thus this is marked as 402 # skipped until the situation has been solved. 403 QEMU_JOB_SKIPPED: 1 404 timeout: 80m 405 artifacts: 406 expire_in: 2 days 407 paths: 408 - build 409 410check-cfi-ppc64-s390x: 411 extends: .native_test_job_template 412 needs: 413 - job: build-cfi-ppc64-s390x 414 artifacts: true 415 variables: 416 IMAGE: fedora 417 MAKE_CHECK_ARGS: check 418 419avocado-cfi-ppc64-s390x: 420 extends: .avocado_test_job_template 421 needs: 422 - job: build-cfi-ppc64-s390x 423 artifacts: true 424 variables: 425 IMAGE: fedora 426 MAKE_CHECK_ARGS: check-avocado 427 428build-cfi-x86_64: 429 extends: .native_build_job_template 430 needs: 431 - job: amd64-fedora-container 432 variables: 433 LD_JOBS: 1 434 AR: llvm-ar 435 IMAGE: fedora 436 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 437 --enable-safe-stack --enable-slirp=git 438 TARGETS: x86_64-softmmu 439 MAKE_CHECK_ARGS: check-build 440 timeout: 70m 441 artifacts: 442 expire_in: 2 days 443 paths: 444 - build 445 446check-cfi-x86_64: 447 extends: .native_test_job_template 448 needs: 449 - job: build-cfi-x86_64 450 artifacts: true 451 variables: 452 IMAGE: fedora 453 MAKE_CHECK_ARGS: check 454 455avocado-cfi-x86_64: 456 extends: .avocado_test_job_template 457 needs: 458 - job: build-cfi-x86_64 459 artifacts: true 460 variables: 461 IMAGE: fedora 462 MAKE_CHECK_ARGS: check-avocado 463 464tsan-build: 465 extends: .native_build_job_template 466 needs: 467 job: amd64-ubuntu2004-container 468 variables: 469 IMAGE: ubuntu2004 470 CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10 471 --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system 472 TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user 473 MAKE_CHECK_ARGS: bench V=1 474 475# gprof/gcov are GCC features 476build-gprof-gcov: 477 extends: .native_build_job_template 478 needs: 479 job: amd64-ubuntu2004-container 480 variables: 481 IMAGE: ubuntu2004 482 CONFIGURE_ARGS: --enable-gprof --enable-gcov 483 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu 484 artifacts: 485 expire_in: 1 days 486 paths: 487 - build 488 489check-gprof-gcov: 490 extends: .native_test_job_template 491 needs: 492 - job: build-gprof-gcov 493 artifacts: true 494 variables: 495 IMAGE: ubuntu2004 496 MAKE_CHECK_ARGS: check 497 after_script: 498 - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh 499 500build-oss-fuzz: 501 extends: .native_build_job_template 502 needs: 503 job: amd64-fedora-container 504 variables: 505 IMAGE: fedora 506 script: 507 - mkdir build-oss-fuzz 508 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address" 509 ./scripts/oss-fuzz/build.sh 510 - export ASAN_OPTIONS="fast_unwind_on_malloc=0" 511 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f 512 | grep -v slirp); do 513 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ; 514 echo Testing ${fuzzer} ... ; 515 "${fuzzer}" -runs=1 -seed=1 || exit 1 ; 516 done 517 518build-tci: 519 extends: .native_build_job_template 520 needs: 521 job: amd64-debian-user-cross-container 522 variables: 523 IMAGE: debian-all-test-cross 524 script: 525 - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64" 526 - mkdir build 527 - cd build 528 - ../configure --enable-tcg-interpreter 529 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; } 530 - make -j"$JOBS" 531 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test 532 - for tg in $TARGETS ; do 533 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ; 534 ./tests/qtest/boot-serial-test || exit 1 ; 535 ./tests/qtest/cdrom-test || exit 1 ; 536 done 537 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test 538 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow 539 - make check-tcg 540 541# Alternate coroutines implementations are only really of interest to KVM users 542# However we can't test against KVM on Gitlab-CI so we can only run unit tests 543build-coroutine-sigaltstack: 544 extends: .native_build_job_template 545 needs: 546 job: amd64-ubuntu2004-container 547 variables: 548 IMAGE: ubuntu2004 549 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg 550 --enable-trace-backends=ftrace 551 MAKE_CHECK_ARGS: check-unit 552 553# Check our reduced build configurations 554build-without-default-devices: 555 extends: .native_build_job_template 556 needs: 557 job: amd64-centos8-container 558 variables: 559 IMAGE: centos8 560 CONFIGURE_ARGS: --without-default-devices --disable-user 561 562build-without-default-features: 563 extends: .native_build_job_template 564 needs: 565 job: amd64-fedora-container 566 variables: 567 IMAGE: fedora 568 CONFIGURE_ARGS: 569 --without-default-features 570 --disable-capstone 571 --disable-pie 572 --disable-qom-cast-debug 573 --disable-slirp 574 --disable-strip 575 TARGETS: avr-softmmu i386-softmmu mips64-softmmu s390x-softmmu sh4-softmmu 576 sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user 577 MAKE_CHECK_ARGS: check-unit check-qtest SPEED=slow 578 579build-libvhost-user: 580 extends: .base_job_template 581 stage: build 582 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest 583 needs: 584 job: amd64-fedora-container 585 script: 586 - mkdir subprojects/libvhost-user/build 587 - cd subprojects/libvhost-user/build 588 - meson 589 - ninja 590 591# No targets are built here, just tools, docs, and unit tests. This 592# also feeds into the eventual documentation deployment steps later 593build-tools-and-docs-debian: 594 extends: .native_build_job_template 595 needs: 596 job: amd64-debian-container 597 # when running on 'master' we use pre-existing container 598 optional: true 599 variables: 600 IMAGE: debian-amd64 601 MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope 602 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools 603 QEMU_JOB_PUBLISH: 1 604 artifacts: 605 expire_in: 2 days 606 paths: 607 - build 608 609# Prepare for GitLab pages deployment. Anything copied into the 610# "public" directory will be deployed to $USER.gitlab.io/$PROJECT 611# 612# GitLab publishes from any branch that triggers a CI pipeline 613# 614# For the main repo we don't want to publish from 'staging' 615# since that content may not be pushed, nor do we wish to 616# publish from 'stable-NNN' branches as that content is outdated. 617# Thus we restrict to just the default branch 618# 619# For contributor forks we want to publish from any repo so 620# that users can see the results of their commits, regardless 621# of what topic branch they're currently using 622pages: 623 extends: .base_job_template 624 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest 625 stage: test 626 needs: 627 - job: build-tools-and-docs-debian 628 script: 629 - mkdir -p public 630 # HTML-ised source tree 631 - make gtags 632 - htags -anT --tree-view=filetree -m qemu_init 633 -t "Welcome to the QEMU sourcecode" 634 - mv HTML public/src 635 # Project documentation 636 - make -C build install DESTDIR=$(pwd)/temp-install 637 - mv temp-install/usr/local/share/doc/qemu/* public/ 638 artifacts: 639 paths: 640 - public 641 variables: 642 QEMU_JOB_PUBLISH: 1 643