diff --git a/.travis.yml b/.travis.yml index baa6baaa252da9e8d28b4e6d8884c900a1257267..e1500deada38f501c378c602210459793f15c3d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,27 +1,132 @@ +######## Testing minimal compiler requirements ######## +# GCC 6.4.0 +# Clang 4.0 +# Apple Clang 900.0.39.2 +####################################################### + language: cpp sudo: false -os: linux -dist: trusty -compiler: gcc -addons: - apt: +matrix: + include: +########################## OS X ######################### +## test gcc6 - single node/rank with threading backend ## + - name: "osx, gcc, serial" + os: osx + osx_image: xcode9.2 + env: + - MATRIX_EVAL="brew install gcc@6 && brew link --force --overwrite gcc@6 && CC=gcc-6 && CXX=g++-6" + - BUILD_NAME=cthread WITH_DISTRIBUTED=serial + compiler: gcc-6 + +## test gcc6 - mpi with threading backend ## + - name: "osx, gcc, mpi" + os: osx + osx_image: xcode9.2 + env: + - MATRIX_EVAL="brew install gcc@6 && brew link --force --overwrite gcc@6 && CC=gcc-6 && CXX=g++-6" + - BUILD_NAME=mpi WITH_DISTRIBUTED=mpi + compiler: gcc-6 + +## test clang9 - single node/rank with threading backend ## + - name: "osx, apple clang, serial" + os: osx + osx_image: xcode9.2 + env: + - MATRIX_EVAL="CC=clang && CXX=clang++" + - BUILD_NAME=cthread WITH_DISTRIBUTED=serial + compiler: clang + +## test clang9 - mpi with threading backend ## + - name: "osx, apple clang, mpi" + os: osx + osx_image: xcode9.2 + env: + - MATRIX_EVAL="CC=clang && CXX=clang++" + - BUILD_NAME=mpi WITH_DISTRIBUTED=mpi + compiler: clang + +######################### LINUX ######################### +## test gcc6 - single node/rank with threading backend ## + - name: "linux, gcc, serial" + os: linux + dist: trusty + addons: + apt: sources: - - ubuntu-toolchain-r-test + - ubuntu-toolchain-r-test packages: - - g++-6 - - openmpi-bin - - libopenmpi-dev + - g++-6 + - openmpi-bin + - libopenmpi-dev + env: + - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6" + - BUILD_NAME=cthread WITH_DISTRIBUTED=serial + compiler: gcc-6 -env: - # test single node/rank with threading backend - - BUILD_NAME=cthread WITH_DISTRIBUTED=serial - # test mpi with threading backend - - BUILD_NAME=mpi WITH_DISTRIBUTED=mpi +## test gcc6 - mpi with threading backend ## + - name: "linux, gcc, mpi" + os: linux + dist: trusty + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-6 + - openmpi-bin + - libopenmpi-dev + env: + - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6" + - BUILD_NAME=mpi WITH_DISTRIBUTED=mpi + compiler: gcc-6 + +## test clang4 - single node/rank with threading backend ## + - name: "linux, clang, serial" + os: linux + dist: trusty + addons: + apt: + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-trusty-4.0 + packages: + - clang-4.0 + - g++-6 + - openmpi-bin + - libopenmpi-dev + env: + - MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0" + - BUILD_NAME=cthread WITH_DISTRIBUTED=serial + compiler: clang-4.0 + +## test clang4 - mpi with threading backend ## + - name: "linux, clang, mpi" + os: linux + dist: trusty + addons: + apt: + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-trusty-4.0 + packages: + - clang-4.0 + - g++-6 + - openmpi-bin + - libopenmpi-dev + env: + - MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0" + - BUILD_NAME=mpi WITH_DISTRIBUTED=mpi + compiler: clang-4.0 -before_install: - - CC=gcc-6 - - CXX=g++-6 +before_script: + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export HOMEBREW_NO_AUTO_UPDATE=1; brew cask uninstall --force oclint; fi + - if [[ ( "$TRAVIS_OS_NAME" == "osx" ) && ( "$WITH_DISTRIBUTED" == "mpi" ) ]]; then brew install open-mpi; fi + - eval "${MATRIX_EVAL}" script: source ./scripts/travis/build.sh +notifications: + email: + on_success: never + on_failure: always diff --git a/doc/install.rst b/doc/install.rst index 9bf9915e01b5502345c91556f1ba7663086056f2..9b4206cc40047a1c1da942bfd9bc4cb2f75d6b23 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -44,8 +44,8 @@ We recommend using GCC or Clang, for which Arbor has been tested and optimised. Compiler Min version Notes =========== ============ ============================================ GCC 6.1.0 - Clang 4.0 Clang 3.8 and later probably work. - Apple Clang 9 + Clang 4.0 Needs GCC 6 or later for standard library. + Apple Clang 9 Apple LLVM version 9.0.0 (clang-900.0.39.2) Intel 17.0.1 Needs GCC 5 or later for standard library. =========== ============ ============================================ @@ -56,7 +56,7 @@ We recommend using GCC or Clang, for which Arbor has been tested and optimised. CMake should use. If these are not set, CMake will attempt to automatically choose a compiler, which may be too old to compile Arbor. For example, the default compiler chosen below by CMake was GCC 4.8.5 at ``/usr/bin/c++``, - so the ``CC`` and ``CXX`` variables were used to specify GCC 5.2.0 before calling ``cmake``. + so the ``CC`` and ``CXX`` variables were used to specify GCC 6.1.0 before calling ``cmake``. .. code-block:: bash @@ -66,7 +66,7 @@ We recommend using GCC or Clang, for which Arbor has been tested and optimised. # check which version of GCC is available $ g++ --version - g++ (GCC) 5.2.0 + g++ (GCC) 6.1.0 Copyright (C) 2015 Free Software Foundation, Inc. # set environment variables for compilers @@ -75,10 +75,10 @@ We recommend using GCC or Clang, for which Arbor has been tested and optimised. # launch CMake # the compiler version and path is given in the CMake output $ cmake .. - -- The C compiler identification is GNU 5.2.0 - -- The CXX compiler identification is GNU 5.2.0 - -- Check for working C compiler: /cm/local/apps/gcc/5.2.0/bin/gcc - -- Check for working C compiler: /cm/local/apps/gcc/5.2.0/bin/gcc -- works + -- The C compiler identification is GNU 6.1.0 + -- The CXX compiler identification is GNU 6.1.0 + -- Check for working C compiler: /cm/local/apps/gcc/6.1.0/bin/gcc + -- Check for working C compiler: /cm/local/apps/gcc/6.1.0/bin/gcc -- works ... .. Note:: diff --git a/scripts/travis/build.sh b/scripts/travis/build.sh index 583daec5852bc630377e818f13634228ee70382a..f36eda214845b029ff15d1b45479bb2207a67799 100755 --- a/scripts/travis/build.sh +++ b/scripts/travis/build.sh @@ -13,10 +13,10 @@ build_path=build-${BUILD_NAME} # progress "build environment" -compiler_version=`${CXX} -dumpversion` +compiler_version=`${CXX} --version | grep -m1 ""` cmake_version=`cmake --version | grep version | awk '{print $3}'` -echo "compiler : ${CXX} ${compiler_version}" +echo "compiler : ${compiler_version}" echo "cmake : ${cmake_version}" echo "build path : ${build_path}" echo "base path : ${base_path}" @@ -28,6 +28,14 @@ if [[ "${WITH_DISTRIBUTED}" = "mpi" ]]; then CC="mpicc" CXX="mpicxx" launch="mpiexec -n 4" + # on mac: + # --oversubscribe flag allows more processes on a node than processing elements + # --mca btl tcp,self for Open MPI to use the "tcp" and "self" Byte Transfer Layers for transporting MPI messages + # "self" to deliver messages to the same rank as the sender + # "tcp" sends messages across TCP-based networks (Transmission Control Protocol with Internet Protocol) + if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + launch="${launch} --oversubscribe --mca btl tcp,self" + fi WITH_MPI="ON" else echo "mpi : off"