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