configure.sh 9.82 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/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"
18
BOOST_VERSION="1.64.0"
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
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
59
                         Parmetis. (see --with-petsc-dir, --with-parmetis-dir)
60 61 62 63

Optional Packages:
  --with-umfpack         Adds support for the direct solver UMFPACK.
  --with-suitesparse     (see --with-umfpack)
64

65
  --with-boost-dir=DIR   Sets the boost root directory. [${BOOST_PREFIX}]
66 67
  --download-boost       Download and install boost, version ${BOOST_VERSION},
                         to '${SRC_DIR}/packages/boost/${BOOST_VERSION}/'.
68 69 70 71 72

  --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},
73
                         to '${SRC_DIR}/packages/petsc/${PETSC_VERSION}/'.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
  --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 <amdis.fem@gmail.com>.
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
199
  ./bootstrap.sh --prefix=${BOOST_PREFIX} --with-libraries=system,iostreams,filesystem,program_options,date_time,test,thread
200
  if [ "${ENABLE_COMPRESSION}" = "ON" ]; then
201
    ./b2 -s cxxflags="-std=c++14" --build-type=minimal variant=release install
202
  else
203
    ./b2 -s NO_BZIP2=1 -s NO_ZLIB=1 cxxflags="-std=c++14" --build-type=minimal variant=release install
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
  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" \
260
      | tar --strip-components=1 -xzC /tmp/src/zoltan
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287
  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
288
  cmake -DENABLE_UMFPACK:BOOL=${ENABLE_UMFPACK} \
289 290 291 292 293 294 295 296
        -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
297
  cmake -DCMAKE_CXX_COMPILER=mpic++ \
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317
        -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