Cloned SEACAS for EXODUS library with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

428 lines
13 KiB

#! /usr/bin/env bash
if [ "${TRAVIS}" == "true" ]
then
BUILDDIR=${1:-build}
mkdir $BUILDDIR && cd $BUILDDIR
else
EXTRA_ARGS=$@
fi
### The following assumes you are building in a subdirectory of ACCESS Root
### If not, then define "ACCESS" to point to the root of the SEACAS source code.
if [ "$ACCESS" == "" ]
then
ACCESS=$(cd ..; pwd)
fi
### The SEACAS code will install in ${INSTALL_PATH}/bin, ${INSTALL_PATH}/lib, and ${INSTALL_PATH}/include.
INSTALL_PATH=${INSTALL_PATH:-${ACCESS}}
### TPLs could be installed separately from SEACAS. Default to INSTALL_PATH.
TPL_INSTALL=${TPL_INSTALL:-${INSTALL_PATH}}
### Possible subset of what is built ---
APPLICATIONS=${APPLICATIONS:-YES}
LEGACY=${LEGACY:-YES}
FORTRAN=${FORTRAN:-YES}
ZOLTAN=${ZOLTAN:-YES}
### Python Version...
PYTHON_VER=${PYTHON_VER:-"3.0"}
### Set to YES for parallel compile; otherwise NO for serial (default)
netcdf_parallel=$($NETCDF_ROOT/bin/nc-config --has-parallel)
if [ "${netcdf_parallel}" == "yes" ]
then
MPI=YES
else
MPI=NO
fi
echo "MPI set to ${MPI}"
if [ "${MPI}" == "NO" ]
then
### Change this to point to the compilers you want to use
## Travis build (and others) set this to EXTERNAL to set
## CXX, CC, and FC externally.
COMPILER=${COMPILER:-gnu}
if [ "$COMPILER" == "gnu" ]
then
CXX=g++
CC=gcc
FC=gfortran
CFLAGS="-Wall -Wunused -pedantic"
CXXFLAGS="-Wall -Wunused -pedantic"
fi
if [ "$COMPILER" == "clang" ]
then
CXX=clang++
CC=clang
FC=gfortran-mp-7
CFLAGS="-Wall -Wunused -pedantic"
CXXFLAGS="-Wall -Wunused -pedantic"
fi
if [ "$COMPILER" == "intel" ]
then
CXX=icpc
CC=icc
FC=ifort
CFLAGS="-Wall -Wunused"
CXXFLAGS="-Wall -Wunused"
fi
if [ "$COMPILER" == "ibm" ]
then
CXX=xlC
CC=xlc
FC=xlf
fi
fi
if [ "${APPLICATIONS}" == "YES" ] && [ "${LEGACY}" == "YES" ]
then
SUBSET_OPTIONS="-DSeacas_ENABLE_ALL_PACKAGES:BOOL=ON \
-DSeacas_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=ON \
-DSeacas_ENABLE_SECONDARY_TESTED_CODE:BOOL=ON"
else
SUBSET_OPTIONS="-DSeacas_ENABLE_ALL_PACKAGES:BOOL=OFF \
-DSeacas_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=OFF \
-DSeacas_ENABLE_SECONDARY_TESTED_CODE:BOOL=OFF \
-DSeacas_ENABLE_SEACASIoss:BOOL=ON \
-DSeacas_ENABLE_SEACASExodus:BOOL=ON \
-DSeacas_ENABLE_SEACASExodus_for:BOOL=ON \
-DSeacas_ENABLE_SEACASExoIIv2for32:BOOL=ON"
if [ "${APPLICATIONS}" == "YES" ]
then
SUBSET_OPTIONS="${SUBSET_OPTIONS} \
-DSeacas_ENABLE_SEACASAprepro:BOOL=ON \
-DSeacas_ENABLE_SEACASAprepro_lib:BOOL=ON \
-DSeacas_ENABLE_SEACASConjoin:BOOL=ON \
-DSeacas_ENABLE_SEACASEjoin:BOOL=ON \
-DSeacas_ENABLE_SEACASEpu:BOOL=ON \
-DSeacas_ENABLE_SEACASExo2mat:BOOL=ON \
-DSeacas_ENABLE_SEACASExo_format:BOOL=ON \
-DSeacas_ENABLE_SEACASExodiff:BOOL=ON \
-DSeacas_ENABLE_SEACASMat2exo:BOOL=ON \
-DSeacas_ENABLE_SEACASNemslice:BOOL=ON \
-DSeacas_ENABLE_SEACASNemspread:BOOL=ON"
if [ "${FORTRAN}" == "YES" ]
then
SUBSET_OPTIONS="${SUBSET_OPTIONS} \
-DSeacas_ENABLE_SEACASExplore:BOOL=ON \
-DSeacas_ENABLE_SEACASGrepos:BOOL=ON"
fi
elif [ "${LEGACY}" == "YES" ] && [ "${FORTRAN}" == "YES" ]
then
SUBSET_OPTIONS="${SUBSET_OPTIONS} \
-DSeacas_ENABLE_SEACASAlgebra:BOOL=ON \
-DSeacas_ENABLE_SEACASBlot:BOOL=ON \
-DSeacas_ENABLE_SEACASEx1ex2v2:BOOL=ON \
-DSeacas_ENABLE_SEACASEx2ex1v2:BOOL=ON \
-DSeacas_ENABLE_SEACASExomatlab:BOOL=ON \
-DSeacas_ENABLE_SEACASExotec2:BOOL=ON \
-DSeacas_ENABLE_SEACASExotxt:BOOL=ON \
-DSeacas_ENABLE_SEACASFastq:BOOL=ON \
-DSeacas_ENABLE_SEACASGen3D:BOOL=ON \
-DSeacas_ENABLE_SEACASGenshell:BOOL=ON \
-DSeacas_ENABLE_SEACASGjoin:BOOL=ON \
-DSeacas_ENABLE_SEACASMapvar:BOOL=ON \
-DSeacas_ENABLE_SEACASMapvar-kd:BOOL=ON \
-DSeacas_ENABLE_SEACASNemesis:BOOL=ON \
-DSeacas_ENABLE_SEACASTxtexo:BOOL=ON"
fi
fi
GENERATOR=${GENERATOR:-"Unix Makefiles"}
# If using an XLF compiler on an IBM system, may need to add the following:
# -DCMAKE_Fortran_FLAGS="-qfixed=72" \
# -DCMAKE_EXE_LINKER_FLAGS:STRING="-lxl -lxlopt"
SHARED="${SHARED:-YES}"
### Switch for Debug or Release build:
### Check that both `DEBUG` and `BUILD_TYPE` are not set
if [ ! -z ${DEBUG+x} ] && [ ! -z ${BUILD_TYPE+x} ]
then
echo "ERROR: Both DEBUG and BUILD_TYPE are set. Only one is allowed."
exit
fi
BUILD_TYPE="${BUILD_TYPE:-RELEASE}"
if [ ! -z ${DEBUG+x} ]
then
if [ "${DEBUG}" == "YES" ]
then
BUILD_TYPE="DEBUG"
elif [ "${DEBUG}" == "NO" ]
then
BUILD_TYPE="RELEASE"
else
echo "ERROR: Invalid value for DEBUG ('$DEBUG'). Must be 'YES' or 'NO'."
exit
fi
fi
### If you do not have the X11 developer package on your system
### which provides X11/Xlib.h and the libX11, then change the "YES"
### below to "NO". It will disable blot and fastq
HAVE_X11=${X11:-YES}
### Set to YES to enable the building of a thread-safe version of the Exodus and IOSS libraries.
THREADSAFE=${THREADSAFE:-NO}
if [ "$THREADSAFE" == "YES" ] ; then
THREAD_SAFE_OPT="-DSeacas_EXTRA_LINK_FLAGS=-lpthread"
fi
if [ "${FAODEL_INSTALL}" == "" ]; then
# FAODEL_INSTALL isn't set. Try to derive it from Faodel_DIR.
if [ -e ${Faodel_DIR}/Faodel/FaodelConfig.cmake ]; then
# Faodel_DIR points to the cmake directory, so trim it.
FAODEL_INSTALL=${Faodel_DIR}/../..
elif [ -e ${Faodel_DIR}/lib/cmake/Faodel/FaodelConfig.cmake ]; then
# Faodel_DIR points to the install root, so just use it.
FAODEL_INSTALL=${Faodel_DIR}
fi
fi
### TPLs --
### Make sure these point to the locations to find the libraries and includes in lib and include
### subdirectories of the specified paths.
### For example, netcdf.h should be in ${NETCDF_PATH}/include
NETCDF_PATH=${NETCDF_ROOT:-${TPL_INSTALL}}
PNETCDF_PATH=${PNETCDF_ROOT:-${TPL_INSTALL}}
MATIO_PATH=${MATIO_ROOT:-${TPL_INSTALL}}
HDF5_PATH=${HDF5_ROOT:-${TPL_INSTALL}}
CGNS_PATH=${CGNS_ROOT:-${TPL_INSTALL}}
CEREAL_PATH=${CEREAL_ROOT:-${TPL_INSTALL}}
FAODEL_PATH=${FAODEL_ROOT:-${FAODEL_INSTALL}}
ADIOS2_PATH=${ADIOS2_ROOT:-${TPL_INSTALL}}
GTEST_PATH=${GTEST_ROOT:-${TPL_INSTALL}}
KOKKOS_PATH=${KOKKOS_ROOT:-${TPL_INSTALL}}
function check_enable()
{
local path=$1
if [ -e "${path}" ]
then
echo "YES"
else
echo "NO"
fi
}
HAVE_NETCDF=$(check_enable "${NETCDF_PATH}/include/netcdf.h")
HAVE_MATIO=$(check_enable "${MATIO_PATH}/include/matio.h")
HAVE_CGNS=$(check_enable "${CGNS_PATH}/include/cgnslib.h")
HAVE_CEREAL=$(check_enable "${CEREAL_PATH}/include/cereal/cereal.hpp")
HAVE_FAODEL=$(check_enable "${FAODEL_PATH}/lib/cmake/Faodel/FaodelConfig.cmake")
HAVE_ADIOS2=$(check_enable "${ADIOS2_PATH}/include/adios2.h")
HAVE_GTEST=$(check_enable "${GTEST_PATH}/include/gtest/gtest.h")
HAVE_KOKKOS=$(check_enable "${KOKKOS_PATH}/include/Kokkos_Core.hpp")
### DataWarp (Burst Buffer)
### I use the following for mutrino (10/16/2018):
### module load datawarp
### -D TPL_ENABLE_DataWarp:BOOL=ON \
### -D DataWarp_LIBRARY_DIRS:PATH=/opt/cray/datawarp/2.1.16-6.0.5.1_2.61__g238b34d.ari/lib \
### -D DataWarp_INCLUDE_DIRS:PATH=/opt/cray/datawarp/2.1.16-6.0.5.1_2.61__g238b34d.ari/include \
### Define to NO to *enable* exodus deprecated functions
OMIT_DEPRECATED_CODE="NO"
# BUG needs to work with cray too.
if [ "${MPI}" == "YES" ] && [ "${CRAY}" == "YES" ]
then
MPI_EXEC=$(which srun)
MPI_SYMBOLS="-D MPI_EXEC=${MPI_EXEC} -D MPI_EXEC_NUMPROCS_FLAG=-n"
CXX=CC
CC=cc
FC=ftn
MPI_BIN=$(dirname $(which ${CC}))
SHARED=NO
unset CRAYPE_LINK_TYPE
elif [ "${MPI}" == "YES" ]
then
if [ "${USE_SRUN}" == "YES" ]
then
MPI_EXEC=$(which srun)
MPI_SYMBOLS="-D MPI_EXEC=${MPI_EXEC} -D MPI_EXEC_NUMPROCS_FLAG=-N"
MPI_BIN=$(dirname "${MPI_EXEC}")
else
MPI_EXEC=$(which mpiexec)
MPI_SYMBOLS="-D MPI_EXEC=${MPI_EXEC}"
MPI_BIN=$(dirname "${MPI_EXEC}")
fi
CXX=mpicxx
CC=mpicc
FC=mpif77
fi
OS=$(uname -s)
if [ "$SHARED" == "YES" ]
then
if [ "$OS" == "Darwin" ] ; then
LD_EXT="dylib"
else
LD_EXT="so"
fi
else
LD_EXT="a"
fi
if [ "${HAVE_KOKKOS}" == "YES" ]
then
KOKKOS_SYMBOLS="-DKOKKOS_SRC_PATH:PATH=${INSTALL_PATH}/TPL/kokkos/kokkos \
-DTPL_Kokkos_LIBRARY_DIRS:PATH=${KOKKOS_PATH}/lib \
-DTPL_Kokkos_INCLUDE_DIRS:PATH=${KOKKOS_PATH}/include \
-DTPL_Kokkos_LIBRARIES=${KOKKOS_PATH}/lib/libkokkos.${LD_EXT}"
fi
if [ "$HAVE_CEREAL" == "YES" ]
then
CEREAL_SYMBOLS=" -D TPL_ENABLE_Cereal:BOOL=${HAVE_CEREAL} \
-D Cereal_INCLUDE_DIRS:PATH=${CEREAL_PATH}/include \
"
fi
if [ "$HAVE_FAODEL" == "YES" ]
then
export Faodel_DIR
FAODEL_SYMBOLS=" -D TPL_ENABLE_Faodel:BOOL=${HAVE_FAODEL} \
-D Faodel_ROOT:PATH=${FAODEL_PATH} \
"
fi
#-D TRIBITS_TPL_FIND_INCLUDE_DIRS_AND_LIBRARIES_VERBOSE=TRUE \
#-D Faodel_FORCE_PRE_FIND_PACKAGE:BOOL=TRUE \
# -D Faodel_INCLUDE_DIRS:PATH=${FAODEL_PATH}/include/faodel \
# -D Faodel_LIBRARY_DIRS:PATH=${FAODEL_PATH}/lib
if [ "$OS" == "Darwin" ] ; then
DARWIN_OPT="-D CMAKE_MACOSX_RPATH:BOOL=ON -D TPL_X11_INCLUDE_DIRS:PATH=/opt/X11/include"
else
DARWIN_OPT=""
fi
# Only run doxygen if me and on master branch...
DOXYGEN=NO
if [[ "$OS" == "Darwin" && "$MPI" == "NO" ]] ; then
branch=$(git branch |grep \* |cut -c3-)
USER=$(id -nu)
if [ "$USER" == "gdsjaar" ] && [ "$branch" == "master" ]; then
DOXYGEN=YES
fi
fi
FC=${FC:-gfortran}
rm -f CMakeCache.txt
###------------------------------------------------------------------------
cmake -G "${GENERATOR}" \
-D CMAKE_CXX_COMPILER:FILEPATH=${CXX} \
-D CMAKE_C_COMPILER:FILEPATH=${CC} \
-D CMAKE_Fortran_COMPILER:FILEPATH=${FC} \
-D CMAKE_CXX_FLAGS=${CXXFLAGS} ${SANITIZER} \
-D CMAKE_C_FLAGS=${CFLAGS} ${SANITIZER} \
-D CMAKE_INSTALL_RPATH:PATH=${INSTALL_PATH}/lib \
-D BUILD_SHARED_LIBS:BOOL=${SHARED} \
-D CMAKE_BUILD_TYPE=${BUILD_TYPE} \
${SUBSET_OPTIONS} \
-D Seacas_ENABLE_Zoltan:BOOL=${ZOLTAN} \
-D Seacas_ENABLE_TESTS=ON \
-D CMAKE_INSTALL_PREFIX:PATH=${INSTALL_PATH} \
-D Seacas_SKIP_FORTRANCINTERFACE_VERIFY_TEST:BOOL=ON \
-D Seacas_HIDE_DEPRECATED_CODE:BOOL=${OMIT_DEPRECATED_CODE} \
-D Seacas_ENABLE_DOXYGEN:BOOL=${DOXYGEN} \
-D Seacas_ENABLE_Fortran=${FORTRAN} \
\
-D TPL_ENABLE_Netcdf:BOOL=${HAVE_NETCDF} \
-D TPL_ENABLE_Matio:BOOL=${HAVE_MATIO} \
-D TPL_ENABLE_CGNS:BOOL=${HAVE_CGNS} \
-D TPL_ENABLE_ADIOS2:BOOL=${HAVE_ADIOS2} \
-D TPL_ENABLE_gtest:BOOL=${HAVE_GTEST} \
-D TPL_ENABLE_Kokkos:BOOL=${HAVE_KOKKOS} \
-D TPL_ENABLE_MPI:BOOL=${MPI} \
-D TPL_ENABLE_Pamgen:BOOL=OFF \
-D TPL_ENABLE_Pthread:BOOL=${THREADSAFE} \
${THREAD_SAFE_OPT} \
-D TPL_ENABLE_X11:BOOL=${HAVE_X11} \
\
-D SEACASExodus_ENABLE_THREADSAFE:BOOL=${THREADSAFE} \
-D SEACASIoss_ENABLE_THREADSAFE:BOOL=${THREADSAFE} \
\
${KOKKOS_SYMBOLS} \
${MPI_SYMBOLS} \
${DARWIN_OPT} \
${CEREAL_SYMBOLS} \
${FAODEL_SYMBOLS} \
\
-D MPI_BIN_DIR:PATH=${MPI_BIN} \
-D NetCDF_ROOT:PATH=${NETCDF_PATH} \
-D HDF5_ROOT:PATH=${HDF5_PATH} \
-D HDF5_NO_SYSTEM_PATHS=ON \
-D CGNS_ROOT:PATH=${CGNS_PATH} \
-D Matio_ROOT:PATH=${MATIO_PATH} \
-D PNetCDF_ROOT:PATH=${PNETCDF_PATH} \
-D PythonInterp_FIND_VERSION:STRING=${PYTHON_VER} \
\
$EXTRA_ARGS \
${ACCESS}
if [[ "$HAVE_FAODEL" == "YES" && "$HAVE_CEREAL" == "NO" ]] ; then
echo "========================================================="
echo "WARNING: Faodel is enabled, but Cereal is not."
echo "WARNING: The Faodel components will fail to compile"
echo "WARNING: unless Cereal is found implicitly."
echo "========================================================="
fi
echo ""
echo " OS: ${OS}"
echo " ACCESS: ${ACCESS}"
echo " TPL_INSTALL: ${TPL_INSTALL}"
echo "INSTALL_PATH: ${INSTALL_PATH}"
echo " "
echo " CC: ${CC}"
echo " CXX: ${CXX}"
echo " FC: ${FC}"
echo " MPI: ${MPI}"
echo " SHARED: ${SHARED}"
echo " BUILD_TYPE: ${BUILD_TYPE}"
echo " THREADSAFE: ${THREADSAFE}"
echo " PYTHON_VER: ${PYTHON_VER}"
echo " "
echo " NETCDF: ${HAVE_NETCDF}"
echo " MATIO: ${HAVE_MATIO}"
echo " CGNS: ${HAVE_CGNS}"
echo " KOKKOS: ${HAVE_KOKKOS}"
echo " ZOLTAN: ${ZOLTAN}"
echo " ADIOS2: ${HAVE_ADIOS2}"
echo " CEREAL: ${HAVE_CEREAL}"
echo "CEREAL_PATH: ${CEREAL_PATH}"
echo " FAODEL: ${HAVE_FAODEL}"
echo "FAODEL_PATH: ${FAODEL_PATH}"
echo " Faodel_DIR: ${Faodel_DIR}"
echo " GTEST: ${HAVE_GTEST}"
echo " DOXYGEN: ${DOXYGEN}"
echo ""
if [ "${TRAVIS}" == "true" ]
then
make -j2
cd ${ACCESS}
fi