|
|
|
@ -66,22 +66,28 @@ PSBLAS_DIR="$pac_cv_psblas_dir";
|
|
|
|
|
PSBLAS_INCDIR="$pac_cv_psblas_incdir";
|
|
|
|
|
PSBLAS_LIBDIR="$pac_cv_psblas_libdir";
|
|
|
|
|
AC_MSG_CHECKING([for PSBLAS install dir])
|
|
|
|
|
case $PSBLAS_DIR in
|
|
|
|
|
/*) ;;
|
|
|
|
|
*) AC_MSG_ERROR([The PSBLAS installation dir must be an absolute pathname
|
|
|
|
|
if test "X$PSBLAS_DIR" != "X" ; then
|
|
|
|
|
case $PSBLAS_DIR in
|
|
|
|
|
/*) ;;
|
|
|
|
|
*) AC_MSG_ERROR([The PSBLAS installation dir must be an absolute pathname
|
|
|
|
|
specified with --with-psblas=/path/to/psblas])
|
|
|
|
|
esac
|
|
|
|
|
if test ! -d "$PSBLAS_DIR" ; then
|
|
|
|
|
AC_MSG_ERROR([Could not find PSBLAS build dir $PSBLAS_DIR!])
|
|
|
|
|
fi
|
|
|
|
|
AC_MSG_RESULT([$PSBLAS_DIR])
|
|
|
|
|
pac_cv_status_file="$PSBLAS_INCDIR/Make.inc.psblas"
|
|
|
|
|
if test ! -f "$pac_cv_status_file" ; then
|
|
|
|
|
AC_MSG_ERROR([Could not find an installation in $PSBLAS_DIR.])
|
|
|
|
|
esac
|
|
|
|
|
if test ! -d "$PSBLAS_DIR" ; then
|
|
|
|
|
AC_MSG_ERROR([Could not find PSBLAS build dir $PSBLAS_DIR!])
|
|
|
|
|
fi
|
|
|
|
|
AC_MSG_RESULT([$PSBLAS_DIR])
|
|
|
|
|
pac_cv_status_file="$PSBLAS_INCDIR/Make.inc.psblas"
|
|
|
|
|
if test ! -f "$pac_cv_status_file" ; then
|
|
|
|
|
AC_MSG_NOTICE([Could not find an installation in $PSBLAS_DIR.])
|
|
|
|
|
pac_cv_status_file="NONE";
|
|
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
pac_cv_status_file="NONE";
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dnl. $pac_cv_status_file
|
|
|
|
|
dnl AC_MSG_NOTICE([Loaded $pac_cv_status_file $FC $MPIFC $BLACS_LIBS])
|
|
|
|
|
dnl AM_INIT_AUTOMAKE
|
|
|
|
|
AC_MSG_NOTICE([Loaded $pac_cv_status_file $FC $MPIFC $BLACS_LIBS])
|
|
|
|
|
AM_INIT_AUTOMAKE
|
|
|
|
|
dnl Specify required version of autoconf.
|
|
|
|
|
AC_PREREQ(2.59)
|
|
|
|
|
#
|
|
|
|
@ -116,8 +122,7 @@ AC_MSG_RESULT([$INSTALL_DIR $INSTALL_INCLUDEDIR $INSTALL_LIBDIR $INSTALL_DOCSDIR
|
|
|
|
|
###############################################################################
|
|
|
|
|
# Compilers detection: FC,F77,CC should be set, if found.
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
|
|
AC_PROG_FC([ftn xlf95 xlf90 xlf pgf95 pgf90 ifort ifc nagfor gfortran])
|
|
|
|
|
AC_PROG_FC([ftn xlf2003_r xlf2003 xlf95_r xlf95 xlf90 xlf pgf95 pgf90 ifort ifc nagfor gfortran])
|
|
|
|
|
AC_PROG_CC([xlc pgcc icc gcc cc])
|
|
|
|
|
dnl AC_PROG_CXX
|
|
|
|
|
|
|
|
|
@ -136,29 +141,12 @@ if eval "$FC -qversion 2>&1 | grep XL 2>/dev/null" ; then
|
|
|
|
|
# since (as far as it is known to us) -WF, is not used in earlier versions.
|
|
|
|
|
# More problems could be undocumented yet.
|
|
|
|
|
fi
|
|
|
|
|
PAC_ARG_WITH_EXTRA_LIBS
|
|
|
|
|
dnl PAC_ARG_WITH_FLAGS(clibs,CLIBS)
|
|
|
|
|
dnl PAC_ARG_WITH_FLAGS(flibs,FLIBS)
|
|
|
|
|
dnl PAC_ARG_WITH_FLAGS(library-path,LIBRARYPATH)
|
|
|
|
|
dnl PAC_ARG_WITH_FLAGS(include-path,INCLUDEPATH)
|
|
|
|
|
dnl PAC_ARG_WITH_FLAGS(module-path,MODULE_PATH)
|
|
|
|
|
|
|
|
|
|
dnl CPPFLAGS="$INCLUDEPATH $CPPFLAGS"
|
|
|
|
|
###############################################################################
|
|
|
|
|
# BLAS library presence checks
|
|
|
|
|
# Suitable MPI compilers detection
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
|
|
# Note : The libmkl.a (Intel Math Kernel Library) library could be used, too.
|
|
|
|
|
# It is sufficient to specify it as -lmkl in the CLIBS or FLIBS or LIBS
|
|
|
|
|
# and specify its path adjusting -L/path in CFLAGS.
|
|
|
|
|
|
|
|
|
|
# Right now it is a matter of user's taste when linking custom applications.
|
|
|
|
|
# But PSBLAS examples could take advantage of these libraries, too.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
#
|
|
|
|
|
# Note: Someday we will contemplate a fake MPI - configured version of PSBLAS
|
|
|
|
|
###############################################################################
|
|
|
|
|
# First check whether the user required our serial (fake) mpi.
|
|
|
|
|
PAC_ARG_SERIAL_MPI
|
|
|
|
|
|
|
|
|
|
#Note : we miss the name of the Intel C compiler
|
|
|
|
@ -174,23 +162,29 @@ if test "X$MPICC" = "X" ; then
|
|
|
|
|
AC_CHECK_PROGS([MPICC],[mpxlc mpcc mpicc cc])
|
|
|
|
|
fi
|
|
|
|
|
ACX_MPI([], [AC_MSG_ERROR([[Cannot find any suitable MPI implementation for C]])])
|
|
|
|
|
AC_LANG(Fortran 77)
|
|
|
|
|
if test "X$MPIF77" = "X" ; then
|
|
|
|
|
# This is our MPIFC compiler preference: it will override ACX_MPI's first try.
|
|
|
|
|
AC_CHECK_PROGS([MPIF77],[mpxlf mpf77 mpif77 ftn])
|
|
|
|
|
fi
|
|
|
|
|
ACX_MPI([], [AC_MSG_ERROR([[Cannot find any suitable MPI implementation for Fortran 77]])])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AC_LANG([Fortran])
|
|
|
|
|
|
|
|
|
|
if test "X$MPIFC" = "X" ; then
|
|
|
|
|
# This is our MPIFC compiler preference: it will override ACX_MPI's first try.
|
|
|
|
|
AC_CHECK_PROGS([MPIFC],[mpxlf2003_r mpxlf2003 mpxlf95_r mpxlf90 mpf95 mpf90 mpif95 mpif90 ])
|
|
|
|
|
AC_CHECK_PROGS([MPIFC],[mpxlf2003_r mpxlf2003 mpxlf95_r mpxlf90 mpf95 mpf90 mpifort mpif95 mpif90 ftn ])
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
ACX_MPI([], [AC_MSG_ERROR([[Cannot find any suitable MPI implementation for Fortran]])])
|
|
|
|
|
|
|
|
|
|
AC_LANG(Fortran 77)
|
|
|
|
|
if test "X$MPIF77" = "X" ; then
|
|
|
|
|
# This is our MPIFC compiler preference: it will override ACX_MPI's first try.
|
|
|
|
|
AC_CHECK_PROGS([MPIF77],[mpxlf mpf77 mpif77 ftn])
|
|
|
|
|
fi
|
|
|
|
|
ACX_MPI([], [AC_MSG_ERROR([[Cannot find any suitable MPI implementation for Fortran 77]])])
|
|
|
|
|
FC="$MPIFC" ;
|
|
|
|
|
F77="$MPIF77";
|
|
|
|
|
CC="$MPICC";
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# We leave a default language for the next checks.
|
|
|
|
|
dnl AC_LANG([Fortran 77])
|
|
|
|
|
AC_LANG([C])
|
|
|
|
@ -201,17 +195,311 @@ dnl Now on, MPIFC should be set, as MPIF77 and MPICC
|
|
|
|
|
# Sanity checks, although redundant (useful when debugging this configure.ac)!
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
|
|
if test "X$MPIFC" == "X" ; then
|
|
|
|
|
AC_MSG_ERROR([Problem : No MPI Fortran compiler specified nor found!])
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if test "X$MPICC" == "X" ; then
|
|
|
|
|
AC_MSG_ERROR([Problem : No MPI C compiler specified nor found!])
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
# FLAGS and LIBS user customization
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
|
|
dnl NOTE : no spaces before the comma, and no brackets before the second argument!
|
|
|
|
|
PAC_ARG_WITH_FLAGS(ccopt,CCOPT)
|
|
|
|
|
PAC_ARG_WITH_FLAGS(fcopt,FCOPT)
|
|
|
|
|
#PAC_ARG_WITH_FLAGS(f90copt,F90COPT)
|
|
|
|
|
#PAC_ARG_WITH_FLAGS(ldflags,LDFLAGS)
|
|
|
|
|
PAC_ARG_WITH_LIBS
|
|
|
|
|
PAC_ARG_WITH_FLAGS(clibs,CLIBS)
|
|
|
|
|
PAC_ARG_WITH_FLAGS(flibs,FLIBS)
|
|
|
|
|
|
|
|
|
|
dnl candidates for removal:
|
|
|
|
|
PAC_ARG_WITH_FLAGS(library-path,LIBRARYPATH)
|
|
|
|
|
PAC_ARG_WITH_FLAGS(include-path,INCLUDEPATH)
|
|
|
|
|
PAC_ARG_WITH_FLAGS(module-path,MODULE_PATH)
|
|
|
|
|
|
|
|
|
|
# we just gave the user the chance to append values to these variables
|
|
|
|
|
PAC_ARG_WITH_EXTRA_LIBS
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
# Sanity checks, although redundant (useful when debugging this configure.ac)!
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
# PSBLAS library presence checks
|
|
|
|
|
###############################################################################
|
|
|
|
|
AX_F90_MODULE_FLAG
|
|
|
|
|
FMFLAG="${ax_cv_f90_modflag%%[ ]*}"
|
|
|
|
|
# Last resort attempt
|
|
|
|
|
if test "x$FMFLAG" == "xnot" ; then
|
|
|
|
|
AC_MSG_NOTICE([Fortran inclusion flag detection failed, trying with -I])
|
|
|
|
|
|
|
|
|
|
PAC_CHECK_HAVE_GFORTRAN(
|
|
|
|
|
[psblas_cv_fc="gcc"],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_CHECK_HAVE_CRAYFTN(
|
|
|
|
|
[psblas_cv_fc="cray"],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if test x"$psblas_cv_fc" == "x" ; then
|
|
|
|
|
if eval "$MPIFC -qversion 2>&1 | grep XL 2>/dev/null" ; then
|
|
|
|
|
psblas_cv_fc="xlf"
|
|
|
|
|
# Some configurations of the XLF want "-WF," prepended to -D.. flags.
|
|
|
|
|
# TODO : discover the exact conditions when the usage of -WF is needed.
|
|
|
|
|
psblas_cv_define_prepend="-WF,"
|
|
|
|
|
if eval "$MPIFC -qversion 2>&1 | grep -e\"Version: 10\.\" 2>/dev/null"; then
|
|
|
|
|
FDEFINES="$psblas_cv_define_prepend-DXLF_10 $FDEFINES"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Note : there could be problems with old xlf compiler versions ( <10.1 )
|
|
|
|
|
# since (as far as it is known to us) -WF, is not used in earlier versions.
|
|
|
|
|
# More problems could be undocumented yet.
|
|
|
|
|
elif eval "$MPIFC -V 2>&1 | grep Sun 2>/dev/null" ; then
|
|
|
|
|
# Sun compiler detection
|
|
|
|
|
|
|
|
|
|
psblas_cv_fc="sun"
|
|
|
|
|
elif eval "$MPIFC -V 2>&1 | grep Portland 2>/dev/null" ; then
|
|
|
|
|
# Portland group compiler detection
|
|
|
|
|
|
|
|
|
|
psblas_cv_fc="pg"
|
|
|
|
|
elif eval "$MPIFC -V 2>&1 | grep Intel.*Fortran.*Compiler 2>/dev/null" ; then
|
|
|
|
|
# Intel compiler identification
|
|
|
|
|
|
|
|
|
|
psblas_cv_fc="ifc"
|
|
|
|
|
elif eval "$MPIFC -v 2>&1 | grep NAG 2>/dev/null" ; then
|
|
|
|
|
psblas_cv_fc="nag"
|
|
|
|
|
FC="$MPIFC"
|
|
|
|
|
F77="$MPIFC"
|
|
|
|
|
else
|
|
|
|
|
psblas_cv_fc=""
|
|
|
|
|
# unsupported MPI Fortran compiler
|
|
|
|
|
AC_MSG_NOTICE([[Unknown Fortran compiler, proceeding with fingers crossed !]])
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
if test "X$psblas_cv_fc" == "Xgcc" ; then
|
|
|
|
|
PAC_HAVE_MODERN_GFORTRAN(
|
|
|
|
|
[],
|
|
|
|
|
[AC_MSG_ERROR([Bailing out.])]
|
|
|
|
|
)
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
AC_LANG([C])
|
|
|
|
|
AC_CHECK_SIZEOF(void *)
|
|
|
|
|
# Define for platforms with 64 bit (void * ) pointers
|
|
|
|
|
if test X"$ac_cv_sizeof_void_p" == X"8" ; then
|
|
|
|
|
CDEFINES="-DPtr64Bits $CDEFINES"
|
|
|
|
|
fi
|
|
|
|
|
AC_LANG([Fortran])
|
|
|
|
|
if test "X$psblas_cv_fc" == X"pg" ; then
|
|
|
|
|
save_FC=$FC
|
|
|
|
|
FC=$F77
|
|
|
|
|
fi
|
|
|
|
|
__AC_FC_NAME_MANGLING
|
|
|
|
|
if test "X$psblas_cv_fc" == X"pg" ; then
|
|
|
|
|
FC=$save_FC
|
|
|
|
|
fi
|
|
|
|
|
AC_LANG([C])
|
|
|
|
|
dnl AC_MSG_NOTICE([Fortran name mangling: $ac_cv_fc_mangling])
|
|
|
|
|
[pac_fc_case=${ac_cv_fc_mangling%%,*}]
|
|
|
|
|
[pac_fc_under=${ac_cv_fc_mangling#*,}]
|
|
|
|
|
[pac_fc_sec_under=${pac_fc_under#*,}]
|
|
|
|
|
[pac_fc_sec_under=${pac_fc_sec_under# }]
|
|
|
|
|
[pac_fc_under=${pac_fc_under%%,*}]
|
|
|
|
|
[pac_fc_under=${pac_fc_under# }]
|
|
|
|
|
AC_MSG_CHECKING([defines for C/Fortran name interfaces])
|
|
|
|
|
if test "x$pac_fc_case" == "xlower case"; then
|
|
|
|
|
if test "x$pac_fc_under" == "xunderscore"; then
|
|
|
|
|
if test "x$pac_fc_sec_under" == "xno extra underscore"; then
|
|
|
|
|
pac_f_c_names="-DLowerUnderscore"
|
|
|
|
|
elif test "x$pac_fc_sec_under" == "xextra underscore"; then
|
|
|
|
|
pac_f_c_names="-DLowerDoubleUnderscore"
|
|
|
|
|
else
|
|
|
|
|
pac_f_c_names="-DUNKNOWN"
|
|
|
|
|
dnl AC_MSG_NOTICE([Fortran name mangling extra underscore unknown case])
|
|
|
|
|
fi
|
|
|
|
|
elif test "x$pac_fc_under" == "xno underscore"; then
|
|
|
|
|
pac_f_c_names="-DLowerCase"
|
|
|
|
|
else
|
|
|
|
|
pac_f_c_names="-DUNKNOWN"
|
|
|
|
|
dnl AC_MSG_NOTICE([Fortran name mangling underscore unknown case])
|
|
|
|
|
fi
|
|
|
|
|
elif test "x$pac_fc_case" == "xupper case"; then
|
|
|
|
|
if test "x$pac_fc_under" == "xunderscore"; then
|
|
|
|
|
if test "x$pac_fc_sec_under" == "xno extra underscore"; then
|
|
|
|
|
pac_f_c_names="-DUpperUnderscore"
|
|
|
|
|
elif test "x$pac_fc_sec_under" == "xextra underscore"; then
|
|
|
|
|
pac_f_c_names="-DUpperDoubleUnderscore"
|
|
|
|
|
else
|
|
|
|
|
pac_f_c_names="-DUNKNOWN"
|
|
|
|
|
dnl AC_MSG_NOTICE([Fortran name mangling extra underscore unknown case])
|
|
|
|
|
fi
|
|
|
|
|
elif test "x$pac_fc_under" == "xno underscore"; then
|
|
|
|
|
pac_f_c_names="-DUpperCase"
|
|
|
|
|
else
|
|
|
|
|
pac_f_c_names="-DUNKNOWN"
|
|
|
|
|
dnl AC_MSG_NOTICE([Fortran name mangling underscore unknown case])
|
|
|
|
|
fi
|
|
|
|
|
dnl AC_MSG_NOTICE([Fortran name mangling UPPERCASE not handled])
|
|
|
|
|
else
|
|
|
|
|
pac_f_c_names="-DUNKNOWN"
|
|
|
|
|
dnl AC_MSG_NOTICE([Fortran name mangling unknown case])
|
|
|
|
|
fi
|
|
|
|
|
CDEFINES="$pac_f_c_names $CDEFINES"
|
|
|
|
|
|
|
|
|
|
AC_MSG_RESULT([ $pac_f_c_names ])
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
# Make.inc generation logic
|
|
|
|
|
###############################################################################
|
|
|
|
|
F90COPT="$FCOPT"
|
|
|
|
|
|
|
|
|
|
if test "X$CCOPT" == "X" ; then
|
|
|
|
|
if test "X$psblas_cv_fc" == "Xgcc" ; then
|
|
|
|
|
# note that no space should be placed around the equality symbol in assignements
|
|
|
|
|
# Note : 'native' is valid _only_ on GCC/x86 (32/64 bits)
|
|
|
|
|
CCOPT="-O3 $CCOPT"
|
|
|
|
|
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"xlf" ; then
|
|
|
|
|
# XL compiler : consider using -qarch=auto
|
|
|
|
|
CCOPT="-O3 -qarch=auto $CCOPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"ifc" ; then
|
|
|
|
|
# other compilers ..
|
|
|
|
|
CCOPT="-O3 $CCOPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"pg" ; then
|
|
|
|
|
# other compilers ..
|
|
|
|
|
CCOPT="-fast $CCOPT"
|
|
|
|
|
# NOTE : PG & Sun use -fast instead -O3
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"sun" ; then
|
|
|
|
|
# other compilers ..
|
|
|
|
|
CCOPT="-fast $CCOPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"cray" ; then
|
|
|
|
|
CCOPT="-O3 $CCOPT"
|
|
|
|
|
MPICC="cc"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"nag" ; then
|
|
|
|
|
# using GCC in conjunction with NAG.
|
|
|
|
|
CCOPT="-O2"
|
|
|
|
|
else
|
|
|
|
|
CCOPT="-O2 $CCOPT"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
#CFLAGS="${CCOPT}"
|
|
|
|
|
|
|
|
|
|
if test "X$FCOPT" == "X" ; then
|
|
|
|
|
if test "X$psblas_cv_fc" == "Xgcc" ; then
|
|
|
|
|
# note that no space should be placed around the equality symbol in assignations
|
|
|
|
|
# Note : 'native' is valid _only_ on GCC/x86 (32/64 bits)
|
|
|
|
|
FCOPT="-O3 $FCOPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"xlf" ; then
|
|
|
|
|
# XL compiler : consider using -qarch=auto
|
|
|
|
|
FCOPT="-O3 -qarch=auto -qfixed -qsuffix=f=f:cpp=F -qlanglvl=extended $FCOPT"
|
|
|
|
|
FCFLAGS="-qhalt=e $FCFLAGS"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"ifc" ; then
|
|
|
|
|
# other compilers ..
|
|
|
|
|
FCOPT="-O3 $FCOPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"pg" ; then
|
|
|
|
|
# other compilers ..
|
|
|
|
|
FCOPT="-fast $FCOPT"
|
|
|
|
|
# NOTE : PG & Sun use -fast instead -O3
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"sun" ; then
|
|
|
|
|
# other compilers ..
|
|
|
|
|
FCOPT="-fast $FCOPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"cray" ; then
|
|
|
|
|
FCOPT="-O3 -em $FCOPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"nag" ; then
|
|
|
|
|
# NAG compiler ..
|
|
|
|
|
FCOPT="-O2 "
|
|
|
|
|
# NOTE : PG & Sun use -fast instead -O3
|
|
|
|
|
else
|
|
|
|
|
FCOPT="-O2 $FCOPT"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
if test "X$psblas_cv_fc" == X"nag" ; then
|
|
|
|
|
# Add needed options
|
|
|
|
|
FCOPT="$FCOPT -dcfuns -f2003 -wmismatch=mpi_scatterv,mpi_alltoallv,mpi_gatherv,mpi_allgatherv"
|
|
|
|
|
fi
|
|
|
|
|
#FFLAGS="${FCOPT}"
|
|
|
|
|
|
|
|
|
|
if test "X$F90COPT" == "X" ; then
|
|
|
|
|
if test "X$psblas_cv_fc" == "Xgcc" ; then
|
|
|
|
|
# note that no space should be placed around the equality symbol in assignations
|
|
|
|
|
# Note : 'native' is valid _only_ on GCC/x86 (32/64 bits)
|
|
|
|
|
F90COPT="-O3 $F90COPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"xlf" ; then
|
|
|
|
|
# XL compiler : consider using -qarch=auto
|
|
|
|
|
F90COPT="-O3 -qarch=auto -qsuffix=f=f90:cpp=F90 -qlanglvl=extended $F90COPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"ifc" ; then
|
|
|
|
|
# other compilers ..
|
|
|
|
|
F90COPT="-O3 $F90COPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"pg" ; then
|
|
|
|
|
# other compilers ..
|
|
|
|
|
F90COPT="-fast $F90COPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"sun" ; then
|
|
|
|
|
F90COPT="-fast $F90COPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"cray" ; then
|
|
|
|
|
MPIFC="ftn"
|
|
|
|
|
F90COPT="-O3 -em $F90COPT"
|
|
|
|
|
elif test "X$psblas_cv_fc" == X"nag" ; then
|
|
|
|
|
# NAG compiler
|
|
|
|
|
F90COPT="-O2"
|
|
|
|
|
else
|
|
|
|
|
# other compilers ..
|
|
|
|
|
F90COPT="-O2 $F90COPT"
|
|
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
echo "Found FCFLAGS $F90COPT"
|
|
|
|
|
#F90COPT="${FCFLAGS}"
|
|
|
|
|
fi
|
|
|
|
|
if test "X$psblas_cv_fc" == X"nag" ; then
|
|
|
|
|
# Add needed options
|
|
|
|
|
F90COPT="$F90COPT -dcfuns -f2003 -wmismatch=mpi_scatterv,mpi_alltoallv,mpi_gatherv,mpi_allgatherv"
|
|
|
|
|
EXTRA_OPT="-mismatch_all"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
#FCFLAGS="${F90COPT}"
|
|
|
|
|
|
|
|
|
|
# COPT,FCOPT, F90COPT are aliases for FFLAGS,CFLAGS,FCFLAGS .
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# Compilers variables selection
|
|
|
|
|
##############################################################################
|
|
|
|
|
F90=${FC}
|
|
|
|
|
MPF90=${MPIFC}
|
|
|
|
|
FC=${FC}
|
|
|
|
|
MPF77=${MPIFC}
|
|
|
|
|
CC=${CC}
|
|
|
|
|
MPCC=${MPICC}
|
|
|
|
|
|
|
|
|
|
if test "X$psblas_cv_fc" == X"cray"
|
|
|
|
|
then
|
|
|
|
|
MODEXT=".mod"
|
|
|
|
|
FMFLAG="-I"
|
|
|
|
|
FIFLAG="-I"
|
|
|
|
|
BASEMODNAME=PSB_BASE_MOD
|
|
|
|
|
PRECMODNAME=PSB_PREC_MOD
|
|
|
|
|
METHDMODNAME=PSB_KRYLOV_MOD
|
|
|
|
|
UTILMODNAME=PSB_UTIL_MOD
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
AX_F90_MODULE_EXTENSION
|
|
|
|
|
AX_F90_MODULE_FLAG
|
|
|
|
|
MODEXT=".$ax_cv_f90_modext"
|
|
|
|
|
FMFLAG="${ax_cv_f90_modflag%%[ ]*}"
|
|
|
|
|
FIFLAG=-I
|
|
|
|
|
BASEMODNAME=psb_base_mod
|
|
|
|
|
PRECMODNAME=psb_prec_mod
|
|
|
|
|
METHDMODNAME=psb_krylov_mod
|
|
|
|
|
UTILMODNAME=psb_util_mod
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# Choice of our compilers, needed by Make.inc
|
|
|
|
|
##############################################################################
|
|
|
|
|
if test "X$FLINK" == "X" ; then
|
|
|
|
|
FLINK=${MPF77}
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if test "X$F90LINK" == "X" ; then
|
|
|
|
|
F90LINK=${MPF90}
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -219,6 +507,7 @@ PAC_FORTRAN_HAVE_PSBLAS([AC_MSG_RESULT([yes.])],
|
|
|
|
|
[AC_MSG_ERROR([no. Could not find working version of PSBLAS.])])
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_PSBLAS_VERSION()
|
|
|
|
|
|
|
|
|
|
if test "x$pac_cv_psblas_major" == "xunknown"; then
|
|
|
|
|
AC_MSG_ERROR([PSBLAS version major "$pac_cv_psblas_major".])
|
|
|
|
|
fi
|
|
|
|
@ -235,6 +524,134 @@ else
|
|
|
|
|
AC_MSG_NOTICE([Am configuring with PSBLAS version $pac_cv_psblas_major.$pac_cv_psblas_minor.$pac_cv_psblas_patchlevel.])
|
|
|
|
|
fi
|
|
|
|
|
###############################################################################
|
|
|
|
|
# Parachute rules for ar and ranlib ... (could cause problems)
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
|
|
if test "X$AR" == "X" ; then
|
|
|
|
|
AR="ar"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if test "X$RANLIB" == "X" ; then
|
|
|
|
|
RANLIB="ranlib"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# This should be portable
|
|
|
|
|
AR="${AR} -cur"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
# NOTE :
|
|
|
|
|
# Missing stuff :
|
|
|
|
|
# In the case the detected fortran compiler is ifort, icc or gcc
|
|
|
|
|
# should be valid options.
|
|
|
|
|
# The same for pg (Portland Group compilers).
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
# Custom test : do we have a module or include for MPI Fortran interface?
|
|
|
|
|
if test x"$pac_cv_serial_mpi" == x"yes" ; then
|
|
|
|
|
FDEFINES="$psblas_cv_define_prepend-DSERIAL_MPI $psblas_cv_define_prepend-DMPI_MOD $FDEFINES";
|
|
|
|
|
else
|
|
|
|
|
PAC_FORTRAN_CHECK_HAVE_MPI_MOD(
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DMPI_MOD $FDEFINES"],
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DMPI_H $FDEFINES"])
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
PAC_ARG_LONG_INTEGERS
|
|
|
|
|
if test x"$pac_cv_long_integers" == x"yes" ; then
|
|
|
|
|
FDEFINES="$psblas_cv_define_prepend-DLONG_INTEGERS $FDEFINES";
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# Tests for support of various Fortran features; some of them are critical,
|
|
|
|
|
# some optional
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_EXTENDS(
|
|
|
|
|
[],
|
|
|
|
|
[AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for EXTENDS.
|
|
|
|
|
Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_CLASS_TBP(
|
|
|
|
|
[],
|
|
|
|
|
[AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for CLASS and type bound procedures.
|
|
|
|
|
Please get a Fortran compiler that supports them, e.g. GNU Fortran 4.8.])]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_SOURCE(
|
|
|
|
|
[],
|
|
|
|
|
[AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for SOURCE= allocation.
|
|
|
|
|
Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_HAVE_MOVE_ALLOC(
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DHAVE_MOVE_ALLOC $FDEFINES"],
|
|
|
|
|
[AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for MOVE_ALLOC.
|
|
|
|
|
Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_ISO_C_BIND(
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DHAVE_ISO_C_BINDING $FDEFINES"],
|
|
|
|
|
[AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for ISO_C_BINDING.
|
|
|
|
|
Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# Optional features
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_VOLATILE(
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DHAVE_VOLATILE $FDEFINES"],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_GENERICS(
|
|
|
|
|
[],
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DHAVE_BUGGY_GENERICS $FDEFINES"]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_FLUSH(
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DHAVE_FLUSH_STMT $FDEFINES"],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_ISO_FORTRAN_ENV(
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DHAVE_ISO_FORTRAN_ENV $FDEFINES"],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_FINAL(
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DHAVE_FINAL $FDEFINES"],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_SAME_TYPE(
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DHAVE_SAME_TYPE_AS $FDEFINES"],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_EXTENDS_TYPE(
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DHAVE_EXTENDS_TYPE_OF $FDEFINES"],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PAC_FORTRAN_TEST_MOLD(
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DHAVE_MOLD $FDEFINES"],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
# BLAS library presence checks
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
|
|
# Note : The libmkl.a (Intel Math Kernel Library) library could be used, too.
|
|
|
|
|
# It is sufficient to specify it as -lmkl in the CLIBS or FLIBS or LIBS
|
|
|
|
|
# and specify its path adjusting -L/path in CFLAGS.
|
|
|
|
|
|
|
|
|
|
# Right now it is a matter of user's taste when linking custom applications.
|
|
|
|
|
# But PSBLAS examples could take advantage of these libraries, too.
|
|
|
|
|
AC_LANG([Fortran])
|
|
|
|
|
PAC_BLAS([], [AC_MSG_ERROR([[Cannot find BLAS library, specify a path using --with-blas=DIR/LIB (for example --with-blas=/usr/path/lib/libcxml.a)]])])
|
|
|
|
|
PAC_LAPACK(
|
|
|
|
|
[FDEFINES="$psblas_cv_define_prepend-DHAVE_LAPACK $FDEFINES"],
|
|
|
|
|
)
|
|
|
|
|
AC_LANG([C])
|
|
|
|
|
###############################################################################
|
|
|
|
|
# Auxiliary packages
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
|
@ -272,6 +689,67 @@ else
|
|
|
|
|
SLUDIST_FLAGS=""
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
##############################################
|
|
|
|
|
FINCLUDES="$PSBLAS_INCLUDES"
|
|
|
|
|
|
|
|
|
|
if test "x$pac_cv_status_file" != "xNONE"; then
|
|
|
|
|
PSBLAS_INSTALL_MAKEINC='include $(PSBLAS_INCDIR)/Make.inc.psblas';
|
|
|
|
|
else
|
|
|
|
|
PSBLAS_INSTALL_MAKEINC="";
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if test "x$pac_cv_status_file" != "xNONE"; then
|
|
|
|
|
COMPILERULES='';
|
|
|
|
|
else
|
|
|
|
|
COMPILERULES='
|
|
|
|
|
F90LINK=$(MPF90)
|
|
|
|
|
FLINK=$(MPF77)
|
|
|
|
|
|
|
|
|
|
# These should be portable rules, arent they?
|
|
|
|
|
.c.o:
|
|
|
|
|
$(CC) $(CCOPT) $(CINCLUDES) $(CDEFINES) -c $< -o $@
|
|
|
|
|
.f.o:
|
|
|
|
|
$(FC) $(FCOPT) $(FINCLUDES) -c $< -o $@
|
|
|
|
|
.f90.o:
|
|
|
|
|
$(F90) $(FCOPT) $(FINCLUDES) -c $< -o $@
|
|
|
|
|
.F.o:
|
|
|
|
|
$(FC) $(FCOPT) $(FINCLUDES) $(FDEFINES) -c $< -o $@
|
|
|
|
|
.F90.o:
|
|
|
|
|
$(F90) $(FCOPT) $(FINCLUDES) $(FDEFINES) -c $< -o $@'
|
|
|
|
|
|
|
|
|
|
COMPILERULES="
|
|
|
|
|
# The following ones are the variables used by the PSBLAS make scripts.
|
|
|
|
|
|
|
|
|
|
F90=$F90
|
|
|
|
|
FC=$FC
|
|
|
|
|
CC=$CC
|
|
|
|
|
F90COPT=$F90COPT
|
|
|
|
|
FCOPT=$FCOPT
|
|
|
|
|
CCOPT=$CCOPT
|
|
|
|
|
FMFLAG=$FMFLAG
|
|
|
|
|
FIFLAG=$FIFLAG
|
|
|
|
|
EXTRA_OPT=$EXTRA_OPT
|
|
|
|
|
|
|
|
|
|
BASEMODNAME=$BASEMODNAME
|
|
|
|
|
PRECMODNAME=$PRECMODNAME
|
|
|
|
|
METHDMODNAME=$METHDMODNAME
|
|
|
|
|
UTILMODNAME=$UTILMODNAME
|
|
|
|
|
|
|
|
|
|
LIBS=$LIBS
|
|
|
|
|
BLAS=$BLAS_LIBS
|
|
|
|
|
|
|
|
|
|
# These three should be always set!
|
|
|
|
|
MPF90=$MPF90
|
|
|
|
|
MPF77=$MPF77
|
|
|
|
|
MPCC=$MPCC
|
|
|
|
|
|
|
|
|
|
AR=$AR
|
|
|
|
|
RANLIB=$RANLIB
|
|
|
|
|
PSBLDLIBS=$LAPACK $BLAS_LIBS $METIS_LIB $LIBS
|
|
|
|
|
|
|
|
|
|
$COMPILERULES"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
# Variable substitutions : the Make.inc.in will have these @VARIABLES@
|
|
|
|
@ -279,6 +757,9 @@ fi
|
|
|
|
|
|
|
|
|
|
AC_SUBST(PSBLAS_DIR)
|
|
|
|
|
AC_SUBST(PSBLAS_INCDIR)
|
|
|
|
|
AC_SUBST(PSBLAS_INCLUDES)
|
|
|
|
|
AC_SUBST(PSBLAS_INSTALL_MAKEINC)
|
|
|
|
|
AC_SUBST(PSBLAS_LIBS)
|
|
|
|
|
|
|
|
|
|
AC_SUBST(INSTALL)
|
|
|
|
|
AC_SUBST(INSTALL_DATA)
|
|
|
|
@ -298,13 +779,14 @@ AC_SUBST(UMF_LIBS)
|
|
|
|
|
AC_SUBST(SLUDIST_FLAGS)
|
|
|
|
|
AC_SUBST(SLUDIST_LIBS)
|
|
|
|
|
AC_SUBST(FDEFINES)
|
|
|
|
|
|
|
|
|
|
AC_SUBST(MODEXT)
|
|
|
|
|
AC_SUBST(COMPILERULES)
|
|
|
|
|
###############################################################################
|
|
|
|
|
# the following files will be created by Automake
|
|
|
|
|
|
|
|
|
|
AC_CONFIG_FILES([Make.inc])
|
|
|
|
|
AC_OUTPUT()
|
|
|
|
|
#AC_OUTPUT(Make.inc Makefile)
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
|
|
dnl Please note that brackets around variable identifiers are absolutely needed for compatibility..
|
|
|
|
|