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