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