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