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