Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20210624' into...
[qemu.git] / .travis.yml
1 # The current Travis default is a VM based 16.04 Xenial on GCE
2 # Additional builds with specific requirements for a full VM need to
3 # be added as additional matrix: entries later on
4 os: linux
5 dist: focal
6 language: c
7 compiler:
8   - gcc
9 cache:
10   # There is one cache per branch and compiler version.
11   # characteristics of each job are used to identify the cache:
12   # - OS name (currently only linux)
13   # - OS distribution (for Linux, bionic or focal)
14   # - Names and values of visible environment variables set in .travis.yml or Settings panel
15   timeout: 1200
16   ccache: true
17   pip: true
18   directories:
19   - $HOME/avocado/data/cache
20
21
22 addons:
23   apt:
24     packages:
25       # Build dependencies
26       - libaio-dev
27       - libattr1-dev
28       - libbrlapi-dev
29       - libcap-ng-dev
30       - libgcc-7-dev
31       - libgnutls28-dev
32       - libgtk-3-dev
33       - libiscsi-dev
34       - liblttng-ust-dev
35       - libncurses5-dev
36       - libnfs-dev
37       - libnss3-dev
38       - libpixman-1-dev
39       - libpng-dev
40       - librados-dev
41       - libsdl2-dev
42       - libsdl2-image-dev
43       - libseccomp-dev
44       - libspice-protocol-dev
45       - libspice-server-dev
46       - libssh-dev
47       - liburcu-dev
48       - libusb-1.0-0-dev
49       - libvdeplug-dev
50       - libvte-2.91-dev
51       - libzstd-dev
52       - ninja-build
53       - sparse
54       - uuid-dev
55       # Tests dependencies
56       - genisoimage
57
58
59 # The channel name "irc.oftc.net#qemu" is encrypted against qemu/qemu
60 # to prevent IRC notifications from forks. This was created using:
61 # $ travis encrypt -r "qemu/qemu" "irc.oftc.net#qemu"
62 notifications:
63   irc:
64     channels:
65       - secure: "F7GDRgjuOo5IUyRLqSkmDL7kvdU4UcH3Lm/W2db2JnDHTGCqgEdaYEYKciyCLZ57vOTsTsOgesN8iUT7hNHBd1KWKjZe9KDTZWppWRYVwAwQMzVeSOsbbU4tRoJ6Pp+3qhH1Z0eGYR9ZgKYAoTumDFgSAYRp4IscKS8jkoedOqM="
66     on_success: change
67     on_failure: always
68
69
70 env:
71   global:
72     - SRC_DIR=".."
73     - BUILD_DIR="build"
74     - BASE_CONFIG="--disable-docs --disable-tools"
75     - TEST_BUILD_CMD=""
76     - TEST_CMD="make check V=1"
77     # This is broadly a list of "mainline" softmmu targets which have support across the major distros
78     - MAIN_SOFTMMU_TARGETS="aarch64-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu"
79     - CCACHE_SLOPPINESS="include_file_ctime,include_file_mtime"
80     - CCACHE_MAXSIZE=1G
81     - G_MESSAGES_DEBUG=error
82
83
84 git:
85   # we want to do this ourselves
86   submodules: false
87
88 # Common first phase for all steps
89 # We no longer use nproc to calculate jobs:
90 # https://travis-ci.community/t/nproc-reports-32-cores-on-arm64/5851
91 before_install:
92   - if command -v ccache ; then ccache --zero-stats ; fi
93   - export JOBS=3
94   - echo "=== Using ${JOBS} simultaneous jobs ==="
95
96 # Configure step - may be overridden
97 before_script:
98   - mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR}
99   - ${SRC_DIR}/configure ${BASE_CONFIG} ${CONFIG} || { cat config.log meson-logs/meson-log.txt && exit 1; }
100
101 # Main build & test - rarely overridden - controlled by TEST_CMD
102 script:
103   - BUILD_RC=0 && make -j${JOBS} || BUILD_RC=$?
104   - |
105     if [ "$BUILD_RC" -eq 0 ] && [ -n "$TEST_BUILD_CMD" ]; then
106         ${TEST_BUILD_CMD} || BUILD_RC=$?
107     else
108         $(exit $BUILD_RC);
109     fi
110   - |
111     if [ "$BUILD_RC" -eq 0 ] ; then
112         ${TEST_CMD} ;
113     else
114         $(exit $BUILD_RC);
115     fi
116 after_script:
117   - df -h
118   - if command -v ccache ; then ccache --show-stats ; fi
119
120
121 jobs:
122   include:
123
124     - name: "[aarch64] GCC check-tcg"
125       arch: arm64
126       dist: focal
127       addons:
128         apt_packages:
129           - libaio-dev
130           - libattr1-dev
131           - libbrlapi-dev
132           - libcap-ng-dev
133           - libgcrypt20-dev
134           - libgnutls28-dev
135           - libgtk-3-dev
136           - libiscsi-dev
137           - liblttng-ust-dev
138           - libncurses5-dev
139           - libnfs-dev
140           - libnss3-dev
141           - libpixman-1-dev
142           - libpng-dev
143           - librados-dev
144           - libsdl2-dev
145           - libseccomp-dev
146           - liburcu-dev
147           - libusb-1.0-0-dev
148           - libvdeplug-dev
149           - libvte-2.91-dev
150           - ninja-build
151           # Tests dependencies
152           - genisoimage
153       env:
154         - TEST_CMD="make check check-tcg V=1"
155         - CONFIG="--disable-containers --target-list=${MAIN_SOFTMMU_TARGETS} --cxx=/bin/false"
156         - UNRELIABLE=true
157
158     - name: "[ppc64] GCC check-tcg"
159       arch: ppc64le
160       dist: focal
161       addons:
162         apt_packages:
163           - libaio-dev
164           - libattr1-dev
165           - libbrlapi-dev
166           - libcap-ng-dev
167           - libgcrypt20-dev
168           - libgnutls28-dev
169           - libgtk-3-dev
170           - libiscsi-dev
171           - liblttng-ust-dev
172           - libncurses5-dev
173           - libnfs-dev
174           - libnss3-dev
175           - libpixman-1-dev
176           - libpng-dev
177           - librados-dev
178           - libsdl2-dev
179           - libseccomp-dev
180           - liburcu-dev
181           - libusb-1.0-0-dev
182           - libvdeplug-dev
183           - libvte-2.91-dev
184           - ninja-build
185           # Tests dependencies
186           - genisoimage
187       env:
188         - TEST_CMD="make check check-tcg V=1"
189         - CONFIG="--disable-containers --target-list=ppc64-softmmu,ppc64le-linux-user"
190
191     - name: "[s390x] GCC check-tcg"
192       arch: s390x
193       dist: bionic
194       addons:
195         apt_packages:
196           - libaio-dev
197           - libattr1-dev
198           - libbrlapi-dev
199           - libcap-ng-dev
200           - libgcrypt20-dev
201           - libgnutls28-dev
202           - libgtk-3-dev
203           - libiscsi-dev
204           - liblttng-ust-dev
205           - libncurses5-dev
206           - libnfs-dev
207           - libnss3-dev
208           - libpixman-1-dev
209           - libpng-dev
210           - librados-dev
211           - libsdl2-dev
212           - libseccomp-dev
213           - liburcu-dev
214           - libusb-1.0-0-dev
215           - libvdeplug-dev
216           - libvte-2.91-dev
217           - ninja-build
218           # Tests dependencies
219           - genisoimage
220       env:
221         - TEST_CMD="make check check-tcg V=1"
222         - CONFIG="--disable-containers --target-list=${MAIN_SOFTMMU_TARGETS},s390x-linux-user"
223         - UNRELIABLE=true
224       script:
225         - BUILD_RC=0 && make -j${JOBS} || BUILD_RC=$?
226         - |
227           if [ "$BUILD_RC" -eq 0 ] ; then
228               mv pc-bios/s390-ccw/*.img pc-bios/ ;
229               ${TEST_CMD} ;
230           else
231               $(exit $BUILD_RC);
232           fi
233
234     - name: "[s390x] GCC (other-softmmu)"
235       arch: s390x
236       dist: bionic
237       addons:
238         apt_packages:
239           - libaio-dev
240           - libattr1-dev
241           - libcap-ng-dev
242           - libgnutls28-dev
243           - libiscsi-dev
244           - liblttng-ust-dev
245           - liblzo2-dev
246           - libncurses-dev
247           - libnfs-dev
248           - libnss3-dev
249           - libpixman-1-dev
250           - libsdl2-dev
251           - libsdl2-image-dev
252           - libseccomp-dev
253           - libsnappy-dev
254           - libzstd-dev
255           - nettle-dev
256           - xfslibs-dev
257           - ninja-build
258           # Tests dependencies
259           - genisoimage
260       env:
261         - CONFIG="--disable-containers --audio-drv-list=sdl --disable-user
262                   --target-list-exclude=${MAIN_SOFTMMU_TARGETS}"
263
264     - name: "[s390x] GCC (user)"
265       arch: s390x
266       dist: bionic
267       addons:
268         apt_packages:
269           - libgcrypt20-dev
270           - libgnutls28-dev
271           - ninja-build
272       env:
273         - CONFIG="--disable-containers --disable-system"
274
275     - name: "[s390x] Clang (disable-tcg)"
276       arch: s390x
277       dist: bionic
278       compiler: clang
279       addons:
280         apt_packages:
281           - libaio-dev
282           - libattr1-dev
283           - libbrlapi-dev
284           - libcap-ng-dev
285           - libgcrypt20-dev
286           - libgnutls28-dev
287           - libgtk-3-dev
288           - libiscsi-dev
289           - liblttng-ust-dev
290           - libncurses5-dev
291           - libnfs-dev
292           - libnss3-dev
293           - libpixman-1-dev
294           - libpng-dev
295           - librados-dev
296           - libsdl2-dev
297           - libseccomp-dev
298           - liburcu-dev
299           - libusb-1.0-0-dev
300           - libvdeplug-dev
301           - libvte-2.91-dev
302           - ninja-build
303       env:
304         - TEST_CMD="make check-unit"
305         - CONFIG="--disable-containers --disable-tcg --enable-kvm
306                   --disable-tools --host-cc=clang --cxx=clang++"
307         - UNRELIABLE=true
308
309     # Release builds
310     # The make-release script expect a QEMU version, so our tag must start with a 'v'.
311     # This is the case when release candidate tags are created.
312     - name: "Release tarball"
313       if: tag IS present AND tag =~ /^v\d+\.\d+(\.\d+)?(-\S*)?$/
314       env:
315         # We want to build from the release tarball
316         - BUILD_DIR="release/build/dir" SRC_DIR="../../.."
317         - BASE_CONFIG="--prefix=$PWD/dist"
318         - CONFIG="--target-list=x86_64-softmmu,aarch64-softmmu,armeb-linux-user,ppc-linux-user"
319         - TEST_CMD="make install -j${JOBS}"
320         - QEMU_VERSION="${TRAVIS_TAG:1}"
321         - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
322       script:
323         - make -C ${SRC_DIR} qemu-${QEMU_VERSION}.tar.bz2
324         - ls -l ${SRC_DIR}/qemu-${QEMU_VERSION}.tar.bz2
325         - tar -xf ${SRC_DIR}/qemu-${QEMU_VERSION}.tar.bz2 && cd qemu-${QEMU_VERSION}
326         - mkdir -p release-build && cd release-build
327         - ../configure ${BASE_CONFIG} ${CONFIG} || { cat config.log meson-logs/meson-log.txt && exit 1; }
328         - make install
329   allow_failures:
330     - env: UNRELIABLE=true