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