xref: /qemu/.gitlab-ci.yml (revision 1aab5f05)
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 an optional dependency
421# declared. The image is manually uploaded.
422build-user-hexagon:
423  extends: .native_build_job_template
424  needs:
425    job: hexagon-cross-container
426    optional: true
427  variables:
428    IMAGE: debian-hexagon-cross
429    TARGETS: hexagon-linux-user
430    CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
431    MAKE_CHECK_ARGS: check-tcg
432
433# Only build the softmmu targets we have check-tcg tests for
434build-some-softmmu:
435  extends: .native_build_job_template
436  needs:
437    job: amd64-debian-user-cross-container
438  variables:
439    IMAGE: debian-all-test-cross
440    CONFIGURE_ARGS: --disable-tools --enable-debug
441    TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
442    MAKE_CHECK_ARGS: check-tcg
443
444# Run check-tcg against linux-user (with plugins)
445# we skip sparc64-linux-user until it has been fixed somewhat
446# we skip cris-linux-user as it doesn't use the common run loop
447build-user-plugins:
448  extends: .native_build_job_template
449  needs:
450    job: amd64-debian-user-cross-container
451  variables:
452    IMAGE: debian-all-test-cross
453    CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
454    MAKE_CHECK_ARGS: check-tcg
455  timeout: 1h 30m
456
457build-user-centos7:
458  extends: .native_build_job_template
459  needs:
460    job: amd64-centos7-container
461  variables:
462    IMAGE: centos7
463    CONFIGURE_ARGS: --disable-system --disable-tools --disable-docs
464    MAKE_CHECK_ARGS: check-tcg
465
466build-some-softmmu-plugins:
467  extends: .native_build_job_template
468  needs:
469    job: amd64-debian-user-cross-container
470  variables:
471    IMAGE: debian-all-test-cross
472    CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg
473    TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
474    MAKE_CHECK_ARGS: check-tcg
475
476clang-system:
477  extends: .native_build_job_template
478  needs:
479    job: amd64-fedora-container
480  variables:
481    IMAGE: fedora
482    CONFIGURE_ARGS: --cc=clang --cxx=clang++
483      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
484    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
485      ppc-softmmu s390x-softmmu
486    MAKE_CHECK_ARGS: check-qtest check-tcg
487
488clang-user:
489  extends: .native_build_job_template
490  needs:
491    job: amd64-debian-user-cross-container
492  variables:
493    IMAGE: debian-all-test-cross
494    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
495      --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
496      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
497    MAKE_CHECK_ARGS: check-unit check-tcg
498
499# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
500# On gitlab runners, default value sometimes end up calling 2 lds concurrently and
501# triggers an Out-Of-Memory error
502#
503# Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together
504# with QEMU and linked as a static library to avoid false positives in CFI checks.
505# This can be accomplished by using -enable-slirp=git, which avoids the use of
506# a system-wide version of the library
507#
508# Split in three sets of build/check/acceptance to limit the execution time of each
509# job
510build-cfi-aarch64:
511  extends: .native_build_job_template
512  needs:
513  - job: amd64-fedora-container
514  variables:
515    LD_JOBS: 1
516    AR: llvm-ar
517    IMAGE: fedora
518    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
519      --enable-safe-stack --enable-slirp=git
520    TARGETS: aarch64-softmmu
521    MAKE_CHECK_ARGS: check-build
522  timeout: 70m
523  artifacts:
524    expire_in: 2 days
525    paths:
526      - build
527
528check-cfi-aarch64:
529  extends: .native_test_job_template
530  needs:
531    - job: build-cfi-aarch64
532      artifacts: true
533  variables:
534    IMAGE: fedora
535    MAKE_CHECK_ARGS: check
536
537acceptance-cfi-aarch64:
538  extends: .native_test_job_template
539  needs:
540    - job: build-cfi-aarch64
541      artifacts: true
542  variables:
543    IMAGE: fedora
544    MAKE_CHECK_ARGS: check-acceptance
545  <<: *acceptance_definition
546
547build-cfi-ppc64-s390x:
548  extends: .native_build_job_template
549  needs:
550  - job: amd64-fedora-container
551  variables:
552    LD_JOBS: 1
553    AR: llvm-ar
554    IMAGE: fedora
555    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
556      --enable-safe-stack --enable-slirp=git
557    TARGETS: ppc64-softmmu s390x-softmmu
558    MAKE_CHECK_ARGS: check-build
559  timeout: 70m
560  artifacts:
561    expire_in: 2 days
562    paths:
563      - build
564
565check-cfi-ppc64-s390x:
566  extends: .native_test_job_template
567  needs:
568    - job: build-cfi-ppc64-s390x
569      artifacts: true
570  variables:
571    IMAGE: fedora
572    MAKE_CHECK_ARGS: check
573
574acceptance-cfi-ppc64-s390x:
575  extends: .native_test_job_template
576  needs:
577    - job: build-cfi-ppc64-s390x
578      artifacts: true
579  variables:
580    IMAGE: fedora
581    MAKE_CHECK_ARGS: check-acceptance
582  <<: *acceptance_definition
583
584build-cfi-x86_64:
585  extends: .native_build_job_template
586  needs:
587  - job: amd64-fedora-container
588  variables:
589    LD_JOBS: 1
590    AR: llvm-ar
591    IMAGE: fedora
592    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
593      --enable-safe-stack --enable-slirp=git
594    TARGETS: x86_64-softmmu
595    MAKE_CHECK_ARGS: check-build
596  timeout: 70m
597  artifacts:
598    expire_in: 2 days
599    paths:
600      - build
601
602check-cfi-x86_64:
603  extends: .native_test_job_template
604  needs:
605    - job: build-cfi-x86_64
606      artifacts: true
607  variables:
608    IMAGE: fedora
609    MAKE_CHECK_ARGS: check
610
611acceptance-cfi-x86_64:
612  extends: .native_test_job_template
613  needs:
614    - job: build-cfi-x86_64
615      artifacts: true
616  variables:
617    IMAGE: fedora
618    MAKE_CHECK_ARGS: check-acceptance
619  <<: *acceptance_definition
620
621tsan-build:
622  extends: .native_build_job_template
623  needs:
624    job: amd64-ubuntu2004-container
625  variables:
626    IMAGE: ubuntu2004
627    CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
628          --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system
629    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
630    MAKE_CHECK_ARGS: bench V=1
631
632# These targets are on the way out
633build-deprecated:
634  extends: .native_build_job_template
635  needs:
636    job: amd64-debian-user-cross-container
637  variables:
638    IMAGE: debian-all-test-cross
639    CONFIGURE_ARGS: --disable-tools
640    MAKE_CHECK_ARGS: build-tcg
641    TARGETS: ppc64abi32-linux-user
642  artifacts:
643    expire_in: 2 days
644    paths:
645      - build
646
647# We split the check-tcg step as test failures are expected but we still
648# want to catch the build breaking.
649check-deprecated:
650  extends: .native_test_job_template
651  needs:
652    - job: build-deprecated
653      artifacts: true
654  variables:
655    IMAGE: debian-all-test-cross
656    MAKE_CHECK_ARGS: check-tcg
657  allow_failure: true
658
659# gprof/gcov are GCC features
660gprof-gcov:
661  extends: .native_build_job_template
662  needs:
663    job: amd64-ubuntu2004-container
664  variables:
665    IMAGE: ubuntu2004
666    CONFIGURE_ARGS: --enable-gprof --enable-gcov
667    MAKE_CHECK_ARGS: check
668    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
669  timeout: 70m
670  after_script:
671    - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
672
673build-oss-fuzz:
674  extends: .native_build_job_template
675  needs:
676    job: amd64-fedora-container
677  variables:
678    IMAGE: fedora
679  script:
680    - mkdir build-oss-fuzz
681    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
682      ./scripts/oss-fuzz/build.sh
683    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
684    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
685                      | grep -v slirp); do
686        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
687        echo Testing ${fuzzer} ... ;
688        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
689      done
690    # Unrelated to fuzzer: run some tests with -fsanitize=address
691    - cd build-oss-fuzz && make check-qtest-i386 check-unit
692
693build-tci:
694  extends: .native_build_job_template
695  needs:
696    job: amd64-debian-user-cross-container
697  variables:
698    IMAGE: debian-all-test-cross
699  script:
700    - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64"
701    - mkdir build
702    - cd build
703    - ../configure --enable-tcg-interpreter
704        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
705    - make -j"$JOBS"
706    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
707    - for tg in $TARGETS ; do
708        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
709        ./tests/qtest/boot-serial-test || exit 1 ;
710        ./tests/qtest/cdrom-test || exit 1 ;
711      done
712    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
713    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
714    - make check-tcg
715
716# Alternate coroutines implementations are only really of interest to KVM users
717# However we can't test against KVM on Gitlab-CI so we can only run unit tests
718build-coroutine-sigaltstack:
719  extends: .native_build_job_template
720  needs:
721    job: amd64-ubuntu2004-container
722  variables:
723    IMAGE: ubuntu2004
724    CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
725                    --enable-trace-backends=ftrace
726    MAKE_CHECK_ARGS: check-unit
727
728# Most jobs test latest gcrypt or nettle builds
729#
730# These jobs test old gcrypt and nettle from RHEL7
731# which had some API differences.
732crypto-old-nettle:
733  extends: .native_build_job_template
734  needs:
735    job: amd64-centos7-container
736  variables:
737    IMAGE: centos7
738    TARGETS: x86_64-softmmu x86_64-linux-user
739    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
740    MAKE_CHECK_ARGS: check
741
742crypto-old-gcrypt:
743  extends: .native_build_job_template
744  needs:
745    job: amd64-centos7-container
746  variables:
747    IMAGE: centos7
748    TARGETS: x86_64-softmmu x86_64-linux-user
749    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
750    MAKE_CHECK_ARGS: check
751
752crypto-only-gnutls:
753  extends: .native_build_job_template
754  needs:
755    job: amd64-centos7-container
756  variables:
757    IMAGE: centos7
758    TARGETS: x86_64-softmmu x86_64-linux-user
759    CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
760    MAKE_CHECK_ARGS: check
761
762
763# Check our reduced build configurations
764build-without-default-devices:
765  extends: .native_build_job_template
766  needs:
767    job: amd64-centos8-container
768  variables:
769    IMAGE: centos8
770    CONFIGURE_ARGS: --without-default-devices --disable-user
771
772build-without-default-features:
773  extends: .native_build_job_template
774  needs:
775    job: amd64-debian-container
776  variables:
777    IMAGE: debian-amd64
778    CONFIGURE_ARGS: --without-default-features --disable-user
779        --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu
780    MAKE_CHECK_ARGS: check-unit
781
782check-patch:
783  stage: build
784  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
785  needs:
786    job: amd64-centos8-container
787  script: .gitlab-ci.d/check-patch.py
788  except:
789    variables:
790      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
791  variables:
792    GIT_DEPTH: 1000
793  allow_failure: true
794
795check-dco:
796  stage: build
797  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
798  needs:
799    job: amd64-centos8-container
800  script: .gitlab-ci.d/check-dco.py
801  except:
802    variables:
803      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
804  variables:
805    GIT_DEPTH: 1000
806
807build-libvhost-user:
808  stage: build
809  image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
810  needs:
811    job: amd64-fedora-container
812  before_script:
813    - dnf install -y meson ninja-build
814  script:
815    - mkdir subprojects/libvhost-user/build
816    - cd subprojects/libvhost-user/build
817    - meson
818    - ninja
819
820# No targets are built here, just tools, docs, and unit tests. This
821# also feeds into the eventual documentation deployment steps later
822build-tools-and-docs-debian:
823  extends: .native_build_job_template
824  needs:
825    job: amd64-debian-container
826  variables:
827    IMAGE: debian-amd64
828    MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
829    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
830  artifacts:
831    expire_in: 2 days
832    paths:
833      - build
834
835# Prepare for GitLab pages deployment. Anything copied into the
836# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
837pages:
838  image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
839  stage: test
840  needs:
841    - job: build-tools-and-docs-debian
842  script:
843    - mkdir -p public
844    # HTML-ised source tree
845    - make gtags
846    - htags -anT --tree-view=filetree -m qemu_init
847        -t "Welcome to the QEMU sourcecode"
848    - mv HTML public/src
849    # Project documentation
850    - make -C build install DESTDIR=$(pwd)/temp-install
851    - mv temp-install/usr/local/share/doc/qemu/* public/
852  artifacts:
853    paths:
854      - public
855