qemu/.gitlab-ci.yml
<<
>>
Prefs
   1# Currently we have two build stages after our containers are built:
   2#  - build (for traditional build and test or first stage build)
   3#  - test (for test stages, using build artefacts from a build stage)
   4stages:
   5  - containers
   6  - containers-layer2
   7  - build
   8  - test
   9
  10include:
  11  - local: '/.gitlab-ci.d/edk2.yml'
  12  - local: '/.gitlab-ci.d/opensbi.yml'
  13  - local: '/.gitlab-ci.d/containers.yml'
  14  - local: '/.gitlab-ci.d/crossbuilds.yml'
  15
  16.native_build_job_template: &native_build_job_definition
  17  stage: build
  18  image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
  19  before_script:
  20    - JOBS=$(expr $(nproc) + 1)
  21  script:
  22    - mkdir build
  23    - cd build
  24    - if test -n "$TARGETS";
  25      then
  26        ../configure --enable-werror --disable-docs $CONFIGURE_ARGS --target-list="$TARGETS" ;
  27      else
  28        ../configure --enable-werror --disable-docs $CONFIGURE_ARGS ;
  29      fi || { cat config.log meson-logs/meson-log.txt && exit 1; }
  30    - if test -n "$LD_JOBS";
  31      then
  32        meson configure . -Dbackend_max_links="$LD_JOBS" ;
  33      fi || exit 1;
  34    - make -j"$JOBS"
  35    - if test -n "$MAKE_CHECK_ARGS";
  36      then
  37        make -j"$JOBS" $MAKE_CHECK_ARGS ;
  38      fi
  39
  40.native_test_job_template: &native_test_job_definition
  41  stage: test
  42  image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
  43  script:
  44    - scripts/git-submodule.sh update
  45        $(sed -n '/GIT_SUBMODULES=/ s/.*=// p' build/config-host.mak)
  46    - cd build
  47    - find . -type f -exec touch {} +
  48    # Avoid recompiling by hiding ninja with NINJA=":"
  49    - make NINJA=":" $MAKE_CHECK_ARGS
  50
  51.acceptance_template: &acceptance_definition
  52  cache:
  53    key: "${CI_JOB_NAME}-cache"
  54    paths:
  55      - ${CI_PROJECT_DIR}/avocado-cache
  56    policy: pull-push
  57  artifacts:
  58    name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
  59    when: always
  60    expire_in: 2 days
  61    paths:
  62      - build/tests/results/latest/results.xml
  63      - build/tests/results/latest/test-results
  64    reports:
  65      junit: build/tests/results/latest/results.xml
  66  before_script:
  67    - mkdir -p ~/.config/avocado
  68    - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf
  69    - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']"
  70           >> ~/.config/avocado/avocado.conf
  71    - echo -e '[job.output.testlogs]\nstatuses = ["FAIL", "INTERRUPT"]'
  72           >> ~/.config/avocado/avocado.conf
  73    - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then
  74        du -chs ${CI_PROJECT_DIR}/avocado-cache ;
  75      fi
  76    - export AVOCADO_ALLOW_UNTRUSTED_CODE=1
  77  after_script:
  78    - cd build
  79    - du -chs ${CI_PROJECT_DIR}/avocado-cache
  80
  81build-system-alpine:
  82  <<: *native_build_job_definition
  83  needs:
  84    - job: amd64-alpine-container
  85  variables:
  86    IMAGE: alpine
  87    TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
  88      moxie-softmmu microblazeel-softmmu mips64el-softmmu
  89    MAKE_CHECK_ARGS: check-build
  90    CONFIGURE_ARGS: --enable-docs --enable-trace-backends=log,simple,syslog
  91  artifacts:
  92    expire_in: 2 days
  93    paths:
  94      - .git-submodule-status
  95      - build
  96
  97check-system-alpine:
  98  <<: *native_test_job_definition
  99  needs:
 100    - job: build-system-alpine
 101      artifacts: true
 102  variables:
 103    IMAGE: alpine
 104    MAKE_CHECK_ARGS: check
 105
 106acceptance-system-alpine:
 107  <<: *native_test_job_definition
 108  needs:
 109    - job: build-system-alpine
 110      artifacts: true
 111  variables:
 112    IMAGE: alpine
 113    MAKE_CHECK_ARGS: check-acceptance
 114  <<: *acceptance_definition
 115
 116build-system-ubuntu:
 117  <<: *native_build_job_definition
 118  needs:
 119    job: amd64-ubuntu2004-container
 120  variables:
 121    IMAGE: ubuntu2004
 122    CONFIGURE_ARGS: --enable-docs --enable-fdt=system --enable-slirp=system
 123    TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
 124      moxie-softmmu microblazeel-softmmu mips64el-softmmu
 125    MAKE_CHECK_ARGS: check-build
 126  artifacts:
 127    expire_in: 2 days
 128    paths:
 129      - build
 130
 131check-system-ubuntu:
 132  <<: *native_test_job_definition
 133  needs:
 134    - job: build-system-ubuntu
 135      artifacts: true
 136  variables:
 137    IMAGE: ubuntu2004
 138    MAKE_CHECK_ARGS: check
 139
 140acceptance-system-ubuntu:
 141  <<: *native_test_job_definition
 142  needs:
 143    - job: build-system-ubuntu
 144      artifacts: true
 145  variables:
 146    IMAGE: ubuntu2004
 147    MAKE_CHECK_ARGS: check-acceptance
 148  <<: *acceptance_definition
 149
 150build-system-debian:
 151  <<: *native_build_job_definition
 152  needs:
 153    job: amd64-debian-container
 154  variables:
 155    IMAGE: debian-amd64
 156    CONFIGURE_ARGS: --enable-fdt=system
 157    TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
 158      riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
 159    MAKE_CHECK_ARGS: check-build
 160  artifacts:
 161    expire_in: 2 days
 162    paths:
 163      - build
 164
 165check-system-debian:
 166  <<: *native_test_job_definition
 167  needs:
 168    - job: build-system-debian
 169      artifacts: true
 170  variables:
 171    IMAGE: debian-amd64
 172    MAKE_CHECK_ARGS: check
 173
 174acceptance-system-debian:
 175  <<: *native_test_job_definition
 176  needs:
 177    - job: build-system-debian
 178      artifacts: true
 179  variables:
 180    IMAGE: debian-amd64
 181    MAKE_CHECK_ARGS: check-acceptance
 182  <<: *acceptance_definition
 183
 184build-system-fedora:
 185  <<: *native_build_job_definition
 186  needs:
 187    job: amd64-fedora-container
 188  variables:
 189    IMAGE: fedora
 190    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
 191             --enable-fdt=system --enable-slirp=system --enable-capstone=system
 192    TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
 193      xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
 194    MAKE_CHECK_ARGS: check-build
 195  artifacts:
 196    expire_in: 2 days
 197    paths:
 198      - build
 199
 200check-system-fedora:
 201  <<: *native_test_job_definition
 202  needs:
 203    - job: build-system-fedora
 204      artifacts: true
 205  variables:
 206    IMAGE: fedora
 207    MAKE_CHECK_ARGS: check
 208
 209acceptance-system-fedora:
 210  <<: *native_test_job_definition
 211  needs:
 212    - job: build-system-fedora
 213      artifacts: true
 214  variables:
 215    IMAGE: fedora
 216    MAKE_CHECK_ARGS: check-acceptance
 217  <<: *acceptance_definition
 218
 219build-system-centos:
 220  <<: *native_build_job_definition
 221  needs:
 222    job: amd64-centos8-container
 223  variables:
 224    IMAGE: centos8
 225    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
 226                    --enable-modules --enable-trace-backends=dtrace
 227    TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
 228      x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
 229    MAKE_CHECK_ARGS: check-build
 230  artifacts:
 231    expire_in: 2 days
 232    paths:
 233      - build
 234
 235check-system-centos:
 236  <<: *native_test_job_definition
 237  needs:
 238    - job: build-system-centos
 239      artifacts: true
 240  variables:
 241    IMAGE: centos8
 242    MAKE_CHECK_ARGS: check
 243
 244acceptance-system-centos:
 245  <<: *native_test_job_definition
 246  needs:
 247    - job: build-system-centos
 248      artifacts: true
 249  variables:
 250    IMAGE: centos8
 251    MAKE_CHECK_ARGS: check-acceptance
 252  <<: *acceptance_definition
 253
 254build-system-opensuse:
 255  <<: *native_build_job_definition
 256  needs:
 257    job: amd64-opensuse-leap-container
 258  variables:
 259    IMAGE: opensuse-leap
 260    CONFIGURE_ARGS: --enable-fdt=system
 261    TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
 262    MAKE_CHECK_ARGS: check-build
 263  artifacts:
 264    expire_in: 2 days
 265    paths:
 266      - build
 267
 268check-system-opensuse:
 269  <<: *native_test_job_definition
 270  needs:
 271    - job: build-system-opensuse
 272      artifacts: true
 273  variables:
 274    IMAGE: opensuse-leap
 275    MAKE_CHECK_ARGS: check
 276
 277acceptance-system-opensuse:
 278  <<: *native_test_job_definition
 279  needs:
 280    - job: build-system-opensuse
 281      artifacts: true
 282  variables:
 283    IMAGE: opensuse-leap
 284    MAKE_CHECK_ARGS: check-acceptance
 285  <<: *acceptance_definition
 286
 287
 288build-disabled:
 289  <<: *native_build_job_definition
 290  needs:
 291    job: amd64-fedora-container
 292  variables:
 293    IMAGE: fedora
 294    CONFIGURE_ARGS:
 295      --disable-attr
 296      --disable-auth-pam
 297      --disable-avx2
 298      --disable-bochs
 299      --disable-brlapi
 300      --disable-bzip2
 301      --disable-cap-ng
 302      --disable-capstone
 303      --disable-cloop
 304      --disable-coroutine-pool
 305      --disable-curl
 306      --disable-curses
 307      --disable-dmg
 308      --disable-docs
 309      --disable-gcrypt
 310      --disable-glusterfs
 311      --disable-gnutls
 312      --disable-gtk
 313      --disable-guest-agent
 314      --disable-iconv
 315      --disable-keyring
 316      --disable-kvm
 317      --disable-libiscsi
 318      --disable-libpmem
 319      --disable-libssh
 320      --disable-libudev
 321      --disable-libusb
 322      --disable-libxml2
 323      --disable-linux-aio
 324      --disable-live-block-migration
 325      --disable-lzo
 326      --disable-malloc-trim
 327      --disable-mpath
 328      --disable-nettle
 329      --disable-numa
 330      --disable-opengl
 331      --disable-parallels
 332      --disable-pie
 333      --disable-qcow1
 334      --disable-qed
 335      --disable-qom-cast-debug
 336      --disable-rbd
 337      --disable-rdma
 338      --disable-replication
 339      --disable-sdl
 340      --disable-seccomp
 341      --disable-sheepdog
 342      --disable-slirp
 343      --disable-smartcard
 344      --disable-snappy
 345      --disable-sparse
 346      --disable-spice
 347      --disable-strip
 348      --disable-tpm
 349      --disable-usb-redir
 350      --disable-vdi
 351      --disable-vhost-crypto
 352      --disable-vhost-net
 353      --disable-vhost-scsi
 354      --disable-vhost-kernel
 355      --disable-vhost-user
 356      --disable-vhost-vdpa
 357      --disable-vhost-vsock
 358      --disable-virglrenderer
 359      --disable-vnc
 360      --disable-vte
 361      --disable-vvfat
 362      --disable-xen
 363      --disable-zstd
 364    TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
 365      s390x-softmmu i386-linux-user
 366    MAKE_CHECK_ARGS: check-qtest SPEED=slow
 367
 368# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
 369# the configure script. The container doesn't contain Xen headers so
 370# Xen accelerator is not detected / selected. As result it build the
 371# i386-softmmu and x86_64-softmmu with KVM being the single accelerator
 372# available.
 373# Also use a different coroutine implementation (which is only really of
 374# interest to KVM users, i.e. with TCG disabled)
 375build-tcg-disabled:
 376  <<: *native_build_job_definition
 377  needs:
 378    job: amd64-centos8-container
 379  variables:
 380    IMAGE: centos8
 381  script:
 382    - mkdir build
 383    - cd build
 384    - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
 385      || { cat config.log meson-logs/meson-log.txt && exit 1; }
 386    - make -j"$JOBS"
 387    - make check-unit
 388    - make check-qapi-schema
 389    - cd tests/qemu-iotests/
 390    - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
 391            052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
 392            170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
 393    - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
 394            124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
 395            208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
 396            260 261 262 263 264 270 272 273 277 279
 397
 398build-user:
 399  <<: *native_build_job_definition
 400  needs:
 401    job: amd64-debian-user-cross-container
 402  variables:
 403    IMAGE: debian-all-test-cross
 404    CONFIGURE_ARGS: --disable-tools --disable-system
 405    MAKE_CHECK_ARGS: check-tcg
 406
 407build-user-static:
 408  <<: *native_build_job_definition
 409  needs:
 410    job: amd64-debian-user-cross-container
 411  variables:
 412    IMAGE: debian-all-test-cross
 413    CONFIGURE_ARGS: --disable-tools --disable-system --static
 414    MAKE_CHECK_ARGS: check-tcg
 415
 416# Only build the softmmu targets we have check-tcg tests for
 417build-some-softmmu:
 418  <<: *native_build_job_definition
 419  needs:
 420    job: amd64-debian-user-cross-container
 421  variables:
 422    IMAGE: debian-all-test-cross
 423    CONFIGURE_ARGS: --disable-tools --enable-debug
 424    TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
 425    MAKE_CHECK_ARGS: check-tcg
 426
 427# Run check-tcg against linux-user (with plugins)
 428# we skip sparc64-linux-user until it has been fixed somewhat
 429# we skip cris-linux-user as it doesn't use the common run loop
 430build-user-plugins:
 431  <<: *native_build_job_definition
 432  needs:
 433    job: amd64-debian-user-cross-container
 434  variables:
 435    IMAGE: debian-all-test-cross
 436    CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
 437    MAKE_CHECK_ARGS: check-tcg
 438  timeout: 1h 30m
 439
 440build-user-centos7:
 441  <<: *native_build_job_definition
 442  needs:
 443    job: amd64-centos7-container
 444  variables:
 445    IMAGE: centos7
 446    CONFIGURE_ARGS: --disable-system --disable-tools --disable-docs
 447    MAKE_CHECK_ARGS: check-tcg
 448
 449build-some-softmmu-plugins:
 450  <<: *native_build_job_definition
 451  needs:
 452    job: amd64-debian-user-cross-container
 453  variables:
 454    IMAGE: debian-all-test-cross
 455    CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg
 456    TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
 457    MAKE_CHECK_ARGS: check-tcg
 458
 459clang-system:
 460  <<: *native_build_job_definition
 461  needs:
 462    job: amd64-fedora-container
 463  variables:
 464    IMAGE: fedora
 465    CONFIGURE_ARGS: --cc=clang --cxx=clang++
 466      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
 467    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
 468      ppc-softmmu s390x-softmmu
 469    MAKE_CHECK_ARGS: check-qtest check-tcg
 470
 471clang-user:
 472  <<: *native_build_job_definition
 473  needs:
 474    job: amd64-debian-user-cross-container
 475  variables:
 476    IMAGE: debian-all-test-cross
 477    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
 478      --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
 479      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
 480    MAKE_CHECK_ARGS: check-unit check-tcg
 481
 482# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
 483# On gitlab runners, default value sometimes end up calling 2 lds concurrently and
 484# triggers an Out-Of-Memory error
 485#
 486# Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together
 487# with QEMU and linked as a static library to avoid false positives in CFI checks.
 488# This can be accomplished by using -enable-slirp=git, which avoids the use of
 489# a system-wide version of the library
 490#
 491# Split in three sets of build/check/acceptance to limit the execution time of each
 492# job
 493build-cfi-aarch64:
 494  <<: *native_build_job_definition
 495  needs:
 496  - job: amd64-fedora-container
 497  variables:
 498    LD_JOBS: 1
 499    AR: llvm-ar
 500    IMAGE: fedora
 501    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
 502      --enable-safe-stack --enable-slirp=git
 503    TARGETS: aarch64-softmmu
 504    MAKE_CHECK_ARGS: check-build
 505  timeout: 70m
 506  artifacts:
 507    expire_in: 2 days
 508    paths:
 509      - build
 510
 511check-cfi-aarch64:
 512  <<: *native_test_job_definition
 513  needs:
 514    - job: build-cfi-aarch64
 515      artifacts: true
 516  variables:
 517    IMAGE: fedora
 518    MAKE_CHECK_ARGS: check
 519
 520acceptance-cfi-aarch64:
 521  <<: *native_test_job_definition
 522  needs:
 523    - job: build-cfi-aarch64
 524      artifacts: true
 525  variables:
 526    IMAGE: fedora
 527    MAKE_CHECK_ARGS: check-acceptance
 528  <<: *acceptance_definition
 529
 530build-cfi-ppc64-s390x:
 531  <<: *native_build_job_definition
 532  needs:
 533  - job: amd64-fedora-container
 534  variables:
 535    LD_JOBS: 1
 536    AR: llvm-ar
 537    IMAGE: fedora
 538    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
 539      --enable-safe-stack --enable-slirp=git
 540    TARGETS: ppc64-softmmu s390x-softmmu
 541    MAKE_CHECK_ARGS: check-build
 542  timeout: 70m
 543  artifacts:
 544    expire_in: 2 days
 545    paths:
 546      - build
 547
 548check-cfi-ppc64-s390x:
 549  <<: *native_test_job_definition
 550  needs:
 551    - job: build-cfi-ppc64-s390x
 552      artifacts: true
 553  variables:
 554    IMAGE: fedora
 555    MAKE_CHECK_ARGS: check
 556
 557acceptance-cfi-ppc64-s390x:
 558  <<: *native_test_job_definition
 559  needs:
 560    - job: build-cfi-ppc64-s390x
 561      artifacts: true
 562  variables:
 563    IMAGE: fedora
 564    MAKE_CHECK_ARGS: check-acceptance
 565  <<: *acceptance_definition
 566
 567build-cfi-x86_64:
 568  <<: *native_build_job_definition
 569  needs:
 570  - job: amd64-fedora-container
 571  variables:
 572    LD_JOBS: 1
 573    AR: llvm-ar
 574    IMAGE: fedora
 575    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
 576      --enable-safe-stack --enable-slirp=git
 577    TARGETS: x86_64-softmmu
 578    MAKE_CHECK_ARGS: check-build
 579  timeout: 70m
 580  artifacts:
 581    expire_in: 2 days
 582    paths:
 583      - build
 584
 585check-cfi-x86_64:
 586  <<: *native_test_job_definition
 587  needs:
 588    - job: build-cfi-x86_64
 589      artifacts: true
 590  variables:
 591    IMAGE: fedora
 592    MAKE_CHECK_ARGS: check
 593
 594acceptance-cfi-x86_64:
 595  <<: *native_test_job_definition
 596  needs:
 597    - job: build-cfi-x86_64
 598      artifacts: true
 599  variables:
 600    IMAGE: fedora
 601    MAKE_CHECK_ARGS: check-acceptance
 602  <<: *acceptance_definition
 603
 604tsan-build:
 605  <<: *native_build_job_definition
 606  needs:
 607    job: amd64-ubuntu2004-container
 608  variables:
 609    IMAGE: ubuntu2004
 610    CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
 611          --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system
 612    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
 613    MAKE_CHECK_ARGS: bench V=1
 614
 615# These targets are on the way out
 616build-deprecated:
 617  <<: *native_build_job_definition
 618  needs:
 619    job: amd64-debian-user-cross-container
 620  variables:
 621    IMAGE: debian-all-test-cross
 622    CONFIGURE_ARGS: --disable-tools
 623    MAKE_CHECK_ARGS: build-tcg
 624    TARGETS: ppc64abi32-linux-user lm32-softmmu unicore32-softmmu
 625  artifacts:
 626    expire_in: 2 days
 627    paths:
 628      - build
 629
 630# We split the check-tcg step as test failures are expected but we still
 631# want to catch the build breaking.
 632check-deprecated:
 633  <<: *native_test_job_definition
 634  needs:
 635    - job: build-deprecated
 636      artifacts: true
 637  variables:
 638    IMAGE: debian-all-test-cross
 639    MAKE_CHECK_ARGS: check-tcg
 640  allow_failure: true
 641
 642# gprof/gcov are GCC features
 643gprof-gcov:
 644  <<: *native_build_job_definition
 645  needs:
 646    job: amd64-ubuntu2004-container
 647  variables:
 648    IMAGE: ubuntu2004
 649    CONFIGURE_ARGS: --enable-gprof --enable-gcov
 650    MAKE_CHECK_ARGS: check
 651    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
 652  timeout: 70m
 653  after_script:
 654    - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
 655
 656build-oss-fuzz:
 657  <<: *native_build_job_definition
 658  needs:
 659    job: amd64-fedora-container
 660  variables:
 661    IMAGE: fedora
 662  script:
 663    - mkdir build-oss-fuzz
 664    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
 665      ./scripts/oss-fuzz/build.sh
 666    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
 667    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
 668                      | grep -v slirp); do
 669        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
 670        echo Testing ${fuzzer} ... ;
 671        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
 672      done
 673    # Unrelated to fuzzer: run some tests with -fsanitize=address
 674    - cd build-oss-fuzz && make check-qtest-i386 check-unit
 675
 676build-tci:
 677  <<: *native_build_job_definition
 678  needs:
 679    job: amd64-debian-user-cross-container
 680  variables:
 681    IMAGE: debian-all-test-cross
 682  script:
 683    - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
 684    - mkdir build
 685    - cd build
 686    - ../configure --enable-tcg-interpreter
 687        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
 688    - make -j"$JOBS"
 689    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
 690    - for tg in $TARGETS ; do
 691        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
 692        ./tests/qtest/boot-serial-test || exit 1 ;
 693        ./tests/qtest/cdrom-test || exit 1 ;
 694      done
 695    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
 696    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
 697    - make check-tcg
 698
 699# Alternate coroutines implementations are only really of interest to KVM users
 700# However we can't test against KVM on Gitlab-CI so we can only run unit tests
 701build-coroutine-sigaltstack:
 702  <<: *native_build_job_definition
 703  needs:
 704    job: amd64-ubuntu2004-container
 705  variables:
 706    IMAGE: ubuntu2004
 707    CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
 708                    --enable-trace-backends=ftrace
 709    MAKE_CHECK_ARGS: check-unit
 710
 711# Most jobs test latest gcrypt or nettle builds
 712#
 713# These jobs test old gcrypt and nettle from RHEL7
 714# which had some API differences.
 715crypto-old-nettle:
 716  <<: *native_build_job_definition
 717  needs:
 718    job: amd64-centos7-container
 719  variables:
 720    IMAGE: centos7
 721    TARGETS: x86_64-softmmu x86_64-linux-user
 722    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
 723    MAKE_CHECK_ARGS: check
 724
 725crypto-old-gcrypt:
 726  <<: *native_build_job_definition
 727  needs:
 728    job: amd64-centos7-container
 729  variables:
 730    IMAGE: centos7
 731    TARGETS: x86_64-softmmu x86_64-linux-user
 732    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
 733    MAKE_CHECK_ARGS: check
 734
 735crypto-only-gnutls:
 736  <<: *native_build_job_definition
 737  needs:
 738    job: amd64-centos7-container
 739  variables:
 740    IMAGE: centos7
 741    TARGETS: x86_64-softmmu x86_64-linux-user
 742    CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
 743    MAKE_CHECK_ARGS: check
 744
 745
 746# Check our reduced build configurations
 747build-without-default-devices:
 748  <<: *native_build_job_definition
 749  needs:
 750    job: amd64-centos8-container
 751  variables:
 752    IMAGE: centos8
 753    CONFIGURE_ARGS: --without-default-devices --disable-user
 754
 755build-without-default-features:
 756  <<: *native_build_job_definition
 757  needs:
 758    job: amd64-debian-container
 759  variables:
 760    IMAGE: debian-amd64
 761    CONFIGURE_ARGS: --without-default-features --disable-user
 762        --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu
 763    MAKE_CHECK_ARGS: check-unit
 764
 765check-patch:
 766  stage: build
 767  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
 768  needs:
 769    job: amd64-centos8-container
 770  script: .gitlab-ci.d/check-patch.py
 771  except:
 772    variables:
 773      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
 774  variables:
 775    GIT_DEPTH: 1000
 776  allow_failure: true
 777
 778check-dco:
 779  stage: build
 780  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
 781  needs:
 782    job: amd64-centos8-container
 783  script: .gitlab-ci.d/check-dco.py
 784  except:
 785    variables:
 786      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
 787  variables:
 788    GIT_DEPTH: 1000
 789
 790build-libvhost-user:
 791  stage: build
 792  image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
 793  needs:
 794    job: amd64-fedora-container
 795  before_script:
 796    - dnf install -y meson ninja-build
 797  script:
 798    - mkdir subprojects/libvhost-user/build
 799    - cd subprojects/libvhost-user/build
 800    - meson
 801    - ninja
 802
 803# No targets are built here, just tools, docs, and unit tests. This
 804# also feeds into the eventual documentation deployment steps later
 805build-tools-and-docs-debian:
 806  <<: *native_build_job_definition
 807  needs:
 808    job: amd64-debian-container
 809  variables:
 810    IMAGE: debian-amd64
 811    MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
 812    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
 813  artifacts:
 814    expire_in: 2 days
 815    paths:
 816      - build
 817
 818# Prepare for GitLab pages deployment. Anything copied into the
 819# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
 820pages:
 821  image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
 822  stage: test
 823  needs:
 824    - job: build-tools-and-docs-debian
 825  script:
 826    - mkdir -p public
 827    # HTML-ised source tree
 828    - make gtags
 829    - htags -anT --tree-view=filetree -m qemu_init
 830        -t "Welcome to the QEMU sourcecode"
 831    - mv HTML public/src
 832    # Project documentation
 833    - make -C build install DESTDIR=$(pwd)/temp-install
 834    - mv temp-install/usr/local/share/doc/qemu/* public/
 835  artifacts:
 836    paths:
 837      - public
 838