xref: /openbmc/qemu/.travis.yml (revision 0b84b662)
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
4dist: xenial
5language: c
6compiler:
7  - gcc
8cache:
9  # There is one cache per branch and compiler version.
10  # characteristics of each job are used to identify the cache:
11  # - OS name (currently, linux, osx, or windows)
12  # - OS distribution (for Linux, xenial, trusty, or precise)
13  # - macOS image name (e.g., xcode7.2)
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
22addons:
23  apt:
24    packages:
25      # Build dependencies
26      - libaio-dev
27      - libattr1-dev
28      - libbrlapi-dev
29      - libcap-dev
30      - libcap-ng-dev
31      - libgcc-4.8-dev
32      - libgnutls-dev
33      - libgtk-3-dev
34      - libiscsi-dev
35      - liblttng-ust-dev
36      - libncurses5-dev
37      - libnfs-dev
38      - libnss3-dev
39      - libpixman-1-dev
40      - libpng12-dev
41      - librados-dev
42      - libsdl1.2-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      - libvte-2.91-dev
50      - sparse
51      - uuid-dev
52      - gcovr
53  homebrew:
54    packages:
55      - ccache
56      - glib
57      - pixman
58      - gnu-sed
59    update: true
60
61
62# The channel name "irc.oftc.net#qemu" is encrypted against qemu/qemu
63# to prevent IRC notifications from forks. This was created using:
64# $ travis encrypt -r "qemu/qemu" "irc.oftc.net#qemu"
65notifications:
66  irc:
67    channels:
68      - secure: "F7GDRgjuOo5IUyRLqSkmDL7kvdU4UcH3Lm/W2db2JnDHTGCqgEdaYEYKciyCLZ57vOTsTsOgesN8iUT7hNHBd1KWKjZe9KDTZWppWRYVwAwQMzVeSOsbbU4tRoJ6Pp+3qhH1Z0eGYR9ZgKYAoTumDFgSAYRp4IscKS8jkoedOqM="
69    on_success: change
70    on_failure: always
71
72
73env:
74  global:
75    - SRC_DIR="."
76    - BUILD_DIR="."
77    - BASE_CONFIG="--disable-docs --disable-tools"
78    - TEST_CMD="make check -j3 V=1"
79    # This is broadly a list of "mainline" softmmu targets which have support across the major distros
80    - MAIN_SOFTMMU_TARGETS="aarch64-softmmu,arm-softmmu,i386-softmmu,mips-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu"
81    - CCACHE_SLOPPINESS="include_file_ctime,include_file_mtime"
82    - CCACHE_MAXSIZE=1G
83
84
85git:
86  # we want to do this ourselves
87  submodules: false
88
89
90before_script:
91  - if [ "$TRAVIS_OS_NAME" == "osx" ] ; then export PATH="/usr/local/opt/ccache/libexec:$PATH" ; fi
92  - command -v ccache && ccache --zero-stats
93  - mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR}
94  - ${SRC_DIR}/configure ${BASE_CONFIG} ${CONFIG} || { cat config.log && exit 1; }
95script:
96  - make -j3 && travis_retry ${TEST_CMD}
97after_script:
98  - command -v ccache && ccache --show-stats
99
100
101matrix:
102  include:
103    - env:
104        - CONFIG="--disable-system --static"
105        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
106
107
108    # we split the system builds as it takes a while to build them all
109    - env:
110        - CONFIG="--disable-user --target-list=${MAIN_SOFTMMU_TARGETS}"
111        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
112
113
114    - env:
115        - CONFIG="--disable-user --target-list-exclude=${MAIN_SOFTMMU_TARGETS}"
116        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
117
118
119    # Just build tools and run minimal unit and softfloat checks
120    - env:
121        - BASE_CONFIG="--enable-tools"
122        - CONFIG="--disable-user --disable-system"
123        - TEST_CMD="make check-unit check-softfloat -j3"
124        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
125
126
127    - env:
128        - CONFIG="--enable-debug --enable-debug-tcg --disable-user"
129        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug"
130
131
132    # TCG debug can be run just on it's own and is mostly agnostic to user/softmmu distinctions
133    - env:
134        - CONFIG="--enable-debug-tcg --disable-system"
135        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug"
136
137
138    - env:
139        - CONFIG="--disable-linux-aio --disable-cap-ng --disable-attr --disable-brlapi --disable-libusb --disable-replication --target-list=${MAIN_SOFTMMU_TARGETS}"
140
141
142    # Module builds are mostly of interest to major distros
143    - env:
144        - CONFIG="--enable-modules --target-list=${MAIN_SOFTMMU_TARGETS}"
145        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
146
147
148    # Alternate coroutines implementations are only really of interest to KVM users
149    # However we can't test against KVM on Travis so we can only run unit tests
150    - env:
151        - CONFIG="--with-coroutine=ucontext --disable-tcg"
152        - TEST_CMD="make check-unit -j3 V=1"
153
154
155    - env:
156        - CONFIG="--with-coroutine=sigaltstack --disable-tcg"
157        - TEST_CMD="make check-unit -j3 V=1"
158
159
160    # Check we can build docs and tools (out of tree)
161    - env:
162        - BUILD_DIR="out-of-tree/build/dir" SRC_DIR="../../.."
163        - BASE_CONFIG="--enable-tools --enable-docs"
164        - CONFIG="--target-list=x86_64-softmmu,aarch64-linux-user"
165        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
166      addons:
167        apt:
168          packages:
169            - python-sphinx
170            - texinfo
171            - perl
172
173
174    # Test with Clang for compile portability (Travis uses clang-5.0)
175    - env:
176        - CONFIG="--disable-system"
177        - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-default"
178      compiler: clang
179
180
181    - env:
182        - CONFIG="--disable-user --target-list=${MAIN_SOFTMMU_TARGETS}"
183        - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-default"
184      compiler: clang
185
186
187    - env:
188        - CONFIG="--target-list=${MAIN_SOFTMMU_TARGETS} "
189      compiler: clang
190      before_script:
191        - ./configure ${CONFIG} --extra-cflags="-fsanitize=undefined -Werror" || { cat config.log && exit 1; }
192
193
194    - env:
195        - CONFIG="--disable-user --target-list-exclude=${MAIN_SOFTMMU_TARGETS}"
196        - CACHE_NAME="${TRAVIS_BRANCH}-linux-clang-default"
197      compiler: clang
198
199
200    # gprof/gcov are GCC features
201    - env:
202        - CONFIG="--enable-gprof --enable-gcov --disable-pie --target-list=${MAIN_SOFTMMU_TARGETS}"
203      after_success:
204        - ${SRC_DIR}/scripts/travis/coverage-summary.sh
205
206
207    # We manually include builds which we disable "make check" for
208    - env:
209        - CONFIG="--without-default-devices --disable-user"
210        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
211        - TEST_CMD=""
212
213
214    # We manually include builds which we disable "make check" for
215    - env:
216        - CONFIG="--enable-debug --enable-tcg-interpreter"
217        - TEST_CMD=""
218
219
220    # We don't need to exercise every backend with every front-end
221    - env:
222        - CONFIG="--enable-trace-backends=log,simple,syslog --disable-system"
223        - TEST_CMD=""
224
225
226    - env:
227        - CONFIG="--enable-trace-backends=ftrace --target-list=x86_64-softmmu"
228        - TEST_CMD=""
229
230
231    - env:
232        - CONFIG="--enable-trace-backends=ust --target-list=x86_64-softmmu"
233        - TEST_CMD=""
234
235
236    # MacOSX builds
237    - env:
238        - CONFIG="--target-list=${MAIN_SOFTMMU_TARGETS}"
239      os: osx
240      osx_image: xcode9.4
241      compiler: clang
242
243
244    - env:
245        - CONFIG="--target-list=i386-softmmu,ppc-softmmu,ppc64-softmmu,m68k-softmmu,x86_64-softmmu"
246      os: osx
247      osx_image: xcode10.2
248      compiler: clang
249
250
251    # Python builds
252    - env:
253        - CONFIG="--target-list=x86_64-softmmu"
254        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
255      language: python
256      python:
257        - "3.4"
258
259
260    - env:
261        - CONFIG="--target-list=x86_64-softmmu"
262        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
263      language: python
264      python:
265        - "3.6"
266
267
268    # Acceptance (Functional) tests
269    - env:
270        - CONFIG="--python=/usr/bin/python3 --target-list=x86_64-softmmu,mips-softmmu,mips64el-softmmu,aarch64-softmmu,arm-softmmu,s390x-softmmu,alpha-softmmu,ppc64-softmmu,m68k-softmmu"
271        - TEST_CMD="make check-acceptance"
272      after_failure:
273        - cat tests/results/latest/job.log
274      addons:
275        apt:
276          packages:
277            - python3-pil
278            - python3-pip
279            - python3.5-venv
280            - tesseract-ocr
281            - tesseract-ocr-eng
282
283
284    # Using newer GCC with sanitizers
285    - addons:
286        apt:
287          update: true
288          sources:
289            # PPAs for newer toolchains
290            - ubuntu-toolchain-r-test
291          packages:
292            # Extra toolchains
293            - gcc-9
294            - g++-9
295            # Build dependencies
296            - libaio-dev
297            - libattr1-dev
298            - libbrlapi-dev
299            - libcap-ng-dev
300            - libgnutls-dev
301            - libgtk-3-dev
302            - libiscsi-dev
303            - liblttng-ust-dev
304            - libnfs-dev
305            - libncurses5-dev
306            - libnss3-dev
307            - libpixman-1-dev
308            - libpng12-dev
309            - librados-dev
310            - libsdl1.2-dev
311            - libseccomp-dev
312            - libspice-protocol-dev
313            - libspice-server-dev
314            - libssh-dev
315            - liburcu-dev
316            - libusb-1.0-0-dev
317            - libvte-2.91-dev
318            - sparse
319            - uuid-dev
320      language: generic
321      compiler: none
322      env:
323        - COMPILER_NAME=gcc CXX=g++-9 CC=gcc-9
324        - CONFIG="--cc=gcc-9 --cxx=g++-9 --disable-pie --disable-linux-user"
325        - TEST_CMD=""
326      before_script:
327        - ./configure ${CONFIG} --extra-cflags="-g3 -O0 -Wno-error=stringop-truncation -fsanitize=thread -fuse-ld=gold" || { cat config.log && exit 1; }
328
329
330    # Run check-tcg against linux-user
331    - env:
332        - CONFIG="--disable-system"
333        - TEST_CMD="make -j3 check-tcg V=1"
334        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
335
336
337    # Run check-tcg against softmmu targets
338    - env:
339        - CONFIG="--target-list=xtensa-softmmu,arm-softmmu,aarch64-softmmu,alpha-softmmu"
340        - TEST_CMD="make -j3 check-tcg V=1"
341        - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-default"
342