xref: /qemu/.gitlab-ci.yml (revision 09ec8517)
1# Currently we have two build stages after our containers are built:
2#  - build (for traditional build and test or first stage build)
3#  - test (for test stages, using build artefacts from a build stage)
4stages:
5  - containers
6  - containers-layer2
7  - build
8  - test
9
10include:
11  - local: '/.gitlab-ci.d/edk2.yml'
12  - local: '/.gitlab-ci.d/opensbi.yml'
13  - local: '/.gitlab-ci.d/containers.yml'
14  - local: '/.gitlab-ci.d/crossbuilds.yml'
15
16.native_build_job_template: &native_build_job_definition
17  stage: build
18  image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
19  before_script:
20    - JOBS=$(expr $(nproc) + 1)
21  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
85build-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
101check-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
110acceptance-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
120build-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
135check-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
144acceptance-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
154build-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
169check-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
178acceptance-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
188build-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
204check-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
213acceptance-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
223build-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
239check-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
248acceptance-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
258build-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
272check-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
281acceptance-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
292build-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)
378build-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
401build-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
410build-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
420build-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
433build-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
443build-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
452build-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
462clang-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
474clang-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
496build-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
514check-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
523acceptance-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
533build-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
551check-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
560acceptance-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
570build-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
588check-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
597acceptance-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
607tsan-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
619build-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 lm32-softmmu unicore32-softmmu
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.
635check-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
646gprof-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
659build-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
679build-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
704build-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.
718crypto-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
728crypto-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
738crypto-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
750build-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
758build-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
768check-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
781check-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
793build-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
808build-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
823pages:
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
841