Add option USE_LOCKING for single-threaded build with locking support
[platform/upstream/openblas.git] / .travis.yml
1 # XXX: Precise is already deprecated, new default is Trusty.
2 # https://blog.travis-ci.com/2017-07-11-trusty-as-default-linux-is-coming
3 dist: precise
4 sudo: true
5 language: c
6
7 matrix:
8   include:
9     - &test-ubuntu
10       os: linux
11       compiler: gcc
12       addons:
13         apt:
14           packages:
15             - gfortran
16       before_script: &common-before
17         - COMMON_FLAGS="DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32"
18       script:
19         - set -e
20         - travis_wait 45 make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE
21         - make -C test $COMMON_FLAGS $BTYPE
22         - make -C ctest $COMMON_FLAGS $BTYPE
23         - make -C utest $COMMON_FLAGS $BTYPE
24       env:
25         - TARGET_BOX=LINUX64
26         - BTYPE="BINARY=64"
27
28     - <<: *test-ubuntu
29       os: linux-ppc64le
30       before_script:
31         - COMMON_FLAGS="DYNAMIC_ARCH=1 TARGET=POWER8 NUM_THREADS=32"
32       env:
33         # for matrix annotation only
34         - TARGET_BOX=PPC64LE_LINUX
35         - BTYPE="BINARY=64 USE_OPENMP=1"
36
37     - <<: *test-ubuntu
38       env:
39         - TARGET_BOX=LINUX64
40         - BTYPE="BINARY=64 USE_OPENMP=1"
41
42     - <<: *test-ubuntu
43       env:
44         - TARGET_BOX=LINUX64
45         - BTYPE="BINARY=64 INTERFACE64=1"
46
47     - <<: *test-ubuntu
48       compiler: clang
49       env:
50         - TARGET_BOX=LINUX64
51         - BTYPE="BINARY=64 CC=clang"
52
53     - <<: *test-ubuntu
54       compiler: clang
55       env:
56         - TARGET_BOX=LINUX64
57         - BTYPE="BINARY=64 INTERFACE64=1 CC=clang"
58
59     - <<: *test-ubuntu
60       addons:
61         apt:
62           packages:
63             - gcc-multilib
64             - gfortran-multilib
65       env:
66         - TARGET_BOX=LINUX32
67         - BTYPE="BINARY=32"
68
69     - os: linux
70       compiler: gcc
71       addons:
72         apt:
73           packages:
74             - binutils-mingw-w64-x86-64
75             - gcc-mingw-w64-x86-64
76             - gfortran-mingw-w64-x86-64
77       before_script: *common-before
78       script:
79         - travis_wait 45 make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE
80       env:
81         - TARGET_BOX=WIN64
82         - BTYPE="BINARY=64 HOSTCC=gcc CC=x86_64-w64-mingw32-gcc FC=x86_64-w64-mingw32-gfortran"
83
84     # Build & test on Alpine Linux inside chroot, i.e. on system with musl libc.
85     # These jobs needs sudo, so Travis runs them on VM-based infrastructure
86     # which is slower than container-based infrastructure used for jobs
87     # that don't require sudo.
88     - &test-alpine
89       os: linux
90       dist: trusty
91       sudo: true
92       language: minimal
93       before_install:
94         - "wget 'https://raw.githubusercontent.com/alpinelinux/alpine-chroot-install/v0.9.0/alpine-chroot-install' \
95           && echo 'e5dfbbdc0c4b3363b99334510976c86bfa6cb251  alpine-chroot-install' | sha1sum -c || exit 1"
96         - alpine() { /alpine/enter-chroot -u "$USER" "$@"; }
97       install:
98         - sudo sh alpine-chroot-install -p 'build-base gfortran perl linux-headers'
99       before_script: *common-before
100       script:
101         - set -e
102         # XXX: Disable some warnings for now to avoid exceeding Travis limit for log size.
103         - alpine make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE
104               CFLAGS="-Wno-misleading-indentation -Wno-sign-conversion -Wno-incompatible-pointer-types"
105         - alpine make -C test $COMMON_FLAGS $BTYPE
106         - alpine make -C ctest $COMMON_FLAGS $BTYPE
107         - alpine make -C utest $COMMON_FLAGS $BTYPE
108       env:
109         - TARGET_BOX=LINUX64_MUSL
110         - BTYPE="BINARY=64"
111
112     # XXX: This job segfaults in TESTS OF THE COMPLEX LEVEL 3 BLAS,
113     # but only on Travis CI, cannot reproduce it elsewhere.
114     #- &test-alpine-openmp
115     #  <<: *test-alpine
116     #  env:
117     #    - TARGET_BOX=LINUX64_MUSL
118     #    - BTYPE="BINARY=64 USE_OPENMP=1"
119
120     - <<: *test-alpine
121       env:
122         - TARGET_BOX=LINUX64_MUSL
123         - BTYPE="BINARY=64 INTERFACE64=1"
124
125     # Build with the same flags as Alpine do in OpenBLAS package.
126     - <<: *test-alpine
127       env:
128         - TARGET_BOX=LINUX64_MUSL
129         - BTYPE="BINARY=64 NO_AFFINITY=1 USE_OPENMP=0 NO_LAPACK=0 TARGET=CORE2"
130
131     - &test-cmake
132       os: linux
133       compiler: clang
134       addons:
135         apt:
136           packages:
137             - gfortran
138             - cmake
139       dist: trusty
140       sudo: true
141       before_script:
142         - COMMON_ARGS="-DTARGET=NEHALEM -DNUM_THREADS=32"
143       script:
144         - set -e
145         - mkdir build
146         - CONFIG=Release
147         - cmake -Bbuild -H. $CMAKE_ARGS $COMMON_ARGS -DCMAKE_BUILD_TYPE=$CONFIG
148         - cmake --build build --config $CONFIG -- -j2
149       env:
150         - CMAKE=1
151     - <<: *test-cmake
152       env:
153         - CMAKE=1 CMAKE_ARGS="-DNOFORTRAN=1"
154     - <<: *test-cmake
155       compiler: gcc
156       env:
157         - CMAKE=1
158
159     - &test-macos
160       os: osx
161       osx_image: xcode10.1
162       before_script:
163         - COMMON_FLAGS="DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32"
164         - brew update
165         - brew install gcc # for gfortran
166       script:
167         - travis_wait 45 make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE
168       env:
169         - BTYPE="BINARY=64 INTERFACE64=1"
170
171     - <<: *test-macos
172       osx_image: xcode8.3
173       env:
174         - BTYPE="BINARY=32"
175
176     - &emulated-arm
177       dist: trusty
178       sudo: required
179       services: docker
180       env: IMAGE_ARCH=arm32 TARGET_ARCH=ARMV6 COMPILER=clang
181       name: "Emulated Build for ARMV6 with clang"
182       before_install: sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset
183       script: |
184         echo "FROM openblas/alpine:${IMAGE_ARCH}
185         COPY . /tmp/openblas
186         RUN mkdir /tmp/openblas/build                             &&  \
187             cd /tmp/openblas/build                                &&  \
188             CC=${COMPILER} cmake -D DYNAMIC_ARCH=OFF                  \
189                                  -D TARGET=${TARGET_ARCH}             \
190                                  -D BUILD_SHARED_LIBS=ON              \
191                                  -D BUILD_WITHOUT_LAPACK=ON           \
192                                  -D BUILD_WITHOUT_CBLAS=ON            \
193                                  -D CMAKE_BUILD_TYPE=Release ../  &&  \
194             cmake --build ." > Dockerfile
195         docker build .
196     - <<: *emulated-arm
197       env: IMAGE_ARCH=arm64 TARGET_ARCH=ARMV8 COMPILER=gcc
198       name: "Emulated Build for ARMV8 with gcc"
199     - <<: *emulated-arm
200       env: IMAGE_ARCH=arm64 TARGET_ARCH=ARMV8 COMPILER=clang
201       name: "Emulated Build for ARMV8 with clang"
202
203   allow_failures:
204     - env: IMAGE_ARCH=arm32 TARGET_ARCH=ARMV6 COMPILER=clang
205     - env: IMAGE_ARCH=arm64 TARGET_ARCH=ARMV8 COMPILER=gcc
206     - env: IMAGE_ARCH=arm64 TARGET_ARCH=ARMV8 COMPILER=clang
207
208 # whitelist
209 branches:
210   only:
211     - master
212     - develop
213
214 notifications:
215   webhooks:
216     urls:
217       - https://webhooks.gitter.im/e/8a6e4470a0cebd090344
218     on_success: change  # options: [always|never|change] default: always
219     on_failure: always  # options: [always|never|change] default: always
220     on_start: never     # options: [always|never|change] default: always