#!/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:=} # mpi library to use # (openmpi) MPI=${MPI:=openmpi} # package to build CATEGORY="performance" PACKAGE="extrae" VERSION="2.1.1" # 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}.tar.gz 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! # Compiler specifications if [ "x${COMPILER_VERSION}" != "x" ] then COMPILER_MODULE=compiler/${COMPILER}/${COMPILER_VERSION} else COMPILER_MODULE=compiler/${COMPILER} fi if [ "x${MPI}" != "x" ] then if [ "x${MPI_VERSION}" != "x" ] then MPI_MODULE=mpi/${MPI}/${MPI_VERSION}-${COMPILER}-${COMPILER_VERSION} else echo "Error: If MPI is specified MPI_VERSION must be given, too." exit 1 fi fi echo "Loading compiler module ${COMPILER_MODULE}" module load ${COMPILER_MODULE} echo "Loading mpi module ${MPI_MODULE}" module load ${MPI_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} MPI_DIR=$(dirname $(dirname $(which mpicc))) # use papi module load system/perfctr system/papi PAPI_DIR=$(dirname $(dirname $(which papi_avail))) # Other interesting configure options: CONFIGURE_OPTS="\ --with-mpi=$MPI_DIR \ --with-papi=$PAPI_DIR \ --enable-sampling \ " MAKEOPTS="-j8" # construct the final installation directory path PREFIX="${PREFIX_BASE}/${CATEGORY}/${PACKAGE}/${VERSION}-${MPI}-${MPI_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 # extrae 2.1.1 has problems when building in a seperate build directory so we use srcdir BUILDDIR=${SRCDIR} 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 -p ${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