diff --git a/.circleci/config.yml b/.circleci/config.yml index a8aaab29d04a460f4eb1d553e3d3bf62ed99f45b..d579b60e5f03523d27121f590250d5d3f491b744 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,16 +1,17 @@ defaults: &defaults - working_directory: /home/adios2/hidecirclesource + working_directory: /home/adios2 steps: - - checkout + - checkout: + path: /home/adios2/source - run: name: Configure - command: bash --login $CIRCLE_WORKING_DIRECTORY/scripts/circle/runOnCircle.sh configure + command: bash --login source/scripts/circle/runOnCircle.sh configure - run: name: Build - command: bash --login $CIRCLE_WORKING_DIRECTORY/scripts/circle/runOnCircle.sh build + command: bash --login source/scripts/circle/runOnCircle.sh build - run: name: Test - command: bash --login $CIRCLE_WORKING_DIRECTORY/scripts/circle/runOnCircle.sh test + command: bash --login source/scripts/circle/runOnCircle.sh test version: 2 diff --git a/.gitignore b/.gitignore index 04e38af8eabeb74636565371d2f097b1143b8827..e8f3faf4a79b32344df3ad93783d6da29a36cd74 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ *.bp.dir build/ +# Mac OSX finder-related files +.DS_Store diff --git a/scripts/circle/.dockerignore b/scripts/circle/.dockerignore index 4293e59caf3af13a832da57c3db1dfc76ca7e8fe..5e89737d45787bd093c1ac4c6d3d3034825ed06f 100644 --- a/scripts/circle/.dockerignore +++ b/scripts/circle/.dockerignore @@ -1,3 +1,3 @@ runOnCircle.sh postComment.sh - +*.cmake diff --git a/scripts/circle/Dockerfile b/scripts/circle/Dockerfile index a9387bc7c2017a034bf08a79e69fa78731000cb6..8d391cc385ac98e0779796ccbb52e6e7d3f0d99b 100644 --- a/scripts/circle/Dockerfile +++ b/scripts/circle/Dockerfile @@ -1,36 +1,79 @@ -FROM centos:centos7.3.1611 - -RUN yum -y update && \ - yum -y install \ - bzip2-devel.x86_64 \ - curl \ - git \ - gcc \ - gcc-c++ \ - gcc-gfortran \ - gmake \ - hdf5-devel.x86_64 \ - numpy.x86_64 \ - python-devel.x86_64 \ - https://github.com/openhpc/ohpc/releases/download/v1.3.GA/ohpc-release-1.3-1.el7.x86_64.rpm - -RUN yum -y update && \ - yum -y install \ - ohpc-base \ - openmpi-gnu7-ohpc \ - phdf5-gnu7-openmpi-ohpc \ - netcdf-gnu7-openmpi-ohpc +FROM centos:centos7 -WORKDIR /home/adios2 +# Install extra repos +RUN yum -y install epel-release https://github.com/openhpc/ohpc/releases/download/v1.3.GA/ohpc-release-1.3-1.el7.x86_64.rpm + +# Install core dev packages +RUN yum -y install \ + curl file \ + gcc gcc-c++ gcc-gfortran \ + git make autoconf automake libtool\ + bzip2-devel zeromq-devel hdf5-devel \ + python-devel numpy + +# Install gcc7 OpenHPC packages +RUN yum -y install \ + lmod-ohpc gnu7-compilers-ohpc openmpi-gnu7-ohpc phdf5-gnu7-openmpi-ohpc \ + python-numpy-gnu7-ohpc + +# Cleanup headers and packages +RUN yum clean all + +# Install the CMake binary +WORKDIR /opt/cmake/3.6.0 +RUN curl -L https://cmake.org/files/v3.6/cmake-3.6.0-Linux-x86_64.tar.gz | \ + tar --strip-components=1 -xzv + +# ZFP +WORKDIR /opt/zfp +RUN mkdir build install && \ + git clone https://github.com/LLNL/zfp.git src && \ + cd build && \ + /opt/cmake/3.6.0/bin/cmake \ + -DCMAKE_INSTALL_PREFIX=/opt/zfp/install \ + ../src && \ + make -j8 install && \ + cd ../ && \ + rm -rf build src + +# ADIOS1 + +# Source setup +WORKDIR /opt/adios1/1.12.0 +RUN mkdir source && \ + curl -L https://github.com/ornladios/ADIOS/archive/v1.12.0.tar.gz | \ + tar -C source --strip-components=1 -xzv && \ + cd source && ./autogen.sh + +# GCC 4.8 +RUN cd source && \ + CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC" FCFLAGS="-O2 -fPIC" \ + ./configure --prefix=/opt/adios1/1.12.0/gnu48 --without-mpi && \ + make -j8 install && \ + make distclean + +# GCC 7 +RUN cd source && \ + . /etc/profile && \ + module load gnu7 openmpi phdf5 && \ + CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC" FCFLAGS="-O2 -fPIC" \ + ./configure --prefix=/opt/adios1/1.12.0/gnu7_openmpi && \ + make -j8 install + +# Cleanup +RUN rm -rf /opt/adios1/1.12.0/source -RUN curl -O https://cmake.org/files/v3.6/cmake-3.6.0-Linux-x86_64.tar.gz && \ - mkdir -p /opt/cmake && \ - cd /opt/cmake && \ - tar -zxvf /home/adios2/cmake-3.6.0-Linux-x86_64.tar.gz && \ - rm -rf /home/adios2/cmake-3.6.0-Linux-x86_64.tar.gz && \ - ln -s /opt/cmake/cmake-3.6.0-Linux-x86_64/bin/cmake /usr/local/bin/cmake && \ - ln -s /opt/cmake/cmake-3.6.0-Linux-x86_64/bin/cpack /usr/local/bin/cpack && \ - ln -s /opt/cmake/cmake-3.6.0-Linux-x86_64/bin/ctest /usr/local/bin/ctest && \ - mkdir -p /home/adios2/hidecirclesource +# Create a non-root user to run the builds/tests +RUN export uid=1001 gid=1001 && \ + mkdir -p /home/adios2 && \ + echo "adios2:x:${uid}:${gid}:adios2,,,:/home/adios2:/bin/bash" >> /etc/passwd && \ + echo "adios2:x:${uid}:" >> /etc/group && \ + mkdir -p /etc/sudoers.d && \ + echo "adios2 ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/adios2 && \ + chmod 0440 /etc/sudoers.d/adios2 && \ + chown ${uid}:${gid} -R /home/adios2 +USER adios2 +ENV HOME /home/adios2 WORKDIR /home/adios2 +CMD /bin/bash diff --git a/scripts/circle/circle_el7-gcc48.cmake b/scripts/circle/circle_el7-gcc48.cmake index ed0fa8dd6ebb586ada7eaed7bb7185289f9d99f7..fe5696c9d4f020badf9e54cd7f5413eac51687a0 100644 --- a/scripts/circle/circle_el7-gcc48.cmake +++ b/scripts/circle/circle_el7-gcc48.cmake @@ -9,7 +9,7 @@ set(CTEST_TEST_ARGS PARALLEL_LEVEL 4) set(dashboard_model Experimental) set(dashboard_binary_name "build-$ENV{CIRCLE_JOB}") -set(CTEST_SOURCE_DIRECTORY "$ENV{CIRCLE_WORKING_DIRECTORY}") +set(CTEST_SOURCE_DIRECTORY "$ENV{CIRCLE_WORKING_DIRECTORY}/source") set(CTEST_DASHBOARD_ROOT "$ENV{HOME}") include(${CMAKE_CURRENT_LIST_DIR}/EnvironmentModules.cmake) @@ -29,6 +29,8 @@ ADIOS2_USE_MPI:STRING=OFF ADIOS2_USE_Python:STRING=ON ADIOS2_USE_ZFP:STRING=ON ADIOS2_USE_ZeroMQ:STRING=ON +ZFP_ROOT_DIR:PATH=/opt/zfp/install +ADIOS1_ROOT:PATH=/opt/adios1/1.12.0/gnu48 ") include(${CMAKE_CURRENT_LIST_DIR}/../dashboard/adios_common.cmake) diff --git a/scripts/circle/circle_el7-gcc7-openmpi.cmake b/scripts/circle/circle_el7-gcc7-openmpi.cmake index 4171fb10343db80e417c04ba932dcd7742b84baf..e1378a3b0e0aade482e4bb959fc2c7c393574771 100644 --- a/scripts/circle/circle_el7-gcc7-openmpi.cmake +++ b/scripts/circle/circle_el7-gcc7-openmpi.cmake @@ -9,7 +9,7 @@ set(CTEST_TEST_ARGS PARALLEL_LEVEL 4) set(dashboard_model Experimental) set(dashboard_binary_name "build_$ENV{CIRCLE_JOB}") -set(CTEST_SOURCE_DIRECTORY "$ENV{CIRCLE_WORKING_DIRECTORY}") +set(CTEST_SOURCE_DIRECTORY "$ENV{CIRCLE_WORKING_DIRECTORY}/source") set(CTEST_DASHBOARD_ROOT "$ENV{HOME}") include(${CMAKE_CURRENT_LIST_DIR}/EnvironmentModules.cmake) @@ -17,7 +17,7 @@ module(purge) module(load gnu7) module(load openmpi) module(load phdf5) -module(load netcdf) +module(load python) set(ENV{CC} gcc) set(ENV{CXX} g++) @@ -30,9 +30,11 @@ ADIOS2_USE_DataMan:STRING=ON ADIOS2_USE_Fortran:STRING=ON ADIOS2_USE_HDF5:STRING=ON ADIOS2_USE_MPI:STRING=ON -ADIOS2_USE_Python:STRING=ON +ADIOS2_USE_Python:STRING=OFF ADIOS2_USE_ZFP:STRING=ON ADIOS2_USE_ZeroMQ:STRING=ON +ZFP_ROOT_DIR:PATH=/opt/zfp/install +ADIOS1_ROOT:PATH=/opt/adios1/1.12.0/gnu7_openmpi ") include(${CMAKE_CURRENT_LIST_DIR}/../dashboard/adios_common.cmake) diff --git a/scripts/circle/runOnCircle.sh b/scripts/circle/runOnCircle.sh index 9e4e321fff0ea3716303e19940d3aa20dd8adfca..75eab7ae295af42026cbc4ab2e0cf40434c645ea 100755 --- a/scripts/circle/runOnCircle.sh +++ b/scripts/circle/runOnCircle.sh @@ -12,7 +12,8 @@ check_var CIRCLE_WORKING_DIRECTORY check_var CIRCLE_BRANCH check_var CIRCLE_JOB -CTEST_SCRIPT="${CIRCLE_WORKING_DIRECTORY}/scripts/circle/circle_${CIRCLE_JOB}.cmake" +SOURCE_DIR=${CIRCLE_WORKING_DIRECTORY}/source +CTEST_SCRIPT="${SOURCE_DIR}/scripts/circle/circle_${CIRCLE_JOB}.cmake" if [ ! -f "${CTEST_SCRIPT}" ] then @@ -30,4 +31,4 @@ case "$1" in ;; esac -ctest -VV -S ${CTEST_SCRIPT} -Ddashboard_full=OFF -Ddashboard_do_${STEP}=TRUE +/opt/cmake/3.6.0/bin/ctest -VV -S ${CTEST_SCRIPT} -Ddashboard_full=OFF -Ddashboard_do_${STEP}=TRUE diff --git a/scripts/dashboard/common.cmake b/scripts/dashboard/common.cmake index 08f91ada37449a0960b6e234c84feec86e2c5876..ba68c7ef7bc68bf56e369427261c9f5f3ccdc4c8 100644 --- a/scripts/dashboard/common.cmake +++ b/scripts/dashboard/common.cmake @@ -393,7 +393,12 @@ if(dashboard_do_test) dashboard_hook_test() endif() message("Calling ctest_test") - ctest_test(${CTEST_TEST_ARGS}) + ctest_test(${CTEST_TEST_ARGS} RETURN_VALUE TEST_RESULTS) + if(${TEST_RESULTS} EQUAL 0) + message("ctest test results return value: ${TEST_RESULTS}") + else() + message(SEND_ERROR "Some tests failed") + endif() ctest_submit(PARTS Test) endif()