#!/bin/sh # installation script for Open MPI # # Christoph Niethammer (C) 2011 # # exit on any error! set -e # directory containing the source tar files SRC_POOL="$HOME/src" # basic installation directory PREFIX_BASE=${PREFIX_BASE:=$HOME/bin} # compiler to use # (gnu|intel|pgi) COMPILER=${COMPILER:=gnu} # use specific compiler version COMPILER_VERSION=${COMPILER_VERSION:=} # package to build CATEGORY="mpi" PACKAGE="mvapich2" VERSION="1.6rc3" # add a descriptor at the end of the installation path e.g. for special config options etc. PACKAGE_DESCRIPTOR=${PACKAGE_DESCRIPTOR:+-$PACKAGE_DESCRIPTOR} # Archive A and package name P # archive can be tar.bz2 or tar.gz file A=${PACKAGE}-${VERSION}.tgz P=${PACKAGE}-${VERSION} # If you want to use the CC, CXX, FC or F77 variables for the compilers put the following # below the compiler loading section! # Other interesting configure options: #--with-file-system=lustre #--enable-sharedlibs=gcc \ CONFIGURE_OPTS="\ " MAKEOPTS="-j1" # Compiler specifications if [ "x${COMPILER_VERSION}" != "x" ] then COMPILER_MODULE=compiler/${COMPILER}/${COMPILER_VERSION} else COMPILER_MODULE=compiler/${COMPILER} fi echo "Loading compiler module ${COMPILER_MODULE}" module load ${COMPILER_MODULE} case ${COMPILER} in gnu) COMPILER_OPTS="CC=gcc CXX=g++ FC=gfortran F77=gfortran" if [ "x${COMPILER_VERSION}" == "x" ] then COMPILER_VERSION=$(gcc -dumpversion) fi ;; intel) COMPILER_OPTS="CC=icc CXX=icpc FC=ifort F77=ifort" if [ "x${COMPILER_VERSION}" == "x" ] then COMPILER_VERSION=$(icc -dumpversion) fi ;; pgi) COMPILER_OPTS="CC=pgcc CXX=pgCC FC=pgf95 F77=pgf77" if [ "x${COMPILER_VERSION}" == "x" ] then COMPILER_VERSION=$(pgcc -V | awk '/pgcc/{print $2}') fi ;; *) echo "Unknown compiler ${COMPILER}." ;; esac # make the compiler variables CC, CXX, FC and F77 available export ${COMPILER_OPTS} # construct the final installation directory path PREFIX="${PREFIX_BASE}/${CATEGORY}/${PACKAGE}/${VERSION}-${COMPILER}-${COMPILER_VERSION}${PACKAGE_DESCRIPTOR}" # basepath for the working directory ORIGDIR="${HOME}/work" # final working directory path WORKDIR=${ORIGDIR}/${CATEGORY}/${PACKAGE}/${VERSION}-${COMPILER}-${COMPILER_VERSION}${PACKAGE_DESCRIPTOR} # path to the source code directory SRCDIR=${WORKDIR}/${P} # build directory (should be different from source directory): BUILDDIR=${SRCDIR}/build echo "Using workir $WORKDIR" echo "Building with PREFIX=$PREFIX" umask 0002 if [ -d ${WORKDIR} ] then rm -rf ${WORKDIR} fi echo "Creating working dir ${WORKDIR}" mkdir -p ${WORKDIR} cd ${WORKDIR} echo "Extracting sources" case "${A##*.}" in bz2) tar xfjv ${SRC_POOL}/${A} ;; gz|tgz) tar xfzv ${SRC_POOL}/${A} ;; *) echo "Archive format not recogized" exit ;; esac mkdir ${BUILDDIR} cd ${BUILDDIR} echo "Running configure" ${SRCDIR}/configure --prefix=${PREFIX} ${CONFIGURE_OPTS} ${COMPILER_OPTS} 2>&1 | tee configure.log echo "Running make" make ${MAKEOPTS} 2>&1 | tee make.log module unload compiler cat <&1 | tee make_install.log bzip2 *.log mv *.log.bz2 ${PREFIX}/ cd ${PREFIX} chmod -R g+rwX . chmod -R o+rX . # Finally do not forget to provide a module file! ############################################################################## EOF exit 0