xref: /openbmc/qemu/.gitlab-ci.yml (revision 5e437d3c)
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 $CONFIGURE_ARGS --target-list="$TARGETS" ;
27      else
28        ../configure --enable-werror $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        $(grep GIT_SUBMODULES build/config-host.mak | sed 's/GIT_SUBMODULES=//')
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
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-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  artifacts:
506    expire_in: 2 days
507    paths:
508      - build
509
510check-cfi-aarch64:
511  <<: *native_test_job_definition
512  needs:
513    - job: build-cfi-aarch64
514      artifacts: true
515  variables:
516    IMAGE: fedora
517    MAKE_CHECK_ARGS: check
518
519acceptance-cfi-aarch64:
520  <<: *native_test_job_definition
521  needs:
522    - job: build-cfi-aarch64
523      artifacts: true
524  variables:
525    IMAGE: fedora
526    MAKE_CHECK_ARGS: check-acceptance
527  <<: *acceptance_definition
528
529build-cfi-ppc64-s390x:
530  <<: *native_build_job_definition
531  needs:
532  - job: amd64-fedora-container
533  variables:
534    LD_JOBS: 1
535    AR: llvm-ar
536    IMAGE: fedora
537    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
538      --enable-safe-stack --enable-slirp=git
539    TARGETS: ppc64-softmmu s390x-softmmu
540    MAKE_CHECK_ARGS: check-build
541  artifacts:
542    expire_in: 2 days
543    paths:
544      - build
545
546check-cfi-ppc64-s390x:
547  <<: *native_test_job_definition
548  needs:
549    - job: build-cfi-ppc64-s390x
550      artifacts: true
551  variables:
552    IMAGE: fedora
553    MAKE_CHECK_ARGS: check
554
555acceptance-cfi-ppc64-s390x:
556  <<: *native_test_job_definition
557  needs:
558    - job: build-cfi-ppc64-s390x
559      artifacts: true
560  variables:
561    IMAGE: fedora
562    MAKE_CHECK_ARGS: check-acceptance
563  <<: *acceptance_definition
564
565build-cfi-x86_64:
566  <<: *native_build_job_definition
567  needs:
568  - job: amd64-fedora-container
569  variables:
570    LD_JOBS: 1
571    AR: llvm-ar
572    IMAGE: fedora
573    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
574      --enable-safe-stack --enable-slirp=git
575    TARGETS: x86_64-softmmu
576    MAKE_CHECK_ARGS: check-build
577  artifacts:
578    expire_in: 2 days
579    paths:
580      - build
581
582check-cfi-x86_64:
583  <<: *native_test_job_definition
584  needs:
585    - job: build-cfi-x86_64
586      artifacts: true
587  variables:
588    IMAGE: fedora
589    MAKE_CHECK_ARGS: check
590
591acceptance-cfi-x86_64:
592  <<: *native_test_job_definition
593  needs:
594    - job: build-cfi-x86_64
595      artifacts: true
596  variables:
597    IMAGE: fedora
598    MAKE_CHECK_ARGS: check-acceptance
599  <<: *acceptance_definition
600
601tsan-build:
602  <<: *native_build_job_definition
603  needs:
604    job: amd64-ubuntu2004-container
605  variables:
606    IMAGE: ubuntu2004
607    CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10 --disable-docs
608                    --enable-fdt=system --enable-slirp=system
609    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
610    MAKE_CHECK_ARGS: bench V=1
611
612# These targets are on the way out
613build-deprecated:
614  <<: *native_build_job_definition
615  needs:
616    job: amd64-debian-user-cross-container
617  variables:
618    IMAGE: debian-all-test-cross
619    CONFIGURE_ARGS: --disable-docs --disable-tools
620    MAKE_CHECK_ARGS: build-tcg
621    TARGETS: ppc64abi32-linux-user lm32-softmmu unicore32-softmmu
622  artifacts:
623    expire_in: 2 days
624    paths:
625      - build
626
627# We split the check-tcg step as test failures are expected but we still
628# want to catch the build breaking.
629check-deprecated:
630  <<: *native_test_job_definition
631  needs:
632    - job: build-deprecated
633      artifacts: true
634  variables:
635    IMAGE: debian-all-test-cross
636    MAKE_CHECK_ARGS: check-tcg
637  allow_failure: true
638
639# gprof/gcov are GCC features
640gprof-gcov:
641  <<: *native_build_job_definition
642  needs:
643    job: amd64-ubuntu2004-container
644  variables:
645    IMAGE: ubuntu2004
646    CONFIGURE_ARGS: --enable-gprof --enable-gcov
647    MAKE_CHECK_ARGS: check
648    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
649  timeout: 70m
650  after_script:
651    - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
652
653build-oss-fuzz:
654  <<: *native_build_job_definition
655  needs:
656    job: amd64-fedora-container
657  variables:
658    IMAGE: fedora
659  script:
660    - mkdir build-oss-fuzz
661    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
662      ./scripts/oss-fuzz/build.sh
663    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
664    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
665                      | grep -v slirp); do
666        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
667        echo Testing ${fuzzer} ... ;
668        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
669      done
670    # Unrelated to fuzzer: run some tests with -fsanitize=address
671    - cd build-oss-fuzz && make check-qtest-i386 check-unit
672
673build-tci:
674  <<: *native_build_job_definition
675  needs:
676    job: amd64-debian-user-cross-container
677  variables:
678    IMAGE: debian-all-test-cross
679  script:
680    - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
681    - mkdir build
682    - cd build
683    - ../configure --enable-tcg-interpreter
684        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
685    - make -j"$JOBS"
686    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
687    - for tg in $TARGETS ; do
688        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
689        ./tests/qtest/boot-serial-test || exit 1 ;
690        ./tests/qtest/cdrom-test || exit 1 ;
691      done
692    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
693    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
694    - make check-tcg
695
696# Alternate coroutines implementations are only really of interest to KVM users
697# However we can't test against KVM on Gitlab-CI so we can only run unit tests
698build-coroutine-sigaltstack:
699  <<: *native_build_job_definition
700  needs:
701    job: amd64-ubuntu2004-container
702  variables:
703    IMAGE: ubuntu2004
704    CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
705    MAKE_CHECK_ARGS: check-unit
706
707# Most jobs test latest gcrypt or nettle builds
708#
709# These jobs test old gcrypt and nettle from RHEL7
710# which had some API differences.
711crypto-old-nettle:
712  <<: *native_build_job_definition
713  needs:
714    job: amd64-centos7-container
715  variables:
716    IMAGE: centos7
717    TARGETS: x86_64-softmmu x86_64-linux-user
718    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
719    MAKE_CHECK_ARGS: check
720
721crypto-old-gcrypt:
722  <<: *native_build_job_definition
723  needs:
724    job: amd64-centos7-container
725  variables:
726    IMAGE: centos7
727    TARGETS: x86_64-softmmu x86_64-linux-user
728    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
729    MAKE_CHECK_ARGS: check
730
731crypto-only-gnutls:
732  <<: *native_build_job_definition
733  needs:
734    job: amd64-centos7-container
735  variables:
736    IMAGE: centos7
737    TARGETS: x86_64-softmmu x86_64-linux-user
738    CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
739    MAKE_CHECK_ARGS: check
740
741
742# We don't need to exercise every backend with every front-end
743build-trace-multi-user:
744  <<: *native_build_job_definition
745  needs:
746    job: amd64-ubuntu2004-container
747  variables:
748    IMAGE: ubuntu2004
749    CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system
750
751build-trace-ftrace-system:
752  <<: *native_build_job_definition
753  needs:
754    job: amd64-ubuntu2004-container
755  variables:
756    IMAGE: ubuntu2004
757    CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu
758
759build-trace-ust-system:
760  <<: *native_build_job_definition
761  needs:
762    job: amd64-ubuntu2004-container
763  variables:
764    IMAGE: ubuntu2004
765    CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu
766
767# Check our reduced build configurations
768build-without-default-devices:
769  <<: *native_build_job_definition
770  needs:
771    job: amd64-centos8-container
772  variables:
773    IMAGE: centos8
774    CONFIGURE_ARGS: --without-default-devices --disable-user
775
776build-without-default-features:
777  <<: *native_build_job_definition
778  needs:
779    job: amd64-debian-container
780  variables:
781    IMAGE: debian-amd64
782    CONFIGURE_ARGS: --without-default-features --disable-user
783        --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu
784    MAKE_CHECK_ARGS: check-unit
785
786check-patch:
787  stage: build
788  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
789  needs:
790    job: amd64-centos8-container
791  script: .gitlab-ci.d/check-patch.py
792  except:
793    variables:
794      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
795  variables:
796    GIT_DEPTH: 1000
797  allow_failure: true
798
799check-dco:
800  stage: build
801  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
802  needs:
803    job: amd64-centos8-container
804  script: .gitlab-ci.d/check-dco.py
805  except:
806    variables:
807      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
808  variables:
809    GIT_DEPTH: 1000
810
811build-libvhost-user:
812  stage: build
813  image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
814  needs:
815    job: amd64-fedora-container
816  before_script:
817    - dnf install -y meson ninja-build
818  script:
819    - mkdir subprojects/libvhost-user/build
820    - cd subprojects/libvhost-user/build
821    - meson
822    - ninja
823
824# No targets are built here, just tools, docs, and unit tests. This
825# also feeds into the eventual documentation deployment steps later
826build-tools-and-docs-debian:
827  <<: *native_build_job_definition
828  needs:
829    job: amd64-debian-container
830  variables:
831    IMAGE: debian-amd64
832    MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
833    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
834  artifacts:
835    expire_in: 2 days
836    paths:
837      - build
838
839# Prepare for GitLab pages deployment. Anything copied into the
840# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
841pages:
842  image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
843  stage: test
844  needs:
845    - job: build-tools-and-docs-debian
846  script:
847    - mkdir -p public
848    # HTML-ised source tree
849    - make gtags
850    - htags -anT --tree-view=filetree -m qemu_init
851        -t "Welcome to the QEMU sourcecode"
852    - mv HTML public/src
853    # Project documentation
854    - make -C build install DESTDIR=$(pwd)/temp-install
855    - mv temp-install/usr/local/share/doc/qemu/* public/
856  artifacts:
857    paths:
858      - public
859