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