aboutsummaryrefslogtreecommitdiffstats
path: root/.travis.yml
blob: 5c69187d2fc62c769607970273f77964aaca8121 (plain)
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# Based on https://github.com/ldionne/hana/blob/master/.travis.yml

language: cpp
sudo: false

cache:
  directories:
    - ${TRAVIS_BUILD_DIR}/deps/cmake
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.5.2/install
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.6.2/install
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.7.1/install
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.8.1/install
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.9.0/install

matrix:
  include:
    - env: BUILD_TYPE=Debug
      os: osx
      osx_image: xcode8
      compiler: clang
    - env: BUILD_TYPE=Release
      os: osx
      osx_image: xcode8
      compiler: clang
    - env: CLANG_VERSION=3.6 BUILD_TYPE=Debug
      os: linux
      addons: &clang36
        apt:
          packages:
            - clang-3.6
            - g++-5
          sources: &sources
            - ubuntu-toolchain-r-test
            - llvm-toolchain-precise-3.6
    - env: CLANG_VERSION=3.6 BUILD_TYPE=Release
      os: linux
      addons: *clang36
    - env: CLANG_VERSION=3.7 BUILD_TYPE=Debug
      os: linux
      addons: &clang37
        apt:
          packages:
            - clang-3.7
            - g++-5
          sources: &sources
            - ubuntu-toolchain-r-test
            - llvm-toolchain-precise-3.7
    - env: CLANG_VERSION=3.7 BUILD_TYPE=Release
      os: linux
      addons: *clang37
    - env: CLANG_VERSION=3.8 BUILD_TYPE=Debug
      os: linux
      addons: &clang38
        apt:
          packages:
            - clang-3.8
            - g++-5
          sources: &sources
            - ubuntu-toolchain-r-test
            - llvm-toolchain-precise-3.8
    - env: CLANG_VERSION=3.8 BUILD_TYPE=Release
      os: linux
      addons: *clang38
    - env: GCC_VERSION=5 BUILD_TYPE=Debug
      os: linux
      addons: &gcc5
        apt:
          packages: g++-5
          sources: *sources
    - env: GCC_VERSION=5 BUILD_TYPE=Release
      os: linux
      addons: *gcc5
    - env: GCC_VERSION=6 BUILD_TYPE=Debug
      os: linux
      addons: &gcc6
        apt:
          packages: g++-6
          sources: *sources
    - env: GCC_VERSION=6 BUILD_TYPE=Release
      os: linux
      addons: *gcc6

install:
  - if [[ -n "$CLANG_VERSION" ]]; then export CXX=clang++-$CLANG_VERSION CC=clang-$CLANG_VERSION; fi
  - if [[ -n "$GCC_VERSION" ]]; then export CXX=g++-$GCC_VERSION CC=gcc-$GCC_VERSION; fi
  - JOBS=2
  - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
  - mkdir -p "${DEPS_DIR}" && cd "${DEPS_DIR}"

  ############################################################################
  # Install a recent CMake (unless already installed on OS X)
  ############################################################################
  - |
    if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
      if [[ -z "$(ls -A ${DEPS_DIR}/cmake/bin)" ]]; then
        CMAKE_URL="https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.tar.gz"
        mkdir -p cmake && travis_retry wget --no-check-certificate --quiet -O - "${CMAKE_URL}" | tar --strip-components=1 -xz -C cmake
      fi
      export PATH="${DEPS_DIR}/cmake/bin:${PATH}"
    else
      if ! brew ls --version cmake &>/dev/null; then brew install cmake; fi
    fi

  ############################################################################
  # [linux]: Install the right version of libc++
  ############################################################################
  - |
    if [[ -n "$CLANG_VERSION" && "${TRAVIS_OS_NAME}" == "linux" && "${STDLIB}" != "libstdc++" ]]; then
      if [[ "$CLANG_VERSION" == "3.5" ]]; then LLVM_VERSION="3.5.2"; fi
      if [[ "$CLANG_VERSION" == "3.6" ]]; then LLVM_VERSION="3.6.2"; fi
      if [[ "$CLANG_VERSION" == "3.7" ]]; then LLVM_VERSION="3.7.1"; fi
      if [[ "$CLANG_VERSION" == "3.8" ]]; then LLVM_VERSION="3.8.1"; fi
      if [[ "$CLANG_VERSION" == "3.9" ]]; then LLVM_VERSION="3.9.0"; fi
      LLVM_ROOT="${DEPS_DIR}/llvm-${LLVM_VERSION}"
      LLVM_URL="http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz"
      LIBCXX_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxx-${LLVM_VERSION}.src.tar.xz"
      LIBCXXABI_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxxabi-${LLVM_VERSION}.src.tar.xz"
      if [[ -z "$(ls -A ${LLVM_ROOT}/install/include)" ]]; then
        mkdir -p "${LLVM_ROOT}" "${LLVM_ROOT}/build" "${LLVM_ROOT}/projects/libcxx" "${LLVM_ROOT}/projects/libcxxabi"
        travis_retry wget --quiet -O - "${LLVM_URL}" | tar --strip-components=1 -xJ -C "${LLVM_ROOT}"
        travis_retry wget --quiet -O - "${LIBCXX_URL}" | tar --strip-components=1 -xJ -C "${LLVM_ROOT}/projects/libcxx"
        travis_retry wget --quiet -O - "${LIBCXXABI_URL}" | tar --strip-components=1 -xJ -C "${LLVM_ROOT}/projects/libcxxabi"
        (cd "${LLVM_ROOT}/build" && cmake .. -DCMAKE_CXX_COMPILER="$CXX" -DCMAKE_C_COMPILER="$CC" -DCMAKE_INSTALL_PREFIX="${LLVM_ROOT}/install" -DCMAKE_BUILD_TYPE=$BUILD_TYPE)
        (cd "${LLVM_ROOT}/build/projects/libcxx" && make install -j$JOBS)
        (cd "${LLVM_ROOT}/build/projects/libcxxabi" && make install -j$JOBS)
      fi
      export CXXFLAGS="-I ${LLVM_ROOT}/install/include/c++/v1"
      export LDFLAGS="-L ${LLVM_ROOT}/install/lib -lc++ -lc++abi"
      export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${LLVM_ROOT}/install/lib"
    fi

before_script:
  - cd "${TRAVIS_BUILD_DIR}"
  - cmake . -Bbuild -DCMAKE_CXX_COMPILER="$CXX" -DCMAKE_C_COMPILER="$CC" -DCMAKE_BUILD_TYPE=$BUILD_TYPE
  - cmake --build build -- -j$JOBS

script:
  - cd build
  - ctest --output-on-failure -j$JOBS

notifications:
  email: false