#!/bin/sh # installation script for Papi # # Christoph Niethammer 2011 # Rainer Keller 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} # compiler to use # (gnu|intel|pgi) COMPILER=${COMPILER:=gnu} # use specific compiler version COMPILER_VERSION=${COMPILER_VERSION:=} # package to build CATEGORY="performance" PACKAGE="papi" VERSION="4.2.0" # 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} # echo "Loading perctr module" # module load system/perfctr # # Figure out Root directory of perfctr # TMP1=`which perfex` # TMP2=`dirname $TMP1` # PERFCTR_PREFIX=`dirname $TMP2` # If you want to use the CC, CXX, FC or F77 variables for the compilers put the following # below the compiler loading section! # # YES, I tried with 4.2.0 to use CUDA-4.0 and CUPTI -- compilation & installation worked, but papi_avail # delivered a SEGFAULT -- gdb showed that: # Program received signal SIGSEGV, Segmentation fault. # 0x0000000000000000 in ?? () # (gdb) where #0 0x0000000000000000 in ?? () #1 0x000000000040d18e in _papi_hwi_native_name_to_code (in=0x18fabff0 "UNHALTED_CORE_CYCLES", out=Unhandled dwarf expression opcode 0x9c) at extras.c:613 #2 0x0000000000414901 in _papi_libpfm_setup_presets (pmu_name=, pmu_type=) at papi_libpfm_presets.c:491 #3 0x0000000000000000 in ?? () # CONFIGURE_OPTS="--with-perfctr-prefix=$PERFCTR_PREFIX --with-CPU=i7" CONFIGURE_OPTS="--with-CPU=i7" # ATTENTION: Do NOT compile with -j2 -- it will stopp in src/util with a dependence on ../libpapi.a MAKEOPTS="" # 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}" PREFIX="${PREFIX_BASE}/${CATEGORY}/${PACKAGE}/${VERSION}" # basepath for the working directory ORIGDIR="${HOME}/WORK/PAPI" # final working directory path WORKDIR=${ORIGDIR}/${CATEGORY}/${PACKAGE}/${VERSION} # path to the source code directory SRCDIR=${WORKDIR}/${P} SUBDIR=src # build directory (should be different from source directory): BUILDDIR=${SRCDIR}/${SUBDIR} echo "Using workir $WORKDIR" echo "Building with PREFIX=$PREFIX" umask 0002 if [ -d ${WORKDIR} ] then # rm -rf ${WORKDIR} echo rm -rf ${WORKDIR} fi echo "Creating working dir ${WORKDIR}" mkdir -p ${WORKDIR} cd ${WORKDIR} echo "Extracting sources" case "${A##*.}" in bz2) tar -xjf ${SRC_POOL}/${A} ;; gz|tgz) tar -xzf ${SRC_POOL}/${A} ;; *) echo "Archive format not recogized" exit ;; esac echo "Running configure in ${BUILDDIR}" cd ${BUILDDIR} ./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