disas: Clean up CPUDebug initialization
[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 # We assume GitLab has it's own caching set up for RPM/APT repositories so we
11 # just take care of avocado assets here.
12 cache:
13   paths:
14     - $HOME/avocado/data/cache
15
16 include:
17   - local: '/.gitlab-ci.d/edk2.yml'
18   - local: '/.gitlab-ci.d/opensbi.yml'
19   - local: '/.gitlab-ci.d/containers.yml'
20   - local: '/.gitlab-ci.d/crossbuilds.yml'
21
22 .native_build_job_template: &native_build_job_definition
23   stage: build
24   image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
25   before_script:
26     - JOBS=$(expr $(nproc) + 1)
27   script:
28     - mkdir build
29     - cd build
30     - if test -n "$TARGETS";
31       then
32         ../configure --enable-werror $CONFIGURE_ARGS --target-list="$TARGETS" ;
33       else
34         ../configure --enable-werror $CONFIGURE_ARGS ;
35       fi
36     - make -j"$JOBS"
37     - if test -n "$MAKE_CHECK_ARGS";
38       then
39         make -j"$JOBS" $MAKE_CHECK_ARGS ;
40       fi
41
42 .native_test_job_template: &native_test_job_definition
43   stage: test
44   image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
45   script:
46     - cd build
47     - find . -type f -exec touch {} +
48     - make $MAKE_CHECK_ARGS
49
50 .acceptance_template: &acceptance_definition
51   cache:
52     key: "${CI_JOB_NAME}-cache"
53     paths:
54       - ${CI_PROJECT_DIR}/avocado-cache
55     policy: pull-push
56   before_script:
57     - mkdir -p ~/.config/avocado
58     - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf
59     - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']"
60            >> ~/.config/avocado/avocado.conf
61     - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then
62         du -chs ${CI_PROJECT_DIR}/avocado-cache ;
63       fi
64   after_script:
65     - cd build
66     - python3 -c 'import json; r = json.load(open("tests/results/latest/results.json")); [print(t["logfile"]) for t in r["tests"] if t["status"] not in ("PASS", "SKIP")]' | xargs cat
67     - du -chs ${CI_PROJECT_DIR}/avocado-cache
68
69 build-system-ubuntu:
70   <<: *native_build_job_definition
71   variables:
72     IMAGE: ubuntu2004
73     TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
74       moxie-softmmu microblazeel-softmmu mips64el-softmmu
75     MAKE_CHECK_ARGS: check-build
76   artifacts:
77     expire_in: 2 days
78     paths:
79       - build
80
81 check-system-ubuntu:
82   <<: *native_test_job_definition
83   needs:
84     - job: build-system-ubuntu
85       artifacts: true
86   variables:
87     IMAGE: ubuntu2004
88     MAKE_CHECK_ARGS: check
89
90 acceptance-system-ubuntu:
91   <<: *native_test_job_definition
92   needs:
93     - job: build-system-ubuntu
94       artifacts: true
95   variables:
96     IMAGE: ubuntu2004
97     MAKE_CHECK_ARGS: check-acceptance
98   <<: *acceptance_definition
99
100 build-system-debian:
101   <<: *native_build_job_definition
102   variables:
103     IMAGE: debian-amd64
104     TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
105       riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
106     MAKE_CHECK_ARGS: check-build
107   artifacts:
108     expire_in: 2 days
109     paths:
110       - build
111
112 check-system-debian:
113   <<: *native_test_job_definition
114   needs:
115     - job: build-system-debian
116       artifacts: true
117   variables:
118     IMAGE: debian-amd64
119     MAKE_CHECK_ARGS: check
120
121 acceptance-system-debian:
122   <<: *native_test_job_definition
123   needs:
124     - job: build-system-debian
125       artifacts: true
126   variables:
127     IMAGE: debian-amd64
128     MAKE_CHECK_ARGS: check-acceptance
129   <<: *acceptance_definition
130
131 build-system-fedora:
132   <<: *native_build_job_definition
133   variables:
134     IMAGE: fedora
135     CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
136     TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
137       xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
138     MAKE_CHECK_ARGS: check-build
139   artifacts:
140     expire_in: 2 days
141     paths:
142       - build
143
144 check-system-fedora:
145   <<: *native_test_job_definition
146   needs:
147     - job: build-system-fedora
148       artifacts: true
149   variables:
150     IMAGE: fedora
151     MAKE_CHECK_ARGS: check
152
153 acceptance-system-fedora:
154   <<: *native_test_job_definition
155   needs:
156     - job: build-system-fedora
157       artifacts: true
158   variables:
159     IMAGE: fedora
160     MAKE_CHECK_ARGS: check-acceptance
161   <<: *acceptance_definition
162
163 build-system-centos:
164   <<: *native_build_job_definition
165   variables:
166     IMAGE: centos8
167     CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
168     TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
169       x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
170     MAKE_CHECK_ARGS: check-build
171   artifacts:
172     expire_in: 2 days
173     paths:
174       - build
175
176 check-system-centos:
177   <<: *native_test_job_definition
178   needs:
179     - job: build-system-centos
180       artifacts: true
181   variables:
182     IMAGE: centos8
183     MAKE_CHECK_ARGS: check
184
185 acceptance-system-centos:
186   <<: *native_test_job_definition
187   needs:
188     - job: build-system-centos
189       artifacts: true
190   variables:
191     IMAGE: centos8
192     MAKE_CHECK_ARGS: check-acceptance
193   <<: *acceptance_definition
194
195 build-disabled:
196   <<: *native_build_job_definition
197   variables:
198     IMAGE: fedora
199     CONFIGURE_ARGS: --disable-attr --disable-avx2 --disable-bochs
200       --disable-brlapi --disable-bzip2 --disable-cap-ng --disable-capstone
201       --disable-cloop --disable-coroutine-pool --disable-curl --disable-curses
202       --disable-dmg --disable-docs --disable-glusterfs --disable-gnutls
203       --disable-gtk --disable-guest-agent --disable-iconv --disable-kvm
204       --disable-libiscsi --disable-libpmem --disable-libssh --disable-libusb
205       --disable-libxml2 --disable-linux-aio --disable-live-block-migration
206       --disable-lzo --disable-malloc-trim --disable-mpath --disable-nettle
207       --disable-numa --disable-parallels --disable-pie --disable-qcow1
208       --disable-qed --disable-qom-cast-debug --disable-rbd --disable-rdma
209       --disable-replication --disable-sdl --disable-seccomp --disable-sheepdog
210       --disable-slirp --disable-smartcard --disable-snappy --disable-spice
211       --disable-strip --disable-tpm --disable-usb-redir --disable-vdi
212       --disable-vhost-crypto --disable-vhost-net --disable-vhost-scsi
213       --disable-vhost-user --disable-vhost-vdpa --disable-vhost-vsock
214       --disable-virglrenderer --disable-vnc --disable-vte --disable-vvfat
215       --disable-xen --disable-zstd
216     TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
217       s390x-softmmu i386-linux-user
218     MAKE_CHECK_ARGS: check-qtest SPEED=slow
219
220 build-tcg-disabled:
221   <<: *native_build_job_definition
222   variables:
223     IMAGE: centos8
224   script:
225     - mkdir build
226     - cd build
227     - ../configure --disable-tcg --audio-drv-list=""
228     - make -j"$JOBS"
229     - make check-unit
230     - make check-qapi-schema
231     - cd tests/qemu-iotests/
232     - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
233             052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
234             170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
235     - ./check -qcow2 028 051 056 057 058 065 067 068 082 085 091 095 096 102 122
236             124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
237             208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
238             260 261 262 263 264 270 272 273 277 279
239
240 build-user:
241   <<: *native_build_job_definition
242   variables:
243     IMAGE: debian-all-test-cross
244     CONFIGURE_ARGS: --disable-tools --disable-system
245     MAKE_CHECK_ARGS: check-tcg
246
247 # Run check-tcg against linux-user (with plugins)
248 # we skip sparc64-linux-user until it has been fixed somewhat
249 # we skip cris-linux-user as it doesn't use the common run loop
250 build-user-plugins:
251   <<: *native_build_job_definition
252   variables:
253     IMAGE: debian-all-test-cross
254     CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
255     MAKE_CHECK_ARGS: check-tcg
256   timeout: 1h 30m
257
258 build-clang:
259   <<: *native_build_job_definition
260   variables:
261     IMAGE: fedora
262     CONFIGURE_ARGS: --cc=clang --cxx=clang++
263     TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
264       ppc-softmmu s390x-softmmu arm-linux-user
265     MAKE_CHECK_ARGS: check
266
267 # These targets are on the way out
268 build-deprecated:
269   <<: *native_build_job_definition
270   variables:
271     IMAGE: debian-all-test-cross
272     CONFIGURE_ARGS: --disable-docs --disable-tools
273     MAKE_CHECK_ARGS: build-tcg
274     TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu
275       unicore32-softmmu
276   artifacts:
277     expire_in: 2 days
278     paths:
279       - build
280
281 # We split the check-tcg step as test failures are expected but we still
282 # want to catch the build breaking.
283 check-deprecated:
284   <<: *native_test_job_definition
285   needs:
286     - job: build-deprecated
287       artifacts: true
288   variables:
289     IMAGE: debian-all-test-cross
290     MAKE_CHECK_ARGS: check-tcg
291   allow_failure: true
292
293 build-oss-fuzz:
294   <<: *native_build_job_definition
295   variables:
296     IMAGE: fedora
297   script:
298     - mkdir build-oss-fuzz
299     - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
300       ./scripts/oss-fuzz/build.sh
301     - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
302     - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
303                       | grep -v slirp); do
304         grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
305         echo Testing ${fuzzer} ... ;
306         "${fuzzer}" -runs=1000 -seed=1 || exit 1 ;
307       done
308     # Unrelated to fuzzer: run some tests with -fsanitize=address
309     - cd build-oss-fuzz && make check-qtest-i386 check-unit
310
311 build-tci:
312   <<: *native_build_job_definition
313   variables:
314     IMAGE: fedora
315   script:
316     - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
317     - mkdir build
318     - cd build
319     - ../configure --enable-tcg-interpreter
320         --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)"
321     - make -j"$JOBS"
322     - make run-tcg-tests-x86_64-softmmu
323     - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
324     - for tg in $TARGETS ; do
325         export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
326         ./tests/qtest/boot-serial-test || exit 1 ;
327         ./tests/qtest/cdrom-test || exit 1 ;
328       done
329     - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
330     - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
331
332 # Most jobs test latest gcrypt or nettle builds
333 #
334 # These jobs test old gcrypt and nettle from RHEL7
335 # which had some API differences.
336 build-crypto-old-nettle:
337   <<: *native_build_job_definition
338   variables:
339     IMAGE: centos7
340     TARGETS: x86_64-softmmu x86_64-linux-user
341     CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
342     MAKE_CHECK_ARGS: check-build
343   artifacts:
344     paths:
345       - build
346
347 check-crypto-old-nettle:
348   <<: *native_test_job_definition
349   needs:
350     - job: build-crypto-old-nettle
351       artifacts: true
352   variables:
353     IMAGE: centos7
354     MAKE_CHECK_ARGS: check
355
356
357 build-crypto-old-gcrypt:
358   <<: *native_build_job_definition
359   variables:
360     IMAGE: centos7
361     TARGETS: x86_64-softmmu x86_64-linux-user
362     CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
363     MAKE_CHECK_ARGS: check-build
364   artifacts:
365     paths:
366       - build
367
368 check-crypto-old-gcrypt:
369   <<: *native_test_job_definition
370   needs:
371     - job: build-crypto-old-gcrypt
372       artifacts: true
373   variables:
374     IMAGE: centos7
375     MAKE_CHECK_ARGS: check
376
377
378 build-crypto-only-gnutls:
379   <<: *native_build_job_definition
380   variables:
381     IMAGE: centos7
382     TARGETS: x86_64-softmmu x86_64-linux-user
383     CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
384     MAKE_CHECK_ARGS: check-build
385   artifacts:
386     paths:
387       - build
388
389 check-crypto-only-gnutls:
390   <<: *native_test_job_definition
391   needs:
392     - job: build-crypto-only-gnutls
393       artifacts: true
394   variables:
395     IMAGE: centos7
396     MAKE_CHECK_ARGS: check