• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1sudo: required
2dist: trusty
3language: cpp
4
5env:
6  global:
7    - /usr/local/bin:$PATH
8
9matrix:
10  include:
11    - compiler: gcc
12      addons:
13        apt:
14          packages:
15            - lcov
16      env: COMPILER=g++ C_COMPILER=gcc BUILD_TYPE=Coverage
17    - compiler: gcc
18      env: COMPILER=g++ C_COMPILER=gcc BUILD_TYPE=Debug
19    - compiler: gcc
20      env: COMPILER=g++ C_COMPILER=gcc BUILD_TYPE=Release
21    - compiler: gcc
22      addons:
23        apt:
24          packages:
25            - g++-multilib
26            - libc6:i386
27      env:
28        - COMPILER=g++
29        - C_COMPILER=gcc
30        - BUILD_TYPE=Debug
31        - BUILD_32_BITS=ON
32        - EXTRA_FLAGS="-m32"
33    - compiler: gcc
34      addons:
35        apt:
36          packages:
37            - g++-multilib
38            - libc6:i386
39      env:
40        - COMPILER=g++
41        - C_COMPILER=gcc
42        - BUILD_TYPE=Release
43        - BUILD_32_BITS=ON
44        - EXTRA_FLAGS="-m32"
45    - compiler: gcc
46      env:
47        - INSTALL_GCC6_FROM_PPA=1
48        - COMPILER=g++-6 C_COMPILER=gcc-6  BUILD_TYPE=Debug
49        - ENABLE_SANITIZER=1
50        - EXTRA_FLAGS="-fno-omit-frame-pointer -g -O2 -fsanitize=undefined,address -fuse-ld=gold"
51    - compiler: clang
52      env: COMPILER=clang++ C_COMPILER=clang BUILD_TYPE=Debug
53    - compiler: clang
54      env: COMPILER=clang++ C_COMPILER=clang BUILD_TYPE=Release
55    # Clang w/ libc++
56    - compiler: clang
57      dist: xenial
58      addons:
59        apt:
60          packages:
61            clang-3.8
62      env:
63        - INSTALL_GCC6_FROM_PPA=1
64        - COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=Debug
65        - LIBCXX_BUILD=1
66        - EXTRA_CXX_FLAGS="-stdlib=libc++"
67    - compiler: clang
68      dist: xenial
69      addons:
70        apt:
71          packages:
72            clang-3.8
73      env:
74        - INSTALL_GCC6_FROM_PPA=1
75        - COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=Release
76        - LIBCXX_BUILD=1
77        - EXTRA_CXX_FLAGS="-stdlib=libc++"
78    # Clang w/ 32bit libc++
79    - compiler: clang
80      dist: xenial
81      addons:
82        apt:
83          packages:
84            - clang-3.8
85            - g++-multilib
86            - libc6:i386
87      env:
88        - INSTALL_GCC6_FROM_PPA=1
89        - COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=Debug
90        - LIBCXX_BUILD=1
91        - BUILD_32_BITS=ON
92        - EXTRA_FLAGS="-m32"
93        - EXTRA_CXX_FLAGS="-stdlib=libc++"
94    # Clang w/ 32bit libc++
95    - compiler: clang
96      dist: xenial
97      addons:
98        apt:
99          packages:
100            - clang-3.8
101            - g++-multilib
102            - libc6:i386
103      env:
104        - INSTALL_GCC6_FROM_PPA=1
105        - COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=Release
106        - LIBCXX_BUILD=1
107        - BUILD_32_BITS=ON
108        - EXTRA_FLAGS="-m32"
109        - EXTRA_CXX_FLAGS="-stdlib=libc++"
110    # Clang w/ libc++, ASAN, UBSAN
111    - compiler: clang
112      dist: xenial
113      addons:
114        apt:
115          packages:
116            clang-3.8
117      env:
118        - INSTALL_GCC6_FROM_PPA=1
119        - COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=Debug
120        - LIBCXX_BUILD=1 LIBCXX_SANITIZER="Undefined;Address"
121        - ENABLE_SANITIZER=1
122        - EXTRA_FLAGS="-g -O2 -fno-omit-frame-pointer -fsanitize=undefined,address -fno-sanitize-recover=all"
123        - EXTRA_CXX_FLAGS="-stdlib=libc++"
124        - UBSAN_OPTIONS=print_stacktrace=1
125    # Clang w/ libc++ and MSAN
126    - compiler: clang
127      dist: xenial
128      addons:
129        apt:
130          packages:
131            clang-3.8
132      env:
133        - INSTALL_GCC6_FROM_PPA=1
134        - COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=Debug
135        - LIBCXX_BUILD=1 LIBCXX_SANITIZER=MemoryWithOrigins
136        - ENABLE_SANITIZER=1
137        - EXTRA_FLAGS="-g -O2 -fno-omit-frame-pointer -fsanitize=memory -fsanitize-memory-track-origins"
138        - EXTRA_CXX_FLAGS="-stdlib=libc++"
139    # Clang w/ libc++ and MSAN
140    - compiler: clang
141      dist: xenial
142      addons:
143        apt:
144          packages:
145            clang-3.8
146      env:
147        - INSTALL_GCC6_FROM_PPA=1
148        - COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=RelWithDebInfo
149        - LIBCXX_BUILD=1 LIBCXX_SANITIZER=Thread
150        - ENABLE_SANITIZER=1
151        - EXTRA_FLAGS="-g -O2 -fno-omit-frame-pointer -fsanitize=thread -fno-sanitize-recover=all"
152        - EXTRA_CXX_FLAGS="-stdlib=libc++"
153    - os: osx
154      osx_image: xcode8.3
155      compiler: clang
156      env:
157        - COMPILER=clang++ BUILD_TYPE=Debug
158    - os: osx
159      osx_image: xcode8.3
160      compiler: clang
161      env:
162        - COMPILER=clang++ BUILD_TYPE=Release
163    - os: osx
164      osx_image: xcode8.3
165      compiler: clang
166      env:
167        - COMPILER=clang++
168        - BUILD_TYPE=Release
169        - BUILD_32_BITS=ON
170        - EXTRA_FLAGS="-m32"
171    - os: osx
172      osx_image: xcode8.3
173      compiler: gcc
174      env:
175        - COMPILER=g++-7 C_COMPILER=gcc-7  BUILD_TYPE=Debug
176
177before_script:
178  - if [ -n "${LIBCXX_BUILD}" ]; then
179      source .travis-libcxx-setup.sh;
180    fi
181  - if [ -n "${ENABLE_SANITIZER}" ]; then
182      export EXTRA_OPTIONS="-DBENCHMARK_ENABLE_ASSEMBLY_TESTS=OFF";
183    else
184      export EXTRA_OPTIONS="";
185    fi
186  - mkdir -p build && cd build
187
188before_install:
189  - if [ -z "$BUILD_32_BITS" ]; then
190      export BUILD_32_BITS=OFF && echo disabling 32 bit build;
191    fi
192  - if [ -n "${INSTALL_GCC6_FROM_PPA}" ]; then
193      sudo add-apt-repository -y "ppa:ubuntu-toolchain-r/test";
194      sudo apt-get update --option Acquire::Retries=100 --option Acquire::http::Timeout="60";
195    fi
196
197install:
198  - if [ -n "${INSTALL_GCC6_FROM_PPA}" ]; then
199      travis_wait sudo -E apt-get -yq --no-install-suggests --no-install-recommends install g++-6;
200    fi
201  - if [ "${TRAVIS_OS_NAME}" == "linux" -a "${BUILD_32_BITS}" == "OFF" ]; then
202      travis_wait sudo -E apt-get -y --no-install-suggests --no-install-recommends install llvm-3.9-tools;
203      sudo cp /usr/lib/llvm-3.9/bin/FileCheck /usr/local/bin/;
204    fi
205  - if [ "${BUILD_TYPE}" == "Coverage" -a "${TRAVIS_OS_NAME}" == "linux" ]; then
206      PATH=~/.local/bin:${PATH};
207      pip install --user --upgrade pip;
208      travis_wait pip install --user cpp-coveralls;
209    fi
210  - if [ "${C_COMPILER}" == "gcc-7" -a "${TRAVIS_OS_NAME}" == "osx" ]; then
211      rm -f /usr/local/include/c++;
212      brew update;
213      travis_wait brew install gcc@7;
214    fi
215  - if [ "${TRAVIS_OS_NAME}" == "linux" ]; then
216      sudo apt-get update -qq;
217      sudo apt-get install -qq unzip cmake3;
218      wget https://github.com/bazelbuild/bazel/releases/download/0.10.1/bazel-0.10.1-installer-linux-x86_64.sh --output-document bazel-installer.sh;
219      travis_wait sudo bash bazel-installer.sh;
220    fi
221  - if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
222      curl -L -o bazel-installer.sh https://github.com/bazelbuild/bazel/releases/download/0.10.1/bazel-0.10.1-installer-darwin-x86_64.sh;
223      travis_wait sudo bash bazel-installer.sh;
224    fi
225
226script:
227  - cmake -DCMAKE_C_COMPILER=${C_COMPILER} -DCMAKE_CXX_COMPILER=${COMPILER} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_C_FLAGS="${EXTRA_FLAGS}" -DCMAKE_CXX_FLAGS="${EXTRA_FLAGS} ${EXTRA_CXX_FLAGS}" -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON -DBENCHMARK_BUILD_32_BITS=${BUILD_32_BITS} ${EXTRA_OPTIONS} ..
228  - make
229  - ctest -C ${BUILD_TYPE} --output-on-failure
230  - bazel test -c dbg --define google_benchmark.have_regex=posix --announce_rc --verbose_failures --test_output=errors --keep_going //test/...
231
232after_success:
233  - if [ "${BUILD_TYPE}" == "Coverage" -a "${TRAVIS_OS_NAME}" == "linux" ]; then
234      coveralls --include src --include include --gcov-options '\-lp' --root .. --build-root .;
235    fi
236