#!/bin/bash AMDIS_VERSION="1.1" BUILD_DIR=$( pwd ) SRC_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) # default parameters INSTALL_PREFIX="/usr/local" DEBUG="0" VERBOSE="OFF" ENABLE_EXTENSIONS="OFF" ENABLE_UMFPACK="OFF" ENABLE_COMPRESSION="OFF" ENABLE_PARALLEL="OFF" BOOST_PREFIX="${BOOST_ROOT}" DOWNLOAD_BOOST="0" BOOST_VERSION="1.64.0" PETSC_PREFIX="${PETSC_DIR}" DOWNLOAD_PETSC="0" PETSC_VERSION="3.5.4" PARMETIS_PREFIX="" ZOLTAN_PREFIX="" DOWNLOAD_ZOLTAN="0" ZOLTAN_VERSION="3.83" # a help message help() { cat << EOF $(basename "$0") configures AMDiS, by calling the corresponding cmake commands. Usage: $(basename "$0") [OPTION]... [VAR=VALUE]... Defaults for the options are specified in brackets. Configuration: -h, --help Display this help and exit. -V, --version Display version information of AMDiS and exit. Installation directories: --prefix=PREFIX Install files in PREFIX [${INSTALL_PREFIX}] By default, 'make install' will install all the files in '${INSTALL_PREFIX}/lib', '${INSTALL_PREFIX}/include' and '${INSTALL_PREFIX}/share'. You can specify an installation prefix other than '${INSTALL_PREFIX}' using '--prefix', for instance '--prefix=${HOME}/amdis'. Compile parameters: --debug Compile without optimization and with debug information. -v, --verbose Show additional information during the compile process. Optional Features: --enable-extensions Compile and install sources from the extensions folder. --enable-compression Compile with support for output compression. This requires boost-iostreams with enabled ZLib and libbz2 support. --enable-parallel Compile the parallel version of AMDiS. Needs PETSc and Parmetis. (see --with-petsc-dir, --with-parmetis-dir) Optional Packages: --with-umfpack Adds support for the direct solver UMFPACK. --with-suitesparse (see --with-umfpack) --with-boost-dir=DIR Sets the boost root directory. [${BOOST_PREFIX}] --download-boost Download and install boost, version ${BOOST_VERSION}, to '${SRC_DIR}/packages/boost/${BOOST_VERSION}/'. --with-petsc-dir=DIR Sets the PETSc root directory, i.e. a directory containing the folders 'lib/', 'include/' with e.g. 'lib/libpetsc.so' [${PETSC_DIR}]. --download-petsc Download and install petsc, version ${PETSC_VERSION}, to '${SRC_DIR}/packages/petsc/${PETSC_VERSION}/'. --with-parmetis-dir=DIR Sets the PARMETIS root directory, i.e. a directory containing the folders 'lib/', 'include/' with e.g. 'include/parmetis.h' [=PETSC_DIR]. --with-zoltan Add support for the Parallel Partitioning suite Zoltan. --with-zoltan-dir=DIR Sets the Zoltan root directory, i.e. a directory containing the folders 'lib/', 'include/' with e.g. 'include/zoltan_cpp.h' [${ZOLTAN_PREFIX}]. --download-zoltan Download and install Zoltan, version ${ZOLTAN_VERSION}, to '${SRC_DIR}/packages/zoltan'. Report bugs to . EOF } # parse command line if [ $# -gt 0 ]; then while [[ $1 = -* ]]; do case "$1" in -h|-\?|--help) help exit ;; -V|--version) echo "AMDiS v${AMDIS_VERSION}" exit ;; --prefix) INSTALL_PREFIX="$2" shift 2 ;; --prefix=?*) INSTALL_PREFIX="${1#*=}" shift ;; --prefix=) printf 'ERROR: "--prefix" requires a non-empty option argument.\n' >&2 exit 1 ;; --debug) DEBUG="1" shift ;; -v|--verbose) VERBOSE="ON" shift ;; --enable-extensions) ENABLE_EXTENSIONS="ON" shift ;; --enable-compression) ENABLE_COMPRESSION="ON" shift ;; --enable-parallel) ENABLE_PARALLEL="ON" shift ;; --with-umfpack|--with-suitesparse) ENABLE_UMFPACK="ON" shift ;; --with-boost-dir) BOOST_PREFIX="$2" shift 2 ;; --with-boost-dir=?*) BOOST_PREFIX="${1#*=}" shift ;; --with-boost-dir=) printf 'ERROR: "--with-boost-dir" requires a non-empty option argument.\n' >&2 exit 1 ;; --download-boost) DOWNLOAD_BOOST="1" shift ;; --with-petsc-dir) PETSC_PREFIX="$2" shift 2 ;; --with-petsc-dir=?*) PETSC_PREFIX="${1#*=}" shift ;; --with-petsc-dir=) printf 'ERROR: "--with-petsc-dir" requires a non-empty option argument.\n' >&2 exit 1 ;; --download-petsc) DOWNLOAD_PETSC="1" shift ;; --with-parmetis-dir) PARMETIS_PREFIX="$2" shift 2 ;; --with-parmetis-dir=?*) PARMETIS_PREFIX="${1#*=}" shift ;; --with-parmetis-dir=) printf 'ERROR: "--with-parmetis-dir" requires a non-empty option argument.\n' >&2 exit 1 ;; --with-zoltan) ENABLE_ZOLTAN="ON" shift ;; --with-zoltan-dir) ZOLTAN_PREFIX="$2" shift 2 ;; --with-zoltan-dir=?*) ZOLTAN_PREFIX="${1#*=}" shift ;; --with-zoltan-dir=) printf 'ERROR: "--with-zoltan-dir" requires a non-empty option argument.\n' >&2 exit 1 ;; --download-zoltan) DOWNLOAD_ZOLTAN="1" shift ;; --) shift break ;; -?*) printf 'WARNING: Unknown option (ignored): %s\n' "$1" >&2 shift ;; *) break esac done fi # Download and install boost if [ "${DOWNLOAD_BOOST}" -eq "1" ]; then BOOST_FILENAME="boost_${BOOST_VERSION//[.]/_}.tar.gz" if [ ! -d /tmp/src/boost ]; then mkdir -p /tmp/src/boost curl -SL "http://netcologne.dl.sourceforge.net/project/boost/boost/${BOOST_VERSION}/${BOOST_FILENAME}" \ | tar --strip-components=1 -xzC /tmp/src/boost fi BOOST_PREFIX=${SRC_DIR}/packages/boost/${BOOST_VERSION} cd /tmp/src/boost ./bootstrap.sh --prefix=${BOOST_PREFIX} --with-libraries=system,iostreams,filesystem,program_options,date_time,test,thread if [ "${ENABLE_COMPRESSION}" = "ON" ]; then ./b2 -s cxxflags="-std=c++14" --build-type=minimal variant=release install else ./b2 -s NO_BZIP2=1 -s NO_ZLIB=1 cxxflags="-std=c++14" --build-type=minimal variant=release install fi rm -rf /tmp/src/boost fi # Download and install PETSc if [ "${DOWNLOAD_PETSC}" -eq "1" ]; then if [ ! -d /tmp/src/petsc ]; then mkdir -p /tmp/src/petsc curl -SL "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-lite-${PETSC_VERSION}.tar.gz" \ | tar --strip-components=1 -xzC /tmp/src/petsc fi PETSC_PREFIX=${SRC_DIR}/packages/petsc/${PETSC_VERSION} if [ -n "${PARMETIS_PREFIX}" ]; then PARMETIS_CONFIG="--with-parmetis-dir=${PARMETIS_PREFIX}" else PARMETIS_CONFIG="--download-parmetis=1" fi # Install PETSc cd /tmp/src/petsc ./configure --prefix=${PETSC_PREFIX} --with-pic=1 \ --with-debugging=${DEBUG} --with-clanguage=c++ \ --with-metis=1 --download-metis=yes \ --with-parmetis=1 ${PARMETIS_CONFIG} \ --with-scalapack=1 --download-scalapack=yes \ --with-hypre=1 --download-hypre=yes \ --with-mumps=1 --download-mumps=yes \ --with-fblaslapack=1 --download-fblaslapack=yes make && make install rm -rf /tmp/src/petsc fi # set parmetis dir, if not already set if [ -z "${PARMETIS_PREFIX}" ]; then PARMETIS_PREFIX="${PETSC_PREFIX}" fi if [ "${DEBUG}" -eq "0" ]; then BUILD_TYPE="Release" CXX_FLAGS="-O3" else BUILD_TYPE="Debug" CXX_FLAGS="-g" fi # Download and install Zoltan if [ "${DOWNLOAD_ZOLTAN}" -eq "1" ]; then if [ ! -d /tmp/src/zoltan ]; then mkdir -p /tmp/src/zoltan curl -SL "http://www.cs.sandia.gov/~kddevin/Zoltan_Distributions/zoltan_distrib_v${ZOLTAN_VERSION}.tar.gz" \ | tar --strip-components=1 -xzC /tmp/src/zoltan fi ZOLTAN_PREFIX=${SRC_DIR}/packages/zoltan # Install Zoltan cd /tmp/src/zoltan mkdir build && cd build ../configure --prefix=${ZOLTAN_PREFIX} --enable-mpi \ --enable-zoltan-cppdriver \ --with-cxxflags="-std=c++11 -fpic" \ --with-cflags="-fpic" --with-fcflags="-fpic" \ --with-parmetis=yes --with-parmetis-libdir=${PARMETIS_PREFIX}/lib \ --with-parmetis-incdir=${PARMETIS_PREFIX}/include make && make install rm -rf /tmp/src/zoltan fi if [ -n "${BOOST_PREFIX}" ]; then BOOST_CONFIG="-DBOOST_ROOT:PATH=${BOOST_PREFIX}" else BOOST_CONFIG="" fi # Install AMDiS cd ${BUILD_DIR} if [ "${ENABLE_PARALLEL}" = "OFF" ]; then cmake -DENABLE_UMFPACK:BOOL=${ENABLE_UMFPACK} \ -DCMAKE_BUILD_TYPE:String=${BUILD_TYPE} \ -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PREFIX} \ -DCMAKE_CXX_FLAGS:STRING="${CXX_FLAGS}" \ -DCMAKE_VERBOSE_MAKEFILE:BOOL=${VERBOSE} \ -DENABLE_EXTENSIONS:BOOL=${ENABLE_EXTENSIONS} \ -DENABLE_COMPRESSION:BOOL=${ENABLE_COMPRESSION} ${BOOST_CONFIG} \ ${SRC_DIR}/AMDiS/ else cmake -DCMAKE_CXX_COMPILER=mpic++ \ -DCMAKE_C_COMPILER=mpicc \ -DCMAKE_BUILD_TYPE:String=${BUILD_TYPE} \ -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PREFIX} \ -DCMAKE_CXX_FLAGS:STRING="${CXX_FLAGS}" \ -DENABLE_EXTENSIONS:BOOL=${ENABLE_EXTENSIONS} \ -DENABLE_COMPRESSION:BOOL=${ENABLE_COMPRESSION} \ -DENABLE_UMFPACK:BOOL=${ENABLE_UMFPACK} \ -DCMAKE_VERBOSE_MAKEFILE:BOOL=${VERBOSE} \ -DENABLE_PARALLEL_DOMAIN:BOOL=ON \ -DPETSC_DIR:PATH=${PETSC_PREFIX} \ -DENABLE_ZOLTAN:BOOL=${ENABLE_ZOLTAN} \ -DZOLTAN_DIR:PATH=${ZOLTAN_PREFIX} \ -DPARMETIS_DIR:PATH=${PARMETIS_PREFIX} ${BOOST_CONFIG} \ ${SRC_DIR}/AMDiS/ fi if [ "$?" -eq "0" ]; then echo "Compile and install the code with... make && make install" fi