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 - sed -i s,git.qemu.org/git,gitlab.com/qemu-project, .gitmodules 22 script: 23 - mkdir build 24 - cd build 25 - if test -n "$TARGETS"; 26 then 27 ../configure --enable-werror $CONFIGURE_ARGS --target-list="$TARGETS" ; 28 else 29 ../configure --enable-werror $CONFIGURE_ARGS ; 30 fi || { cat config.log meson-logs/meson-log.txt && exit 1; } 31 - make -j"$JOBS" 32 - if test -n "$MAKE_CHECK_ARGS"; 33 then 34 make -j"$JOBS" $MAKE_CHECK_ARGS ; 35 fi 36 37.native_test_job_template: &native_test_job_definition 38 stage: test 39 image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest 40 script: 41 - cd build 42 - find . -type f -exec touch {} + 43 - make $MAKE_CHECK_ARGS 44 45.acceptance_template: &acceptance_definition 46 cache: 47 key: "${CI_JOB_NAME}-cache" 48 paths: 49 - ${CI_PROJECT_DIR}/avocado-cache 50 policy: pull-push 51 artifacts: 52 name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" 53 when: always 54 expire_in: 2 days 55 paths: 56 - build/tests/results/latest/results.xml 57 - build/tests/results/latest/test-results 58 reports: 59 junit: build/tests/results/latest/results.xml 60 before_script: 61 - mkdir -p ~/.config/avocado 62 - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf 63 - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']" 64 >> ~/.config/avocado/avocado.conf 65 - echo -e '[job.output.testlogs]\nstatuses = ["FAIL"]' 66 >> ~/.config/avocado/avocado.conf 67 - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then 68 du -chs ${CI_PROJECT_DIR}/avocado-cache ; 69 fi 70 - export AVOCADO_ALLOW_UNTRUSTED_CODE=1 71 after_script: 72 - cd build 73 - du -chs ${CI_PROJECT_DIR}/avocado-cache 74 75build-system-ubuntu: 76 <<: *native_build_job_definition 77 variables: 78 IMAGE: ubuntu2004 79 TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu 80 moxie-softmmu microblazeel-softmmu mips64el-softmmu 81 MAKE_CHECK_ARGS: check-build 82 artifacts: 83 expire_in: 2 days 84 paths: 85 - build 86 87check-system-ubuntu: 88 <<: *native_test_job_definition 89 needs: 90 - job: build-system-ubuntu 91 artifacts: true 92 variables: 93 IMAGE: ubuntu2004 94 MAKE_CHECK_ARGS: check 95 96acceptance-system-ubuntu: 97 <<: *native_test_job_definition 98 needs: 99 - job: build-system-ubuntu 100 artifacts: true 101 variables: 102 IMAGE: ubuntu2004 103 MAKE_CHECK_ARGS: check-acceptance 104 <<: *acceptance_definition 105 106build-system-debian: 107 <<: *native_build_job_definition 108 variables: 109 IMAGE: debian-amd64 110 TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu 111 riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu 112 MAKE_CHECK_ARGS: check-build 113 artifacts: 114 expire_in: 2 days 115 paths: 116 - build 117 118check-system-debian: 119 <<: *native_test_job_definition 120 needs: 121 - job: build-system-debian 122 artifacts: true 123 variables: 124 IMAGE: debian-amd64 125 MAKE_CHECK_ARGS: check 126 127# No targets are built here, just tools, docs, and unit tests. This 128# also feeds into the eventual documentation deployment steps later 129build-tools-and-docs-debian: 130 <<: *native_build_job_definition 131 variables: 132 IMAGE: debian-amd64 133 MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope 134 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools 135 artifacts: 136 expire_in: 2 days 137 paths: 138 - build 139 140acceptance-system-debian: 141 <<: *native_test_job_definition 142 needs: 143 - job: build-system-debian 144 artifacts: true 145 variables: 146 IMAGE: debian-amd64 147 MAKE_CHECK_ARGS: check-acceptance 148 <<: *acceptance_definition 149 150build-system-fedora: 151 <<: *native_build_job_definition 152 variables: 153 IMAGE: fedora 154 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs 155 TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu 156 xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu 157 MAKE_CHECK_ARGS: check-build 158 artifacts: 159 expire_in: 2 days 160 paths: 161 - build 162 163check-system-fedora: 164 <<: *native_test_job_definition 165 needs: 166 - job: build-system-fedora 167 artifacts: true 168 variables: 169 IMAGE: fedora 170 MAKE_CHECK_ARGS: check 171 172acceptance-system-fedora: 173 <<: *native_test_job_definition 174 needs: 175 - job: build-system-fedora 176 artifacts: true 177 variables: 178 IMAGE: fedora 179 MAKE_CHECK_ARGS: check-acceptance 180 <<: *acceptance_definition 181 182build-system-centos: 183 <<: *native_build_job_definition 184 variables: 185 IMAGE: centos8 186 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt 187 TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu 188 x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu 189 MAKE_CHECK_ARGS: check-build 190 artifacts: 191 expire_in: 2 days 192 paths: 193 - build 194 195check-system-centos: 196 <<: *native_test_job_definition 197 needs: 198 - job: build-system-centos 199 artifacts: true 200 variables: 201 IMAGE: centos8 202 MAKE_CHECK_ARGS: check 203 204acceptance-system-centos: 205 <<: *native_test_job_definition 206 needs: 207 - job: build-system-centos 208 artifacts: true 209 variables: 210 IMAGE: centos8 211 MAKE_CHECK_ARGS: check-acceptance 212 <<: *acceptance_definition 213 214build-system-opensuse: 215 <<: *native_build_job_definition 216 variables: 217 IMAGE: opensuse-leap 218 TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu 219 MAKE_CHECK_ARGS: check-build 220 artifacts: 221 expire_in: 2 days 222 paths: 223 - build 224 225check-system-opensuse: 226 <<: *native_test_job_definition 227 needs: 228 - job: build-system-opensuse 229 artifacts: true 230 variables: 231 IMAGE: opensuse-leap 232 MAKE_CHECK_ARGS: check 233 234acceptance-system-opensuse: 235 <<: *native_test_job_definition 236 needs: 237 - job: build-system-opensuse 238 artifacts: true 239 variables: 240 IMAGE: opensuse-leap 241 MAKE_CHECK_ARGS: check-acceptance 242 <<: *acceptance_definition 243 244 245build-disabled: 246 <<: *native_build_job_definition 247 variables: 248 IMAGE: fedora 249 CONFIGURE_ARGS: 250 --disable-attr 251 --disable-auth-pam 252 --disable-avx2 253 --disable-bochs 254 --disable-brlapi 255 --disable-bzip2 256 --disable-cap-ng 257 --disable-capstone 258 --disable-cloop 259 --disable-coroutine-pool 260 --disable-curl 261 --disable-curses 262 --disable-dmg 263 --disable-docs 264 --disable-gcrypt 265 --disable-glusterfs 266 --disable-gnutls 267 --disable-gtk 268 --disable-guest-agent 269 --disable-iconv 270 --disable-keyring 271 --disable-kvm 272 --disable-libiscsi 273 --disable-libpmem 274 --disable-libssh 275 --disable-libudev 276 --disable-libusb 277 --disable-libxml2 278 --disable-linux-aio 279 --disable-live-block-migration 280 --disable-lzo 281 --disable-malloc-trim 282 --disable-mpath 283 --disable-nettle 284 --disable-numa 285 --disable-opengl 286 --disable-parallels 287 --disable-pie 288 --disable-qcow1 289 --disable-qed 290 --disable-qom-cast-debug 291 --disable-rbd 292 --disable-rdma 293 --disable-replication 294 --disable-sdl 295 --disable-seccomp 296 --disable-sheepdog 297 --disable-slirp 298 --disable-smartcard 299 --disable-snappy 300 --disable-sparse 301 --disable-spice 302 --disable-strip 303 --disable-tpm 304 --disable-usb-redir 305 --disable-vdi 306 --disable-vhost-crypto 307 --disable-vhost-net 308 --disable-vhost-scsi 309 --disable-vhost-user 310 --disable-vhost-vdpa 311 --disable-vhost-vsock 312 --disable-virglrenderer 313 --disable-vnc 314 --disable-vte 315 --disable-vvfat 316 --disable-xen 317 --disable-zstd 318 TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu 319 s390x-softmmu i386-linux-user 320 MAKE_CHECK_ARGS: check-qtest SPEED=slow 321 322# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by 323# the configure script. The container doesn't contain Xen headers so 324# Xen accelerator is not detected / selected. As result it build the 325# i386-softmmu and x86_64-softmmu with KVM being the single accelerator 326# available. 327build-tcg-disabled: 328 <<: *native_build_job_definition 329 variables: 330 IMAGE: centos8 331 script: 332 - mkdir build 333 - cd build 334 - ../configure --disable-tcg --audio-drv-list="" || { cat config.log meson-logs/meson-log.txt && exit 1; } 335 - make -j"$JOBS" 336 - make check-unit 337 - make check-qapi-schema 338 - cd tests/qemu-iotests/ 339 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048 340 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163 341 170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277 342 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122 343 124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202 344 208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258 345 260 261 262 263 264 270 272 273 277 279 346 347build-user: 348 <<: *native_build_job_definition 349 variables: 350 IMAGE: debian-all-test-cross 351 CONFIGURE_ARGS: --disable-tools --disable-system 352 MAKE_CHECK_ARGS: check-tcg 353 354build-user-static: 355 <<: *native_build_job_definition 356 variables: 357 IMAGE: debian-all-test-cross 358 CONFIGURE_ARGS: --disable-tools --disable-system --static 359 MAKE_CHECK_ARGS: check-tcg 360 361# Only build the softmmu targets we have check-tcg tests for 362build-some-softmmu: 363 <<: *native_build_job_definition 364 variables: 365 IMAGE: debian-all-test-cross 366 CONFIGURE_ARGS: --disable-tools --enable-debug-tcg 367 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu 368 MAKE_CHECK_ARGS: check-tcg 369 370# Run check-tcg against linux-user (with plugins) 371# we skip sparc64-linux-user until it has been fixed somewhat 372# we skip cris-linux-user as it doesn't use the common run loop 373build-user-plugins: 374 <<: *native_build_job_definition 375 variables: 376 IMAGE: debian-all-test-cross 377 CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user 378 MAKE_CHECK_ARGS: check-tcg 379 timeout: 1h 30m 380 381build-some-softmmu-plugins: 382 <<: *native_build_job_definition 383 variables: 384 IMAGE: debian-all-test-cross 385 CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg 386 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu 387 MAKE_CHECK_ARGS: check-tcg 388 389build-clang: 390 <<: *native_build_job_definition 391 variables: 392 IMAGE: fedora 393 CONFIGURE_ARGS: --cc=clang --cxx=clang++ 394 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu 395 ppc-softmmu s390x-softmmu arm-linux-user 396 MAKE_CHECK_ARGS: check 397 398# These targets are on the way out 399build-deprecated: 400 <<: *native_build_job_definition 401 variables: 402 IMAGE: debian-all-test-cross 403 CONFIGURE_ARGS: --disable-docs --disable-tools 404 MAKE_CHECK_ARGS: build-tcg 405 TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu 406 unicore32-softmmu 407 artifacts: 408 expire_in: 2 days 409 paths: 410 - build 411 412# We split the check-tcg step as test failures are expected but we still 413# want to catch the build breaking. 414check-deprecated: 415 <<: *native_test_job_definition 416 needs: 417 - job: build-deprecated 418 artifacts: true 419 variables: 420 IMAGE: debian-all-test-cross 421 MAKE_CHECK_ARGS: check-tcg 422 allow_failure: true 423 424build-oss-fuzz: 425 <<: *native_build_job_definition 426 variables: 427 IMAGE: fedora 428 script: 429 - mkdir build-oss-fuzz 430 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address" 431 ./scripts/oss-fuzz/build.sh 432 - export ASAN_OPTIONS="fast_unwind_on_malloc=0" 433 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f 434 | grep -v slirp); do 435 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ; 436 echo Testing ${fuzzer} ... ; 437 "${fuzzer}" -runs=1 -seed=1 || exit 1 ; 438 done 439 # Unrelated to fuzzer: run some tests with -fsanitize=address 440 - cd build-oss-fuzz && make check-qtest-i386 check-unit 441 442build-tci: 443 <<: *native_build_job_definition 444 variables: 445 IMAGE: fedora 446 script: 447 - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64" 448 - mkdir build 449 - cd build 450 - ../configure --enable-tcg-interpreter 451 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; } 452 - make -j"$JOBS" 453 - make run-tcg-tests-x86_64-softmmu 454 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test 455 - for tg in $TARGETS ; do 456 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ; 457 ./tests/qtest/boot-serial-test || exit 1 ; 458 ./tests/qtest/cdrom-test || exit 1 ; 459 done 460 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test 461 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow 462 463# Alternate coroutines implementations are only really of interest to KVM users 464# However we can't test against KVM on Gitlab-CI so we can only run unit tests 465build-coroutine-ucontext: 466 <<: *native_build_job_definition 467 variables: 468 IMAGE: ubuntu2004 469 CONFIGURE_ARGS: --with-coroutine=ucontext --disable-tcg 470 MAKE_CHECK_ARGS: check-unit 471 472build-coroutine-sigaltstack: 473 <<: *native_build_job_definition 474 variables: 475 IMAGE: ubuntu2004 476 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg 477 MAKE_CHECK_ARGS: check-unit 478 479# Most jobs test latest gcrypt or nettle builds 480# 481# These jobs test old gcrypt and nettle from RHEL7 482# which had some API differences. 483build-crypto-old-nettle: 484 <<: *native_build_job_definition 485 variables: 486 IMAGE: centos7 487 TARGETS: x86_64-softmmu x86_64-linux-user 488 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle 489 MAKE_CHECK_ARGS: check-build 490 artifacts: 491 paths: 492 - build 493 494check-crypto-old-nettle: 495 <<: *native_test_job_definition 496 needs: 497 - job: build-crypto-old-nettle 498 artifacts: true 499 variables: 500 IMAGE: centos7 501 MAKE_CHECK_ARGS: check 502 503 504build-crypto-old-gcrypt: 505 <<: *native_build_job_definition 506 variables: 507 IMAGE: centos7 508 TARGETS: x86_64-softmmu x86_64-linux-user 509 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt 510 MAKE_CHECK_ARGS: check-build 511 artifacts: 512 paths: 513 - build 514 515check-crypto-old-gcrypt: 516 <<: *native_test_job_definition 517 needs: 518 - job: build-crypto-old-gcrypt 519 artifacts: true 520 variables: 521 IMAGE: centos7 522 MAKE_CHECK_ARGS: check 523 524 525build-crypto-only-gnutls: 526 <<: *native_build_job_definition 527 variables: 528 IMAGE: centos7 529 TARGETS: x86_64-softmmu x86_64-linux-user 530 CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls 531 MAKE_CHECK_ARGS: check-build 532 artifacts: 533 paths: 534 - build 535 536check-crypto-only-gnutls: 537 <<: *native_test_job_definition 538 needs: 539 - job: build-crypto-only-gnutls 540 artifacts: true 541 variables: 542 IMAGE: centos7 543 MAKE_CHECK_ARGS: check 544 545# We don't need to exercise every backend with every front-end 546build-trace-multi-user: 547 <<: *native_build_job_definition 548 variables: 549 IMAGE: ubuntu2004 550 CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system 551 552build-trace-ftrace-system: 553 <<: *native_build_job_definition 554 variables: 555 IMAGE: ubuntu2004 556 CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu 557 558build-trace-ust-system: 559 <<: *native_build_job_definition 560 variables: 561 IMAGE: ubuntu2004 562 CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu 563 564# Check our reduced build configurations 565build-without-default-devices: 566 <<: *native_build_job_definition 567 variables: 568 IMAGE: centos8 569 CONFIGURE_ARGS: --without-default-devices --disable-user 570 571build-without-default-features: 572 <<: *native_build_job_definition 573 variables: 574 IMAGE: debian-amd64 575 CONFIGURE_ARGS: --without-default-features --disable-user 576 MAKE_CHECK_ARGS: check-unit 577 578check-patch: 579 stage: build 580 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest 581 script: .gitlab-ci.d/check-patch.py 582 except: 583 variables: 584 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master' 585 variables: 586 GIT_DEPTH: 1000 587 allow_failure: true 588 589check-dco: 590 stage: build 591 image: $CI_REGISTRY_IMAGE/qemu/centos8:latest 592 script: .gitlab-ci.d/check-dco.py 593 except: 594 variables: 595 - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master' 596 variables: 597 GIT_DEPTH: 1000 598 599build-libvhost-user: 600 stage: build 601 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest 602 before_script: 603 - dnf install -y meson ninja-build 604 script: 605 - mkdir subprojects/libvhost-user/build 606 - cd subprojects/libvhost-user/build 607 - meson 608 - ninja 609 610# Prepare for GitLab pages deployment. Anything copied into the 611# "public" directory will be deployed to $USER.gitlab.io/$PROJECT 612pages: 613 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest 614 stage: test 615 needs: 616 - job: build-tools-and-docs-debian 617 script: 618 - mkdir -p public 619 # HTML-ised source tree 620 - make gtags 621 - htags -anT --tree-view=filetree -m qemu_init 622 -t "Welcome to the QEMU sourcecode" 623 - mv HTML public/src 624 # Project documentation 625 - mv build/docs/index.html public/ 626 - for i in devel interop specs system tools user ; do mv build/docs/$i public/ ; done 627 artifacts: 628 paths: 629 - public 630