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 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373
|
dnl
dnl/*D
dnl PAC_LIB_MPI - Check for MPI library
dnl
dnl Synopsis:
dnl PAC_LIB_MPI([action if found],[action if not found])
dnl
dnl Output Effect:
dnl
dnl Notes:
dnl Currently, only checks for lib mpi and mpi.h. Later, we will add
dnl MPI_Pcontrol prototype (const int or not?).
dnl
dnl Prerequisites:
dnl autoconf version 2.13 (for AC_SEARCH_LIBS)
dnl D*/
dnl Other tests to add:
dnl Version of MPI
dnl MPI-2 I/O?
dnl MPI-2 Spawn?
dnl MPI-2 RMA?
dnl PAC_LIB_MPI([found text],[not found text])
AC_DEFUN([PAC_LIB_MPI],[
dnl Set the prereq to 2.50 to avoid having
AC_PREREQ(2.50)
if test "X$pac_lib_mpi_is_building" != "Xyes" ; then
# Use CC if TESTCC is defined
if test "X$pac_save_level" != "X" ; then
pac_save_TESTCC="${TESTCC}"
pac_save_TESTCPP="${TESTCPP}"
CC="$pac_save_CC"
if test "X$pac_save_CPP" != "X" ; then
CPP="$pac_save_CPP"
fi
fi
# Look for MPILIB first if it is defined
AC_SEARCH_LIBS(MPI_Init,$MPILIB mpi mpich mpich2)
if test "$ac_cv_search_MPI_Init" = "no" ; then
ifelse($2,,
AC_MSG_ERROR([Could not find MPI library]),[$2])
fi
AC_CHECK_HEADER(mpi.h,pac_have_mpi_h="yes",pac_have_mpi_h="no")
if test $pac_have_mpi_h = "no" ; then
ifelse($2,,
AC_MSG_ERROR([Could not find mpi.h include file]),[$2])
fi
if test "X$pac_save_level" != "X" ; then
CC="$pac_save_TESTCC"
CPP="$pac_save_TESTCPP"
fi
fi
ifelse($1,,,[$1])
])
dnl This should also set MPIRUN.
dnl
dnl/*D
dnl PAC_ARG_MPI_TYPES - Add command-line switches for different MPI
dnl environments
dnl
dnl Synopsis:
dnl PAC_ARG_MPI_TYPES([default])
dnl
dnl Output Effects:
dnl Adds the following command line options to configure
dnl+ \-\-with\-mpich[=path] - MPICH. 'path' is the location of MPICH commands
dnl. \-\-with\-ibmmpi - IBM MPI
dnl. \-\-with\-lammpi[=path] - LAM/MPI
dnl. \-\-with\-mpichnt - MPICH NT
dnl- \-\-with\-sgimpi - SGI MPI
dnl If no type is selected, and a default ("mpich", "ibmmpi", or "sgimpi")
dnl is given, that type is used as if '--with-<default>' was given.
dnl
dnl Sets 'CC', 'F77', 'TESTCC', 'TESTF77', and 'MPILIBNAME'. Does `not`
dnl perform an AC_SUBST for these values.
dnl Also sets 'MPIBOOT' and 'MPIUNBOOT'. These are used to specify
dnl programs that may need to be run before and after running MPI programs.
dnl For example, 'MPIBOOT' may start demons necessary to run MPI programs and
dnl 'MPIUNBOOT' will stop those demons.
dnl
dnl The two forms of the compilers are to allow for tests of the compiler
dnl when the MPI version of the compiler creates executables that cannot
dnl be run on the local system (for example, the IBM SP, where executables
dnl created with mpcc will not run locally, but executables created
dnl with xlc may be used to discover properties of the compiler, such as
dnl the size of data types).
dnl
dnl See also:
dnl PAC_LANG_PUSH_COMPILERS, PAC_LIB_MPI
dnl D*/
AC_DEFUN([PAC_ARG_MPI_TYPES],[
AC_PROVIDE([AC_PROG_CC])
AC_SUBST(CC)
AC_SUBST(CXX)
AC_SUBST(F77)
AC_SUBST(F90)
AC_ARG_WITH(mpich,
[--with-mpich=path - Assume that we are building with MPICH],
ac_mpi_type=mpich)
# Allow MPICH2 as well as MPICH
AC_ARG_WITH(mpich2,
[--with-mpich=path - Assume that we are building with MPICH],
ac_mpi_type=mpich)
AC_ARG_WITH(lammpi,
[--with-lammpi=path - Assume that we are building with LAM/MPI],
ac_mpi_type=lammpi)
AC_ARG_WITH(ibmmpi,
[--with-ibmmpi - Use the IBM SP implementation of MPI],
ac_mpi_type=ibmmpi)
AC_ARG_WITH(sgimpi,
[--with-sgimpi - Use the SGI implementation of MPI],
ac_mpi_type=sgimpi)
AC_ARG_WITH(mpichnt,
[--with-mpichnt - Use MPICH for Windows NT ],
ac_mpi_type=mpichnt)
AC_ARG_WITH(mpi,
[--with-mpi=path - Use an MPI implementation with compile scripts mpicc
and mpif77 in path/bin],ac_mpi_type=generic)
if test "X$ac_mpi_type" = "X" ; then
if test "X$1" != "X" ; then
ac_mpi_type=$1
else
ac_mpi_type=unknown
fi
fi
if test "$ac_mpi_type" = "unknown" -a "$pac_lib_mpi_is_building" = "yes" ; then
ac_mpi_type="mpich"
fi
# Set defaults
MPIRUN_NP="-np "
MPIEXEC_N="-n "
AC_SUBST(MPIRUN_NP)
AC_SUBST(MPIEXEC_N)
case $ac_mpi_type in
mpich)
dnl
dnl This isn't correct. It should try to get the underlying compiler
dnl from the mpicc and mpif77 scripts or mpireconfig
if test "X$pac_lib_mpi_is_building" != "Xyes" ; then
save_PATH="$PATH"
if test "$with_mpich" != "yes" -a "$with_mpich" != "no" ; then
# Look for commands; if not found, try adding bin to the
# path
if test ! -x $with_mpich/mpicc -a -x $with_mpich/bin/mpicc ; then
with_mpich="$with_mpich/bin"
fi
PATH=$with_mpich:${PATH}
fi
AC_PATH_PROG(MPICC,mpicc)
TESTCC=${CC-cc}
CC="$MPICC"
ac_cv_prog_CC=$CC
AC_PATH_PROG(MPIF77,mpif77)
TESTF77=${F77-f77}
F77="$MPIF77"
ac_cv_prog_F77=$F77
AC_PATH_PROG(MPIF90,mpif90)
TESTF90=${F90-f90}
F90="$MPIF90"
ac_cv_prog_F90=$F90
AC_PATH_PROG(MPICXX,mpiCC)
TESTCXX=${CXX-CC}
CXX="$MPICXX"
ac_cv_prog_CXX=$CXX
# We may want to restrict this to the path containing mpirun
AC_PATH_PROG(MPIEXEC,mpiexec)
AC_PATH_PROG(MPIRUN,mpirun)
AC_PATH_PROG(MPIBOOT,mpichboot)
AC_PATH_PROG(MPIUNBOOT,mpichstop)
PATH="$save_PATH"
MPILIBNAME="mpich"
else
# All of the above should have been passed in the environment!
:
fi
;;
mpichnt)
dnl
dnl This isn't adequate, but it helps with using MPICH-NT/SDK.gcc
save_CFLAGS="$CFLAGS"
CFLAGS="$save_CFLAGS -I$with_mpichnt/include"
save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$save_CPPFLAGS -I$with_mpichnt/include"
save_LDFLAGS="$LDFLAGS"
LDFLAGS="$save_LDFLAGS -L$with_mpichnt/lib"
AC_CHECK_LIB(mpich,MPI_Init,found="yes",found="no")
if test "$found" = "no" ; then
AC_CHECK_LIB(mpich2,MPI_Init,found="yes",found="no")
fi
if test "$found" = "no" ; then
CFLAGS=$save_CFLAGS
CPPFLAGS=$save_CPPFLAGS
LDFLAGS=$save_LDFLAGS
fi
;;
lammpi)
dnl
dnl This isn't correct. It should try to get the underlying compiler
dnl from the mpicc and mpif77 scripts or mpireconfig
save_PATH="$PATH"
if test "$with_mpich" != "yes" -a "$with_mpich" != "no" ; then
# Look for commands; if not found, try adding bin to the path
if test ! -x $with_lammpi/mpicc -a -x $with_lammpi/bin/mpicc ; then
with_lammpi="$with_lammpi/bin"
fi
PATH=$with_lammpi:${PATH}
fi
AC_PATH_PROG(MPICC,mpicc)
TESTCC=${CC-cc}
CC="$MPICC"
ac_cv_prog_CC=$CC
AC_PATH_PROG(MPIF77,mpif77)
TESTF77=${F77-f77}
F77="$MPIF77"
ac_cv_prog_F77=$F77
AC_PATH_PROG(MPIF90,mpif90)
TESTF90=${F90-f90}
F90="$MPIF90"
ac_cv_prog_F90=$F90
AC_PATH_PROG(MPICXX,mpiCC)
TESTCXX=${CXX-CC}
CXX="$MPICXX"
ac_cv_prog_CXX=$CXX
PATH="$save_PATH"
MPILIBNAME="lammpi"
MPIBOOT="lamboot"
MPIUNBOOT="wipe"
MPIRUN="mpirun"
;;
ibmmpi)
AC_CHECK_PROGS(MPCC,mpcc)
AC_CHECK_PROGS(MPXLF,mpxlf)
if test -z "$MPCC" -o -z "$MPXLF" ; then
AC_MSG_ERROR([Could not find IBM MPI compilation scripts. Either mpcc or mpxlf is missing])
fi
TESTCC=${CC-xlC}; TESTF77=${F77-xlf}; CC=mpcc; F77=mpxlf
ac_cv_prog_CC=$CC
ac_cv_prog_F77=$F77
# There is no mpxlf90, but the options langlvl and free can
# select the F90 version of xlf
TESTF90=${F90-xlf90}; F90="mpxlf -qlanglvl=90ext -qfree=f90"
MPILIBNAME=""
;;
sgimpi)
TESTCC=${CC:=cc}; TESTF77=${F77:=f77};
TESTCXX=${CXX:=CC}; TESTF90=${F90:=f90}
AC_CHECK_LIB(mpi,MPI_Init)
if test "$ac_cv_lib_mpi_MPI_Init" = "yes" ; then
MPILIBNAME="mpi"
fi
MPIRUN=mpirun
MPIBOOT=""
MPIUNBOOT=""
;;
generic)
# Find the compilers. Expect the compilers to be mpicc and mpif77
# in $with_mpi/bin
PAC_PROG_CC
# We only look for the other compilers if there is no
# disable for them
if test "$enable_f77" != no -a "$enable_fortran" != no ; then
AC_PROG_F77
fi
if test "$enable_cxx" != no ; then
AC_PROG_CXX
fi
if test "$enable_f90" != no ; then
PAC_PROG_F90
fi
# Set defaults for the TEST versions if not already set
if test -z "$TESTCC" ; then
TESTCC=${CC:=cc}
fi
if test -z "$TESTF77" ; then
TESTF77=${F77:=f77}
fi
if test -z "$TESTCXX" ; then
TESTCXX=${CXX:=CC}
fi
if test -z "$TESTF90" ; then
TESTF90=${F90:=f90}
fi
if test "X$MPICC" = "X" ; then
if test -x "$with_mpi/bin/mpicc" ; then
MPICC=$with_mpi/bin/mpicc
fi
fi
if test "X$MPIF77" = "X" ; then
if test -x "$with_mpi/bin/mpif77" ; then
MPIF77=$with_mpi/bin/mpif77
fi
fi
if test "X$MPIEXEC" = "X" ; then
if test -x "$with_mpi/bin/mpiexec" ; then
MPIEXEC=$with_mpi/bin/mpiexec
fi
fi
CC=$MPICC
F77=$MPIF77
ac_cv_prog_CC=$CC
ac_cv_prog_F77=$F77
;;
*)
# Find the compilers
PAC_PROG_CC
# We only look for the other compilers if there is no
# disable for them
if test "$enable_f77" != no -a "$enable_fortran" != no ; then
AC_PROG_F77
fi
if test "$enable_cxx" != no ; then
AC_PROG_CXX
fi
if test "$enable_f90" != no ; then
PAC_PROG_F90
fi
# Set defaults for the TEST versions if not already set
if test -z "$TESTCC" ; then
TESTCC=${CC:=cc}
fi
if test -z "$TESTF77" ; then
TESTF77=${F77:=f77}
fi
if test -z "$TESTCXX" ; then
TESTCXX=${CXX:=CC}
fi
if test -z "$TESTF90" ; then
TESTF90=${F90:=f90}
fi
;;
esac
])
dnl
dnl/*D
dnl PAC_MPI_F2C - Determine if MPI has the MPI-2 functions MPI_xxx_f2c and
dnl MPI_xxx_c2f
dnl
dnl Output Effect:
dnl Define 'HAVE_MPI_F2C' if the routines are found.
dnl
dnl Notes:
dnl Looks only for 'MPI_Request_c2f'.
dnl D*/
AC_DEFUN([PAC_MPI_F2C],[
AC_CACHE_CHECK([for MPI F2C and C2F routines],
pac_cv_mpi_f2c,
[
AC_TRY_LINK([#include "mpi.h"],
[MPI_Request request;MPI_Fint a;a = MPI_Request_c2f(request);],
pac_cv_mpi_f2c="yes",pac_cv_mpi_f2c="no")
])
if test "$pac_cv_mpi_f2c" = "yes" ; then
AC_DEFINE(HAVE_MPI_F2C,1,[Define if MPI has F2C])
fi
])
dnl
dnl/*D
dnl PAC_HAVE_ROMIO - make mpi.h include mpio.h if romio enabled
dnl
dnl Output Effect:
dnl expands @HAVE_ROMIO@ in mpi.h into #include "mpio.h"
dnl D*/
AC_DEFUN([PAC_HAVE_ROMIO],[
if test "$enable_romio" = "yes" ; then HAVE_ROMIO='#include "mpio.h"'; fi
AC_SUBST(HAVE_ROMIO)
])
|