forked from gnzlbg/static_vector
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.travis.yml
110 lines (94 loc) · 4.54 KB
/
.travis.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Copyright Louis Dionne 2015
# Copyright Gonzalo Brito Gadeschi 2015
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
language: c++
script: cmake
os: linux
matrix:
include:
# debug build
- env: COMPILER=clang++-5.0 BUILD_TYPE=Debug
addons: &clang
apt:
packages: ["clang-5.0", "clang-format-5.0", "g++-6", "valgrind", "python-yaml", "lcov", "util-linux"]
sources: &sources ["ubuntu-toolchain-r-test", "llvm-toolchain-precise"]
# release build + valgrind
- env: COMPILER=clang++-5.0 BUILD_TYPE=Release Valgrind=true
addons: *clang
# Coverage and site generation job
#
# We define it here instead of in matrix.include because otherwise we end up
# with a job without environment variables within the matrix.
env:
global:
- DEPS_DIR=${TRAVIS_BUILD_DIR}/deps
# GitHub token for pushing the documentation, logging in with the
# Travis command line utility and so on. The token is stored in the
# ${GITHUB_TOKEN} environment variable.
- secure: "QKmAzwG8jeQV1GMEqNIZlKy5yB4+L/ecFxDAHa0XYPnD5d+IP3PT+DLyD36THVA9DmGqWLJWlMc27mZghjH/W/dvNtNoQjEr6GOhUTqUjK2dAvjEKd23VNg/qUr7I8i0MNPK4dgOuKXzGDKK/tj7i294T8pAS1BlKmF7dHtZjmvaMg9VoSaXtWwO8JxgfrvMf0ruDV7iRgkhhuCUa/qzwSzShL1wbXbdtNqvmYodc7aBh/wX5COznldGBDCK0TZbjnvL9Bbr+bvrclmrTcuDL55tl0Bdyags1V6tw0NzwUXJACDXnQ9MknqNCbkMlBys+/6tBbqFi5nJJgvRIrkxGm1gFHePrhesEB7yScTj6HjtOOWF8UnV9Y8098o/Q4TaPAJoVaVuNkfpG/rxng5VWCD+W97w6bUr0QJyVjHQcdIe924GguLx28lrJTfDcg4Ej7osu5wmd9iCWdL/hsgTyT6gm4Im05k0o60I8uyJ1zQ1YIZg8xl/tveuTs4/Q4ZVhHdOMPjawXT+cQIdq1BfPzaRq6Uce7BvjRQpBolxyz/GzMG0pRunfk0uHiV6sIPGp66dhlq8Ff/7Vdrg1kpXTJKR6KMFA+IVQiX50XjFoqMdTXxx/NjLGQ4JMsKz6sg4tyS6atCH3niOuZffZewxikR/CJpdU2i+2ksfmF6rr8E="
matrix:
- COMPILER=clang++-5.0 BUILD_TYPE=Debug Coverage=true Site=true
addons: *clang
before_install:
- |
if [ -z "$(ls -A ${TRAVIS_BUILD_DIR}/deps/cmake/bin)" ]; then
CMAKE_URL="https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.tar.gz"
mkdir -p ${TRAVIS_BUILD_DIR}/deps/cmake && travis_retry wget --no-check-certificate --quiet -O - "${CMAKE_URL}" | tar --strip-components=1 -xz -C ${TRAVIS_BUILD_DIR}/deps/cmake
fi
- export PATH="${TRAVIS_BUILD_DIR}/deps/cmake/bin:${PATH}"
# Install libc++ and libc++abi
- |
if [[ "${COMPILER}" =~ clang.+ ]]; then
CXX="clang++-5.0" CC="clang-5.0"
sudo PATH="${PATH}" CXX="$CXX" CC="$CC" ./install_libcxx.sh
fi
# Install docopt
- pip install --user docopt
install:
# Go back to the root of the project.
- cd ${TRAVIS_BUILD_DIR}
# Set the git identity (for pushing the documentation and the benchmarks)
- git config --global user.name "Travis bot"
# Check baseline memory usage; useful to know when OOMs occur
- free
- vmstat
- ps aux --sort=-rss | head -n 10
# Valgrind in Travis VMs does not support anything higher than SSE 4.2
# This disables -march=native which is typically higher and forces SSE 4.2 instead
- sed -i 's/march=native/msse4.2/' cmake/flags.cmake
# Setup the build directory
- mkdir -p build
- cd build
# Export the path to libc++
- CXX_FLAGS="${CXX_FLAGS} -stdlib=libc++ -nostdinc++ -cxx-isystem /usr/include/c++/v1/ -Wno-unused-command-line-argument"
- CXX_LINKER_FLAGS="${CXX_LINKER_FLAGS} -lc++abi"
# Configure the build
- cmake .. -DCMAKE_CXX_COMPILER=${COMPILER} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_CXX_FLAGS="${CXX_FLAGS}" -DCMAKE_EXE_LINKER_FLAGS="${CXX_LINKER_FLAGS}"
- make -j2 VERBOSE=1
script:
# Build the documentation:
- if [[ "${Site}" == "true" ]]; then make doc; fi
# Build and run the unit tests and examples:
- make check -k -j 2
- if [[ "${Valgrind}" == "true" ]]; then ctest -VV -D ExperimentalMemCheck; fi
after_success:
# Update coveralls:
# - download and install lcov, and coveralls-lcov.
# - run lcov to generate coverage report
# - strip test/ and example/ subdirectories from coverage report
# - upload report to coveralls
- |
if [[ "${Coverage}" == "true" ]]; then
gem install coveralls-lcov
lcov --directory ./ --base-directory ./ --capture --output-file coverage.info
lcov --remove coverage.info "/usr*" "*/stack_vector/test/*" "*/stack_vector/example/*" "*/stack_vector/build/*" "*/stack_vector/deps/*" -o coverage.info
coveralls-lcov coverage.info
fi
# Update the documentation
- |
if [[ "${Site}" == "true" && "${TRAVIS_PULL_REQUEST}" == "false" && "${TRAVIS_BRANCH}" == "master" ]]; then
make gh-pages.push &>/dev/null
fi
notifications:
email: false