summaryrefslogtreecommitdiff
path: root/lib/make/extras/MPI/MPICH
blob: a08b23e0c2fe3602a3881f82ed0ea9556deb8407 (plain)
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
#! /bin/sh
# /*@@
#   @file      CUSTOM
#   @date      Wed Jul 21 13:27:07 1999
#   @author    Tom Goodale
#   @desc 
#   
#   @enddesc
#   @version $Header: /mnt/data2/cvs2svn/cvs-repositories/Cactus/lib/make/extras/MPI/MPICH,v 1.10 2000-06-27 17:08:26 tradke Exp $
# @@*/


echo "MPICH selected"

# MPICH is pretty configerable itself

# 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" include/mpe.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" include/mpe.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" include/mpe.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" include/mpe.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" include/mpe.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

if test -z "$MPICH_ARCH" ; then 
  if test -x "$MPICH_DIR/bin/tarch" ; then
    MPICH_ARCH=`$MPICH_DIR/bin/tarch`
    echo "MPICH architecture is $MPICH_ARCH"
  else
    echo "Cannot execute $MPICH_DIR/bin/tarch"
    exit 2
  fi
fi

# Find the MPICH device - this isn't necessary for mpich-1.2.0

if test -d "$MPICH_DIR/build/$MPICH_ARCH" ; then
  if test -z "$MPICH_DEVICE" ; then
     echo "MPICH selected but no MPICH_DEVICE set... Checking for one"
     CCTK_Search MPICH_DEVICE "ch_p4 ch_shmem globus ch_gm" lib $MPICH_DIR/build/$MPICH_ARCH/$MPICH_DEVICE
      if test -z "$MPICH_DEVICE" ; then
         echo "Unable to determine the MPICH device - please set MPICH_DEVICE"
         exit 2
     fi
  fi
fi

# Work out MPICH version

if test -d "$MPICH_DIR/build/$MPICH_ARCH" ; then
  MPICH_LIB_DIR="$MPICH_DIR/build/$MPICH_ARCH/$MPICH_DEVICE/lib"
  MPICH_INC_DIRS="$MPICH_DIR/include $MPICH_DIR/build/$MPICH_ARCH/$MPICH_DEVICE/include"
else
  MPICH_LIB_DIR="$MPICH_DIR/lib"
  MPICH_INC_DIRS="$MPICH_DIR/include"
fi

# Select the device and any special options for it.

case "$MPICH_DEVICE" in

  globus)
############################# Globus device ##################################
# We use the Makefile.mpich to obtain the library paths and libs for Globus.
# These are already prefixed by -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
   if ! test -r "$GLOBUS_LIB_DIR/../etc/Makefile.mpich" ; then
     echo "No Makefile.mpich found in \$GLOBUS_LIB_DIR/../etc/ !"
     echo "Did you set GLOBUS_LIB_DIR correctly ?"
     exit 2
   fi

   GLOBUS_LIB_DIRS=`${MAKE-make} -s -f $GLOBUS_LIB_DIR/../etc/Makefile.mpich userlibpath`
   MPICH_DEVICE_LIB_DIR=`echo " $GLOBUS_LIB_DIRS" | sed -e 's/ -L/ /g'`

   GLOBUS_LIBS=`${MAKE-make} -s -f $GLOBUS_LIB_DIR/../etc/Makefile.mpich userlib`
   MPICH_DEVICE_LIBS=`echo " $GLOBUS_LIBS" | sed -e 's/ -l/ /g'`
   ;;

 ch_gm)
############################# Myrinet device ##################################
#
   if test -z "$MYRINET_DIR" ; then
      echo "Myrinet device selected but no MYRINET_DIR set... Checking some places"
      CCTK_Search MYRINET_DIR "/usr /usr/local /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
      fi
   fi
   MPICH_DEVICE_LIB_DIR="$MYRINET_DIR/lib"
   MPICH_DEVICE_LIBS="gm"
   ;;

 *)
############################# other devices ##################################
#
   MPICH_DEVICE_LIB_DIR=""
   MPICH_DEVICE_LIBS=""
   ;;
esac

# Work out what the MPICH library is called

if test -r "$MPICH_LIB_DIRS/libmpi.a" ; then
   MPICH_LIB=mpi
else
   MPICH_LIB=mpich
fi

# 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"