# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# NOTE(quickstep-team): In Travis-CI, jobs timeout if they take more than 50
# mins or if there is no log output for more than 10 mins. Hence, we use -O0 to
# speed up compilation in release build. Also, jobs can only use upto 20GB of
# disk space. Hence, we minimize the amount of debug symbol using -g0 (DEBUG
# builds were taking > 20GB of space with clang).
# Also, to reduce the total CI time, we explicitly run the most time-consuming
# build first, using gcc in debug build with joinwithbinaryexpressions.

language: cpp

cache: ccache

compiler:
  - gcc
  - clang

env:
  - BUILD_TYPE=Debug VECTOR_COPY_ELISION_LEVEL=joinwithbinaryexpressions
  - BUILD_TYPE=Debug VECTOR_COPY_ELISION_LEVEL=selection
  - BUILD_TYPE=Release VECTOR_COPY_ELISION_LEVEL=joinwithbinaryexpressions
  - BUILD_TYPE=Release VECTOR_COPY_ELISION_LEVEL=selection

matrix:
  exclude:  # Due to time-out.
  - compiler: gcc
    env: BUILD_TYPE=Debug VECTOR_COPY_ELISION_LEVEL=joinwithbinaryexpressions
  - compiler: gcc
    env: BUILD_TYPE=Debug VECTOR_COPY_ELISION_LEVEL=selection

install:
  - export TEST_JOBS=2;
  - if [ "$CC" = "gcc" ]; then
      export CC="gcc-5";
      export CXX="g++-5";
    elif [ "$CC" = "clang" ]; then
      export CC="clang-3.7";
      export CXX="clang++-3.7";
    fi
  - export CLINKER=`which gold`
  - export DEBUG_FLAGS="-g0";
  - export RELEASE_FLAGS="-O0 -DNDEBUG";
  - export LINKER_FLAGS="-s"

before_script:
  - $CC --version
  - $CXX --version
  - $CLINKER --version
  - cmake --version
  - (cd third_party && ./download_and_patch_prerequisites.sh && cd ../)
  - (cd build &&
     cmake -D CMAKE_BUILD_TYPE=$BUILD_TYPE
           -D BUILD_SHARED_LIBS=On
           -D CMAKE_C_FLAGS_DEBUG="$DEBUG_FLAGS"
           -D CMAKE_CXX_FLAGS_DEBUG="$DEBUG_FLAGS"
           -D CMAKE_C_FLAGS_RELEASE="$RELEASE_FLAGS"
           -D CMAKE_CXX_FLAGS_RELEASE="$RELEASE_FLAGS"
           -D CMAKE_EXE_LINKER_FLAGS="$LINKER_FLAGS"
           -D CMAKE_C_COMPILER=$CC
           -D CMAKE_CXX_COMPILER=$CXX
           -D CMAKE_LINKER=$CLINKER
           -D USE_TCMALLOC=0
           -D VECTOR_COPY_ELISION_LEVEL=$VECTOR_COPY_ELISION_LEVEL
           -D ENABLE_COMPARISON_INLINE_EXPANSION=OFF ..)

script:
  - ./lint_everything.py
  - ./validate_cmakelists.py
  - ./cyclic_dependency.py
  - (cd build && make)
  - (cd build && ctest --output-on-failure -E NetworkUtil_unittest -j$TEST_JOBS)

after_failure:
  - df -h
  - free -m
  - dmesg

# Besides pull requests, we want to continuously test pushes/merges to master.
branches:
  only:
    - master

addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
      - llvm-toolchain-precise-3.7
      - george-edison55-precise-backports # For cmake 3.x
    packages:
      - gcc-5
      - g++-5
      - clang-3.7
      - binutils-gold
      - libprotobuf-dev
      - protobuf-compiler
      - libgtest-dev
      - python-networkx
      - libnuma-dev
      - cmake-data
      - cmake

cache:
  apt: true
