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