463 lines
13 KiB
Plaintext
463 lines
13 KiB
Plaintext
dnl #BHEADER**********************************************************************
|
|
dnl # Copyright (c) 2008, Lawrence Livermore National Security, LLC.
|
|
dnl # Produced at the Lawrence Livermore National Laboratory.
|
|
dnl # This file is part of HYPRE. See file COPYRIGHT for details.
|
|
dnl #
|
|
dnl # HYPRE is free software; you can redistribute it and/or modify it under the
|
|
dnl # terms of the GNU Lesser General Public License (as published by the Free
|
|
dnl # Software Foundation) version 2.1 dated February 1999.
|
|
dnl #
|
|
dnl # $Revision$
|
|
dnl #EHEADER**********************************************************************
|
|
|
|
dnl **********************************************************************
|
|
dnl * AC_HYPRE_CHECK_MPI
|
|
dnl *
|
|
dnl try to determine what the MPI flags should be
|
|
dnl AC_HYPRE_CHECK_MPI([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
|
dnl ACTION-IF-FOUND is a list of shell commands to run
|
|
dnl if an MPI library is found, and
|
|
dnl ACTION-IF-NOT-FOUND is a list of commands to run it
|
|
dnl if it is not found. If ACTION-IF-FOUND is not specified,
|
|
dnl the default action will define HAVE_MPI.
|
|
dnl **********************************************************************
|
|
AC_DEFUN([AC_HYPRE_CHECK_MPI],
|
|
[AC_PREREQ(2.57)dnl
|
|
AC_PREREQ(2.50) dnl for AC_LANG_CASE
|
|
|
|
if test x = x"$MPILIBS"; then
|
|
AC_LANG_CASE([C], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])],
|
|
[C++], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])],
|
|
[Fortran 77], [AC_MSG_CHECKING([for MPI_Init])
|
|
AC_TRY_LINK([],[ call MPI_Init], [MPILIBS=" "
|
|
AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])])
|
|
fi
|
|
|
|
if test x = x"$MPILIBS"; then
|
|
AC_CHECK_LIB(mpi, MPI_Init, [MPILIBS="-lmpi"])
|
|
fi
|
|
|
|
if test x = x"$MPILIBS"; then
|
|
AC_CHECK_LIB(mpich, MPI_Init, [MPILIBS="-lmpich"])
|
|
fi
|
|
|
|
dnl We have to use AC_TRY_COMPILE and not AC_CHECK_HEADER because the
|
|
dnl latter uses $CPP, not $CC (which may be mpicc).
|
|
AC_LANG_CASE([C], [if test x != x"$MPILIBS"; then
|
|
AC_MSG_CHECKING([for mpi.h])
|
|
AC_TRY_COMPILE([#include <mpi.h>],[],[AC_MSG_RESULT(yes)], [MPILIBS=""
|
|
AC_MSG_RESULT(no)])
|
|
fi],
|
|
[C++], [if test x != x"$MPILIBS"; then
|
|
AC_MSG_CHECKING([for mpi.h])
|
|
AC_TRY_COMPILE([#include <mpi.h>],[],[AC_MSG_RESULT(yes)], [MPILIBS=""
|
|
AC_MSG_RESULT(no)])
|
|
fi])
|
|
|
|
AC_SUBST(MPILIBS)
|
|
|
|
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
|
if test x = x"$MPILIBS"; then
|
|
$2
|
|
:
|
|
else
|
|
AC_DEFINE(HYPRE_HAVE_MPI,1,[Found the MPI library.])
|
|
$1
|
|
:
|
|
fi
|
|
])
|
|
|
|
dnl **********************************************************************
|
|
dnl * AC_HYPRE_FIND_G2C
|
|
dnl * try to find libg2c.a
|
|
dnl **********************************************************************
|
|
AC_DEFUN([AC_HYPRE_FIND_G2C],
|
|
[
|
|
dnl AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
|
|
|
|
hypre_save_LIBS="$LIBS"
|
|
LIBS="$LIBS $FLIBS"
|
|
|
|
found_g2c=no
|
|
|
|
dnl * This setting of LDFLAGS is not the right way to go (RDF)
|
|
g2c_GCC_PATH="-L/usr/lib/gcc-lib/i386-redhat-linux/3.2.3"
|
|
g2c_SEARCH_PATHS="$g2c_GCC_PATH -L/usr/lib -L/usr/local/lib -L/usr/apps/lib -L/lib"
|
|
LDFLAGS="$g2c_SEARCH_PATHS $LDFLAGS"
|
|
|
|
AC_CHECK_LIB(g2c, e_wsfe, [found_g2c=yes])
|
|
|
|
if test "$found_g2c" = "yes"; then
|
|
LIBS="-lg2c $hypre_save_LIBS"
|
|
else
|
|
LIBS="$hypre_save_LIBS"
|
|
fi
|
|
|
|
])
|
|
|
|
dnl **********************************************************************
|
|
dnl * AC_HYPRE_OPTIMIZATION_FLAGS
|
|
dnl *
|
|
dnl * Set compile FLAGS for optimization
|
|
dnl **********************************************************************
|
|
AC_DEFUN([AC_HYPRE_OPTIMIZATION_FLAGS],
|
|
[AC_PREREQ(2.57)dnl
|
|
|
|
if test "x${hypre_user_chose_cflags}" = "xno"
|
|
then
|
|
case "${CC}" in
|
|
gcc|mpigcc|mpicc)
|
|
CFLAGS="-O2"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CFLAGS="$CFLAGS -fopenmp"
|
|
LDFLAGS="$LDFLAGS -fopenmp"
|
|
fi
|
|
;;
|
|
icc|mpiicc)
|
|
CFLAGS="-O2"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CFLAGS="$CFLAGS -openmp"
|
|
LDFLAGS="$LDFLAGS -openmp"
|
|
fi
|
|
;;
|
|
pgcc|mpipgcc)
|
|
CFLAGS="-fast"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CFLAGS="$CFLAGS -mp"
|
|
LDFLAGS="$LDFLAGS -mp"
|
|
fi
|
|
;;
|
|
cc|xlc|xlc_r|mpxlc|mpixlc|mpixlc_r|mpcc)
|
|
CFLAGS="-O2"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CFLAGS="$CFLAGS -qsmp=omp"
|
|
LDFLAGS="$LDFLAGS -qsmp=omp"
|
|
fi
|
|
;;
|
|
KCC|mpiKCC)
|
|
CFLAGS="-fast +K3"
|
|
;;
|
|
*)
|
|
CFLAGS="-O"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if test "x${hypre_user_chose_cxxflags}" = "xno"
|
|
then
|
|
case "${CXX}" in
|
|
g++|gCC|mpig++|mpicxx|mpiCC)
|
|
CXXFLAGS="-O2"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CXXFLAGS="$CXXFLAGS -fopenmp"
|
|
fi
|
|
;;
|
|
icpc|icc|mpiicpc|mpiicc)
|
|
CXXFLAGS="-O2"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CXXFLAGS="$CXXFLAGS -openmp"
|
|
fi
|
|
;;
|
|
pgCC|mpipgCC)
|
|
CXXFLAGS="-fast"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CXXFLAGS="$CXXFLAGS -mp"
|
|
fi
|
|
;;
|
|
CC|cxx|xlC|xlC_r|mpxlC|mpixlcxx|mpixlcxx_r|mpCC)
|
|
CXXFLAGS="-O2"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CXXFLAGS="$CXXFLAGS -qsmp=omp"
|
|
fi
|
|
;;
|
|
KCC|mpiKCC)
|
|
CXXFLAGS="-fast +K3"
|
|
;;
|
|
*)
|
|
CXXFLAGS="-O"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if test "x${hypre_user_chose_fflags}" = "xno"
|
|
then
|
|
case "${F77}" in
|
|
g77|gfortran|mpigfortran|mpif77)
|
|
FFLAGS="-O2"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
FFLAGS="$FFLAGS -fopenmp"
|
|
fi
|
|
;;
|
|
ifort|mpiifort)
|
|
FFLAGS="-O2"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
FFLAGS="$FFLAGS -openmp"
|
|
fi
|
|
;;
|
|
pgf77|mpipgf77)
|
|
FFLAGS="-fast"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
FFLAGS="$FFLAGS -mp"
|
|
fi
|
|
;;
|
|
f77|f90|xlf|xlf_r|mpxlf|mpixlf77|mpixlf77_r)
|
|
FFLAGS="-O2"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
FFLAGS="$FFLAGS -qsmp=omp"
|
|
fi
|
|
;;
|
|
kf77|mpikf77)
|
|
FFLAGS="-fast +K3"
|
|
;;
|
|
*)
|
|
FFLAGS="-O"
|
|
;;
|
|
esac
|
|
fi])
|
|
|
|
dnl **********************************************************************
|
|
dnl * AC_HYPRE_DEBUG_FLAGS
|
|
dnl *
|
|
dnl * Set compile FLAGS for debug
|
|
dnl **********************************************************************
|
|
AC_DEFUN([AC_HYPRE_DEBUG_FLAGS],
|
|
[AC_PREREQ(2.57)dnl
|
|
|
|
if test "x${hypre_user_chose_cflags}" = "xno"
|
|
then
|
|
case "${CC}" in
|
|
gcc|mpigcc|mpicc)
|
|
CFLAGS="-g -Wall"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CFLAGS="$CFLAGS -fopenmp"
|
|
LDFLAGS="$LDFLAGS -fopenmp"
|
|
fi
|
|
;;
|
|
icc|mpiicc)
|
|
CFLAGS="-g"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CFLAGS="$CFLAGS -openmp"
|
|
LDFLAGS="$LDFLAGS -openmp"
|
|
fi
|
|
;;
|
|
pgcc|mpipgcc)
|
|
CFLAGS="-g"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CFLAGS="$CFLAGS -mp"
|
|
LDFLAGS="$LDFLAGS -mp"
|
|
fi
|
|
;;
|
|
cc|xlc|mpxlc|mpixlc|mpcc)
|
|
CFLAGS="-g"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CFLAGS="$CFLAGS -qsmp=omp"
|
|
LDFLAGS="$LDFLAGS -qsmp=omp"
|
|
fi
|
|
;;
|
|
KCC|mpiKCC)
|
|
CFLAGS="--c -g +K3"
|
|
;;
|
|
*)
|
|
CFLAGS="-g"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if test "x${hypre_user_chose_cxxflags}" = "xno"
|
|
then
|
|
case "${CXX}" in
|
|
g++|gCC|mpig++|mpicxx|mpiCC)
|
|
CXXFLAGS="-g -Wall"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CXXFLAGS="$CXXFLAGS -fopenmp"
|
|
fi
|
|
;;
|
|
icpc|icc|mpiicpc|mpiicc)
|
|
CXXFLAGS="-g"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CXXFLAGS="$CXXFLAGS -openmp"
|
|
fi
|
|
;;
|
|
pgCC|mpipgCC)
|
|
CXXFLAGS="-g"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CXXFLAGS="$CXXFLAGS -mp"
|
|
fi
|
|
;;
|
|
CC|cxx|xlC|mpxlC|mpixlcxx|mpCC)
|
|
CXXFLAGS="-g"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
CXXFLAGS="$CXXFLAGS -qsmp=omp"
|
|
fi
|
|
;;
|
|
KCC|mpiKCC)
|
|
CXXFLAGS="-g +K3"
|
|
;;
|
|
*)
|
|
CXXFLAGS="-g"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if test "x${hypre_user_chose_fflags}" = "xno"
|
|
then
|
|
case "${F77}" in
|
|
g77|gfortran|mpigfortran|mpif77)
|
|
FFLAGS="-g -Wall"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
FFLAGS="$FFLAGS -fopenmp"
|
|
fi
|
|
;;
|
|
ifort|mpiifort)
|
|
FFLAGS="-g"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
FFLAGS="$FFLAGS -openmp"
|
|
fi
|
|
;;
|
|
pgf77|mpipgf77)
|
|
FFLAGS="-g"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
FFLAGS="$FFLAGS -mp"
|
|
fi
|
|
;;
|
|
f77|f90|xlf|mpxlf|mpixlf77)
|
|
FFLAGS="-g"
|
|
if test "$hypre_using_openmp" = "yes" ; then
|
|
FFLAGS="$FFLAGS -qsmp=omp"
|
|
fi
|
|
;;
|
|
kf77|mpikf77)
|
|
FFLAGS="-g +K3"
|
|
;;
|
|
*)
|
|
FFLAGS="-g"
|
|
;;
|
|
esac
|
|
fi])
|
|
|
|
dnl **********************************************************************
|
|
dnl * AC_HYPRE_SET_ARCH
|
|
dnl * Defines the architecture of the platform on which the code is to run.
|
|
dnl * Cross-compiling is indicated by the host and build platforms being
|
|
dnl * different values, which are usually user supplied on the command line.
|
|
dnl * When cross-compiling is detected the values supplied will be used
|
|
dnl * directly otherwise the needed values will be determined as follows:
|
|
dnl *
|
|
dnl * Find the hostname and assign it to an exported macro $HOSTNAME.
|
|
dnl * Guesses a one-word name for the current architecture, unless ARCH
|
|
dnl * has been preset. This is an alternative to the built-in macro
|
|
dnl * AC_CANONICAL_HOST, which gives a three-word name. Uses the utility
|
|
dnl * 'tarch', which is a Bourne shell script that should be in the same
|
|
dnl * directory as the configure script. If tarch is not present or if it
|
|
dnl * fails, ARCH is set to the value, if any, of shell variable HOSTTYPE,
|
|
dnl * otherwise ARCH is set to "unknown".
|
|
dnl **********************************************************************
|
|
|
|
AC_DEFUN([AC_HYPRE_SET_ARCH],
|
|
[
|
|
if test $host_alias = $build_alias
|
|
then
|
|
|
|
AC_MSG_CHECKING(the hostname)
|
|
hypre_hostname=hostname
|
|
HOSTNAME="`$hypre_hostname`"
|
|
|
|
dnl * if $HOSTNAME is still empty, give it the value "unknown".
|
|
if test -z "$HOSTNAME"
|
|
then
|
|
HOSTNAME=unknown
|
|
AC_MSG_WARN(hostname is unknown)
|
|
else
|
|
AC_MSG_RESULT($HOSTNAME)
|
|
fi
|
|
|
|
AC_MSG_CHECKING(the architecture)
|
|
|
|
dnl * the environment variable $ARCH may already be set; if so use its
|
|
dnl * value, otherwise go through this procedure
|
|
if test -z "$ARCH"; then
|
|
|
|
dnl * search for the tool "tarch". It should be in the same
|
|
dnl * directory as configure.in, but a couple of other places will
|
|
dnl * be checked. hypre_tarch stores a relative path for "tarch".
|
|
hypre_tarch_dir=
|
|
for hypre_dir in $srcdir $srcdir/.. $srcdir/../.. $srcdir/config; do
|
|
if test -f $hypre_dir/tarch; then
|
|
hypre_tarch_dir=$hypre_dir
|
|
hypre_tarch=$hypre_tarch_dir/tarch
|
|
break
|
|
fi
|
|
done
|
|
|
|
dnl * if tarch was not found or doesn't work, try using env variable
|
|
dnl * $HOSTTYPE
|
|
if test -z "$hypre_tarch_dir"; then
|
|
AC_MSG_WARN(cannot find tarch, using \$HOSTTYPE as the architecture)
|
|
HYPRE_ARCH=$HOSTTYPE
|
|
else
|
|
HYPRE_ARCH="`$hypre_tarch`"
|
|
|
|
if test -z "$HYPRE_ARCH" || test "$HYPRE_ARCH" = "unknown"; then
|
|
HYPRE_ARCH=$HOSTTYPE
|
|
fi
|
|
fi
|
|
|
|
dnl * if $HYPRE_ARCH is still empty, give it the value "unknown".
|
|
if test -z "$HYPRE_ARCH"; then
|
|
HYPRE_ARCH=unknown
|
|
AC_MSG_WARN(architecture is unknown)
|
|
else
|
|
AC_MSG_RESULT($HYPRE_ARCH)
|
|
fi
|
|
else
|
|
HYPRE_ARCH = $ARCH
|
|
AC_MSG_RESULT($HYPRE_ARCH)
|
|
fi
|
|
|
|
else
|
|
HYPRE_ARCH=$host_alias
|
|
HOSTNAME=unknown
|
|
fi
|
|
dnl *
|
|
dnl * define type of architecture
|
|
case $HYPRE_ARCH in
|
|
alpha)
|
|
AC_DEFINE(HYPRE_ALPHA)
|
|
;;
|
|
sun* | solaris*)
|
|
AC_DEFINE(HYPRE_SOLARIS)
|
|
;;
|
|
hp* | HP*)
|
|
AC_DEFINE(HYPRE_HPPA)
|
|
;;
|
|
rs6000 | RS6000 | *bgl* | *BGL* | ppc64*)
|
|
AC_DEFINE(HYPRE_RS6000)
|
|
;;
|
|
IRIX64)
|
|
AC_DEFINE(HYPRE_IRIX64)
|
|
;;
|
|
Linux | linux | LINUX)
|
|
if test -r /etc/home.config
|
|
then
|
|
systemtype=`grep ^SYS_TYPE /etc/home.config | cut -d" " -f2`
|
|
case $systemtype in
|
|
chaos*)
|
|
AC_DEFINE(HYPRE_LINUX_CHAOS)
|
|
;;
|
|
*)
|
|
AC_DEFINE(HYPRE_LINUX)
|
|
;;
|
|
esac
|
|
else
|
|
AC_DEFINE(HYPRE_LINUX)
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
dnl *
|
|
dnl * return architecture and host name values
|
|
AC_SUBST(HYPRE_ARCH)
|
|
AC_SUBST(HOSTNAME)
|
|
|
|
])dnl
|