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 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 - scripts/device-crash-test -q ./qemu-system-i386 113 114build-system-fedora: 115 extends: .native_build_job_template 116 needs: 117 job: amd64-fedora-container 118 variables: 119 IMAGE: fedora 120 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs 121 --enable-fdt=system --enable-slirp=system --enable-capstone=system 122 TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu 123 xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu 124 MAKE_CHECK_ARGS: check-build 125 artifacts: 126 expire_in: 2 days 127 paths: 128 - build 129 130check-system-fedora: 131 extends: .native_test_job_template 132 needs: 133 - job: build-system-fedora 134 artifacts: true 135 variables: 136 IMAGE: fedora 137 MAKE_CHECK_ARGS: check 138 139avocado-system-fedora: 140 extends: .avocado_test_job_template 141 needs: 142 - job: build-system-fedora 143 artifacts: true 144 variables: 145 IMAGE: fedora 146 MAKE_CHECK_ARGS: check-avocado 147 148crash-test-fedora: 149 extends: .native_test_job_template 150 needs: 151 - job: build-system-fedora 152 artifacts: true 153 variables: 154 IMAGE: fedora 155 script: 156 - cd build 157 - scripts/device-crash-test -q ./qemu-system-ppc 158 - scripts/device-crash-test -q ./qemu-system-riscv32 159 160build-system-centos: 161 extends: .native_build_job_template 162 needs: 163 job: amd64-centos8-container 164 variables: 165 IMAGE: centos8 166 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system 167 --enable-modules --enable-trace-backends=dtrace --enable-docs 168 TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu 169 x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu 170 MAKE_CHECK_ARGS: check-build 171 artifacts: 172 expire_in: 2 days 173 paths: 174 - build 175 176check-system-centos: 177 extends: .native_test_job_template 178 needs: 179 - job: build-system-centos 180 artifacts: true 181 variables: 182 IMAGE: centos8 183 MAKE_CHECK_ARGS: check 184 185avocado-system-centos: 186 extends: .avocado_test_job_template 187 needs: 188 - job: build-system-centos 189 artifacts: true 190 variables: 191 IMAGE: centos8 192 MAKE_CHECK_ARGS: check-avocado 193 194build-system-opensuse: 195 extends: .native_build_job_template 196 needs: 197 job: amd64-opensuse-leap-container 198 variables: 199 IMAGE: opensuse-leap 200 CONFIGURE_ARGS: --enable-fdt=system 201 TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu 202 MAKE_CHECK_ARGS: check-build 203 artifacts: 204 expire_in: 2 days 205 paths: 206 - build 207 208check-system-opensuse: 209 extends: .native_test_job_template 210 needs: 211 - job: build-system-opensuse 212 artifacts: true 213 variables: 214 IMAGE: opensuse-leap 215 MAKE_CHECK_ARGS: check 216 217avocado-system-opensuse: 218 extends: .avocado_test_job_template 219 needs: 220 - job: build-system-opensuse 221 artifacts: true 222 variables: 223 IMAGE: opensuse-leap 224 MAKE_CHECK_ARGS: check-avocado 225 226 227# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by 228# the configure script. The container doesn't contain Xen headers so 229# Xen accelerator is not detected / selected. As result it build the 230# i386-softmmu and x86_64-softmmu with KVM being the single accelerator 231# available. 232# Also use a different coroutine implementation (which is only really of 233# interest to KVM users, i.e. with TCG disabled) 234build-tcg-disabled: 235 extends: .native_build_job_template 236 needs: 237 job: amd64-centos8-container 238 variables: 239 IMAGE: centos8 240 script: 241 - mkdir build 242 - cd build 243 - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext 244 || { cat config.log meson-logs/meson-log.txt && exit 1; } 245 - make -j"$JOBS" 246 - make check-unit 247 - make check-qapi-schema 248 - cd tests/qemu-iotests/ 249 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048 250 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163 251 170 171 183 184 192 194 208 221 226 227 236 253 277 image-fleecing 252 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122 253 124 132 139 142 144 145 151 152 155 157 165 194 196 200 202 254 208 209 216 218 227 234 246 247 248 250 254 255 257 258 255 260 261 262 263 264 270 272 273 277 279 image-fleecing 256 257build-user: 258 extends: .native_build_job_template 259 needs: 260 job: amd64-debian-user-cross-container 261 variables: 262 IMAGE: debian-all-test-cross 263 CONFIGURE_ARGS: --disable-tools --disable-system 264 MAKE_CHECK_ARGS: check-tcg 265 266build-user-static: 267 extends: .native_build_job_template 268 needs: 269 job: amd64-debian-user-cross-container 270 variables: 271 IMAGE: debian-all-test-cross 272 CONFIGURE_ARGS: --disable-tools --disable-system --static 273 MAKE_CHECK_ARGS: check-tcg 274 275# Because the hexagon cross-compiler takes so long to build we don't rely 276# on the CI system to build it and hence this job has an optional dependency 277# declared. The image is manually uploaded. 278build-user-hexagon: 279 extends: .native_build_job_template 280 needs: 281 job: hexagon-cross-container 282 optional: true 283 variables: 284 IMAGE: debian-hexagon-cross 285 TARGETS: hexagon-linux-user 286 CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg 287 MAKE_CHECK_ARGS: check-tcg 288 289# Only build the softmmu targets we have check-tcg tests for 290build-some-softmmu: 291 extends: .native_build_job_template 292 needs: 293 job: amd64-debian-user-cross-container 294 variables: 295 IMAGE: debian-all-test-cross 296 CONFIGURE_ARGS: --disable-tools --enable-debug 297 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu 298 MAKE_CHECK_ARGS: check-tcg 299 300# We build tricore in a very minimal tricore only container 301build-tricore-softmmu: 302 extends: .native_build_job_template 303 needs: 304 job: tricore-debian-cross-container 305 variables: 306 IMAGE: debian-tricore-cross 307 CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug 308 TARGETS: tricore-softmmu 309 MAKE_CHECK_ARGS: check-tcg 310 311clang-system: 312 extends: .native_build_job_template 313 needs: 314 job: amd64-fedora-container 315 variables: 316 IMAGE: fedora 317 CONFIGURE_ARGS: --cc=clang --cxx=clang++ 318 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 319 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu 320 ppc-softmmu s390x-softmmu 321 MAKE_CHECK_ARGS: check-qtest check-tcg 322 323clang-user: 324 extends: .native_build_job_template 325 needs: 326 job: amd64-debian-user-cross-container 327 variables: 328 IMAGE: debian-all-test-cross 329 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system 330 --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user 331 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 332 MAKE_CHECK_ARGS: check-unit check-tcg 333 334# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory. 335# On gitlab runners, default value sometimes end up calling 2 lds concurrently and 336# triggers an Out-Of-Memory error 337# 338# Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together 339# with QEMU and linked as a static library to avoid false positives in CFI checks. 340# This can be accomplished by using -enable-slirp=git, which avoids the use of 341# a system-wide version of the library 342# 343# Split in three sets of build/check/avocado to limit the execution time of each 344# job 345build-cfi-aarch64: 346 extends: .native_build_job_template 347 needs: 348 - job: amd64-fedora-container 349 variables: 350 LD_JOBS: 1 351 AR: llvm-ar 352 IMAGE: fedora 353 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 354 --enable-safe-stack --enable-slirp=git 355 TARGETS: aarch64-softmmu 356 MAKE_CHECK_ARGS: check-build 357 timeout: 70m 358 artifacts: 359 expire_in: 2 days 360 paths: 361 - build 362 rules: 363 # FIXME: This job is often failing, likely due to out-of-memory problems in 364 # the constrained containers of the shared runners. Thus this is marked as 365 # manual until the situation has been solved. 366 - when: manual 367 allow_failure: true 368 369check-cfi-aarch64: 370 extends: .native_test_job_template 371 needs: 372 - job: build-cfi-aarch64 373 artifacts: true 374 variables: 375 IMAGE: fedora 376 MAKE_CHECK_ARGS: check 377 378avocado-cfi-aarch64: 379 extends: .avocado_test_job_template 380 needs: 381 - job: build-cfi-aarch64 382 artifacts: true 383 variables: 384 IMAGE: fedora 385 MAKE_CHECK_ARGS: check-avocado 386 387build-cfi-ppc64-s390x: 388 extends: .native_build_job_template 389 needs: 390 - job: amd64-fedora-container 391 variables: 392 LD_JOBS: 1 393 AR: llvm-ar 394 IMAGE: fedora 395 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 396 --enable-safe-stack --enable-slirp=git 397 TARGETS: ppc64-softmmu s390x-softmmu 398 MAKE_CHECK_ARGS: check-build 399 timeout: 70m 400 artifacts: 401 expire_in: 2 days 402 paths: 403 - build 404 rules: 405 # FIXME: This job is often failing, likely due to out-of-memory problems in 406 # the constrained containers of the shared runners. Thus this is marked as 407 # manual until the situation has been solved. 408 - when: manual 409 allow_failure: true 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 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 variables: 598 IMAGE: debian-amd64 599 MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope 600 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools 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 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest 621 stage: test 622 needs: 623 - job: build-tools-and-docs-debian 624 script: 625 - mkdir -p public 626 # HTML-ised source tree 627 - make gtags 628 - htags -anT --tree-view=filetree -m qemu_init 629 -t "Welcome to the QEMU sourcecode" 630 - mv HTML public/src 631 # Project documentation 632 - make -C build install DESTDIR=$(pwd)/temp-install 633 - mv temp-install/usr/local/share/doc/qemu/* public/ 634 artifacts: 635 paths: 636 - public 637 rules: 638 - if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' 639 when: on_success 640 - if: '$CI_PROJECT_NAMESPACE == "qemu-project"' 641 when: never 642 - if: '$CI_PROJECT_NAMESPACE != "qemu-project"' 643 when: on_success 644