summaryrefslogtreecommitdiff
path: root/lib/make/extras
diff options
context:
space:
mode:
authortradke <tradke@17b73243-c579-4c4c-a9d2-2d5706c11dac>2005-01-13 15:41:13 +0000
committertradke <tradke@17b73243-c579-4c4c-a9d2-2d5706c11dac>2005-01-13 15:41:13 +0000
commit3d734161f195ed74d9dd8e6cdfee50008b2e1a0c (patch)
tree90bc74299560aa3877af8fa5334a69d58302b048 /lib/make/extras
parent8221fee1e6f549b66c48f81f61963a6925190d2b (diff)
Automatic detection of MPICH device-specific libs and libdirs for devices
other than globus and myrinet. So 'MPI=MPICH' should now work for arbitrary devices if the MPICH installation comes with a config file $MPICH_DIR/etc/mpichlib.conf. git-svn-id: http://svn.cactuscode.org/flesh/trunk@3958 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'lib/make/extras')
-rw-r--r--lib/make/extras/MPI/MPICH130
1 files changed, 68 insertions, 62 deletions
diff --git a/lib/make/extras/MPI/MPICH b/lib/make/extras/MPI/MPICH
index 68ec6fb1..662449b0 100644
--- a/lib/make/extras/MPI/MPICH
+++ b/lib/make/extras/MPI/MPICH
@@ -6,7 +6,7 @@
# @desc
# Configuration options for MPI=MPICH
# @enddesc
-# @version $Header: /mnt/data2/cvs2svn/cvs-repositories/Cactus/lib/make/extras/MPI/MPICH,v 1.20 2004-12-17 16:29:13 goodale Exp $
+# @version $Header: /mnt/data2/cvs2svn/cvs-repositories/Cactus/lib/make/extras/MPI/MPICH,v 1.21 2005-01-13 15:41:13 tradke Exp $
# @@*/
@@ -16,28 +16,28 @@ echo ' MPICH selected'
# Find the directory.
if test -z "$MPICH_DIR" ; then
- echo ' MPICH selected but no MPICH_DIR set. Checking some places...'
- CCTK_Search MPICH_DIR "/usr /usr/local /usr/local/mpich /usr/local/packages/mpich /usr/local/apps/mpich /usr/lib/mpich /usr/local/lib/mpich $HOME" include/mpi_errno.h
- if test -z "$MPICH_DIR" ; then
- if test -n "$MPICH_ARCH" ; then
- CCTK_Search MPICH_DIR "/usr/local/mpich/$MPICH_ARCH /usr/local/packages/mpich/$MPICH_ARCH /usr/local/apps/mpich/$MPICH_ARCH /usr/lib/mpich/$MPICH_ARCH /usr/local/lib/mpich/$MPICH_ARCH $HOME/$MPICH_ARCH" include/mpi_errno.h
- if test -z "$MPICH_DIR" ; then
- if test -n "$MPICH_DEVICE" ; then
- CCTK_Search MPICH_DIR "/usr/local/mpich/$MPICH_ARCH/$MPICH_DEVICE /usr/local/packages/mpich/$MPICH_ARCH/$MPICH_DEVICE /usr/local/apps/mpich/$MPICH_ARCH/$MPICH_DEVICE /usr/lib/mpich/$MPICH_ARCH/$MPICH_DEVICE /usr/local/lib/mpich/$MPICH_ARCH/$MPICH_DEVICE $HOME/$MPICH_ARCH/$MPICH_DEVICE" include/mpi_errno.h
- if test -z "$MPICH_DIR" ; then
- CCTK_Search MPICH_DIR "/usr/local/mpich/$MPICH_DEVICE /usr/local/packages/mpich/$MPICH_DEVICE /usr/local/apps/mpich/$MPICH_DEVICE /usr/lib/mpich/$MPICH_DEVICE /usr/local/lib/mpich/$MPICH_DEVICE $HOME/$MPICH_DEVICE" include/mpi_errno.h
- fi
- fi
- fi
- else
- CCTK_Search MPICH_DIR "/usr/local/mpich/$MPICH_DEVICE /usr/local/packages/mpich/$MPICH_DEVICE /usr/local/apps/mpich/$MPICH_DEVICE /usr/lib/mpich/$MPICH_DEVICE /usr/local/lib/mpich/$MPICH_DEVICE $HOME/$MPICH_DEVICE" include/mpi_errno.h
-
- fi
- fi
- if test -z "$MPICH_DIR" ; then
- echo ' Unable to locate the MPICH directory - please set MPICH_DIR'
- exit 2
- fi
+ echo ' MPICH selected but no MPICH_DIR set. Checking some places...'
+ CCTK_Search MPICH_DIR "/usr /usr/local /usr/local/mpich /usr/local/packages/mpich /usr/local/apps/mpich /usr/lib/mpich /usr/local/lib/mpich $HOME" include/mpi_errno.h
+ if test -z "$MPICH_DIR" ; then
+ if test -n "$MPICH_ARCH" ; then
+ CCTK_Search MPICH_DIR "/usr/local/mpich/$MPICH_ARCH /usr/local/packages/mpich/$MPICH_ARCH /usr/local/apps/mpich/$MPICH_ARCH /usr/lib/mpich/$MPICH_ARCH /usr/local/lib/mpich/$MPICH_ARCH $HOME/$MPICH_ARCH" include/mpi_errno.h
+ if test -z "$MPICH_DIR" ; then
+ if test -n "$MPICH_DEVICE" ; then
+ CCTK_Search MPICH_DIR "/usr/local/mpich/$MPICH_ARCH/$MPICH_DEVICE /usr/local/packages/mpich/$MPICH_ARCH/$MPICH_DEVICE /usr/local/apps/mpich/$MPICH_ARCH/$MPICH_DEVICE /usr/lib/mpich/$MPICH_ARCH/$MPICH_DEVICE /usr/local/lib/mpich/$MPICH_ARCH/$MPICH_DEVICE $HOME/$MPICH_ARCH/$MPICH_DEVICE" include/mpi_errno.h
+ if test -z "$MPICH_DIR" ; then
+ CCTK_Search MPICH_DIR "/usr/local/mpich/$MPICH_DEVICE /usr/local/packages/mpich/$MPICH_DEVICE /usr/local/apps/mpich/$MPICH_DEVICE /usr/lib/mpich/$MPICH_DEVICE /usr/local/lib/mpich/$MPICH_DEVICE $HOME/$MPICH_DEVICE" include/mpi_errno.h
+ fi
+ fi
+ fi
+ else
+ CCTK_Search MPICH_DIR "/usr/local/mpich/$MPICH_DEVICE /usr/local/packages/mpich/$MPICH_DEVICE /usr/local/apps/mpich/$MPICH_DEVICE /usr/lib/mpich/$MPICH_DEVICE /usr/local/lib/mpich/$MPICH_DEVICE $HOME/$MPICH_DEVICE" include/mpi_errno.h
+
+ fi
+ fi
+ if test -z "$MPICH_DIR" ; then
+ echo ' Unable to locate the MPICH directory - please set MPICH_DIR'
+ exit 2
+ fi
fi
# Find the MPICH architecture
@@ -88,64 +88,70 @@ case "$MPICH_DEVICE" in
# We use the Makefile.mpich to obtain the include and library paths and libs
# for Globus. These are already prefixed by -I, -L, and -l resp. so we have to
# get rid of these. The Cactus makefile will add them later again.
- if test -z "$GLOBUS_LIB_DIR" ; then
- echo ' GLOBUS selected, but GLOBUS_LIB_DIR not set !'
- exit 2
- fi
- GLOBUS_MPICH_MAKEFILE="$GLOBUS_LIB_DIR/../etc/Makefile.mpich"
- if test ! -r "$GLOBUS_MPICH_MAKEFILE" ; then
- echo " No Makefile \"$GLOBUS_MPICH_MAKEFILE\" found !"
- echo ' Did you set GLOBUS_LIB_DIR correctly ?'
- exit 2
- fi
-
- GLOBUS_INC_DIRS=`${MAKE-make} -s -f $GLOBUS_MPICH_MAKEFILE userincdir`
- GLOBUS_INC_DIRS=`echo " $GLOBUS_INC_DIRS" | sed -e 's/ -I/ /g'`
- MPICH_INC_DIRS="$MPICH_INC_DIRS $GLOBUS_INC_DIRS"
-
- GLOBUS_LIB_DIRS=`${MAKE-make} -s -f $GLOBUS_MPICH_MAKEFILE userlibpath`
- MPICH_DEVICE_LIB_DIR=`echo " $GLOBUS_LIB_DIRS" | sed -e 's/ -L/ /g'`
-
- GLOBUS_LIBS=`${MAKE-make} -s -f $GLOBUS_MPICH_MAKEFILE userlib`
- MPICH_DEVICE_LIBS=`echo " $GLOBUS_LIBS" | sed -e 's/ -l/ /g'`
- ;;
-
- ch_gm)
+ if test -z "$GLOBUS_LIB_DIR" ; then
+ echo ' GLOBUS selected, but GLOBUS_LIB_DIR not set !'
+ exit 2
+ fi
+ GLOBUS_MPICH_MAKEFILE="$GLOBUS_LIB_DIR/../etc/Makefile.mpich"
+ if test ! -r "$GLOBUS_MPICH_MAKEFILE" ; then
+ echo " No Makefile \"$GLOBUS_MPICH_MAKEFILE\" found !"
+ echo ' Did you set GLOBUS_LIB_DIR correctly ?'
+ exit 2
+ fi
+
+ GLOBUS_INC_DIRS=`${MAKE-make} -s -f $GLOBUS_MPICH_MAKEFILE userincdir`
+ GLOBUS_INC_DIRS=`echo " $GLOBUS_INC_DIRS" | sed -e 's/ -I/ /g'`
+ MPICH_INC_DIRS="$MPICH_INC_DIRS $GLOBUS_INC_DIRS"
+
+ GLOBUS_LIB_DIRS=`${MAKE-make} -s -f $GLOBUS_MPICH_MAKEFILE userlibpath`
+ MPICH_DEVICE_LIB_DIR=`echo " $GLOBUS_LIB_DIRS" | sed -e 's/ -L/ /g'`
+
+ GLOBUS_LIBS=`${MAKE-make} -s -f $GLOBUS_MPICH_MAKEFILE userlib`
+ MPICH_DEVICE_LIBS=`echo " $GLOBUS_LIBS" | sed -e 's/ -l/ /g'`
+ ;;
+
+ ch_gm)
############################# Myrinet device ##################################
#
- if test -z "$MYRINET_DIR" ; then
+ if test -z "$MYRINET_DIR" ; then
echo ' Myrinet device selected but no MYRINET_DIR set. Checking some places...'
CCTK_Search MYRINET_DIR '/usr /usr/gm /usr/local /usr/local/gm /usr/local/myrinet /usr/local/packages/myrinet /usr/local/apps/myrinet' lib/libgm.a
if test -z "$MYRINET_DIR" ; then
- echo ' Unable to locate the Myrinet directory - please set MYRINET_DIR'
- exit 2
+ echo ' Unable to locate the Myrinet directory - please set MYRINET_DIR'
+ exit 2
fi
- fi
- MPICH_DEVICE_LIB_DIR="$MYRINET_DIR/lib"
- MPICH_DEVICE_LIBS='gm'
- ;;
+ fi
+ MPICH_DEVICE_LIB_DIR="$MYRINET_DIR/lib"
+ MPICH_DEVICE_LIBS='gm'
+ ;;
- *)
+ *)
############################# other devices ##################################
-#
- MPICH_DEVICE_LIB_DIR=''
- MPICH_DEVICE_LIBS=''
- ;;
+ # if an MPICH config file exists, take device libs and libdirs from there
+ # otherwise leave them empty
+ mpichlib_conf_file="$MPICH_DIR/etc/mpichlib.conf"
+ if test -r "$mpichlib_conf_file" ; then
+ base_lib_list=`grep BASE_LIB_LIST $mpichlib_conf_file | perl -ne 's/BASE_LIB_LIST="(.+)"/\1/; print'`
+ MPICH_DEVICE_LIB_DIR=`echo "$base_lib_list" | perl -nae '@libdirs = (); foreach $libdir (@F) { push (@libdirs, $libdir) if ($libdir =~ s/^-L(.+)/\1/) } print "@libdirs"'`
+ MPICH_DEVICE_LIBS=`echo "$base_lib_list" | perl -nae '@libs = (); foreach $lib (@F) { push (@libs, $lib) if ($lib =~ s/^-l(.+)/\1/) } print "@libs"'`
+ else
+ MPICH_DEVICE_LIB_DIR=''
+ MPICH_DEVICE_LIBS=''
+ fi
+ ;;
esac
# Work out what the MPICH library is called
-
if test -r "$MPICH_LIB_DIRS/libmpi.a" ; then
- MPICH_LIB=mpi
+ MPICH_LIB=mpi
else
- MPICH_LIB=mpich
+ MPICH_LIB=mpich
fi
# Set the MPI version name
MPI_VERSION="MPICH_$MPICH_DEVICE"
# Finally set the library lines.
-
MPI_LIBS="$MPICH_LIB $MPICH_DEVICE_LIBS"
MPI_LIB_DIRS="$MPICH_DEVICE_LIB_DIR $MPICH_LIB_DIR"
MPI_INC_DIRS="$MPICH_INC_DIRS"