configure.sh 9.75 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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
199
200
201
202
203
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
260
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
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
#!/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.62.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, --with-parmetis)

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 to '${SRC_DIR}/packages/boost'.

  --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'.
  --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
  ./bootstrap.sh --prefix=${BOOST_PREFIX} --with-libraries=system,iostreams,filesystem,program_options,date_time
  if [ "${ENABLE_COMPRESSION}" = "ON" ]; then
    ./b2 -s cxxflags="-std=c++11" --build-type=minimal install
  else
    ./b2 -s NO_BZIP2=1 -s NO_ZLIB=1 cxxflags="-std=c++11" --build-type=minimal 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 -xC /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 -DUSE_NEW_CMAKE:BOOL=ON \
        -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 -DUSE_NEW_CMAKE:BOOL=ON \
        -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