Skip to content
Snippets Groups Projects
Commit 932ace8f authored by Robert Klöfkorn's avatar Robert Klöfkorn
Browse files

Changed header check and mpi check. Now parallel version has to use mpiCC

and flags. This is more flexible.


git-svn-id: https://dune.mathematik.uni-freiburg.de/svn/alugrid/trunk@338 0d966ed9-3843-0410-af09-ebfb50bd7c74
parent 5f7e2985
No related branches found
No related tags found
No related merge requests found
dnl Available from the GNU Autoconf Macro Archive at:
dnl http://www.gnu.org/software/ac-archive/htmldoc/acx_mpi.html
dnl
# see autoconf macro archive http://autoconf-archive.cryp.to/
AC_DEFUN([ACX_MPI], [
AC_PREREQ(2.50) dnl for AC_LANG_CASE
AC_LANG_CASE([C], [
AC_REQUIRE([AC_PROG_CC])
AC_ARG_VAR(MPICC,[MPI C compiler command])
AC_CHECK_PROGS(MPICC, mpicc hcc mpcc mpcc_r mpxlc, $CC)
acx_mpi_save_CC="$CC"
CC="$MPICC"
AC_SUBST(MPICC)
AC_REQUIRE([AC_PROG_CC])
AC_ARG_VAR(MPICC,[MPI C compiler command])
AC_CHECK_PROGS(MPICC, mpicc hcc mpcc mpcc_r mpxlc cmpicc, $CC)
acx_mpi_save_CC="$CC"
CC="$MPICC"
AC_SUBST(MPICC)
],
[C++], [
AC_REQUIRE([AC_PROG_CXX])
AC_ARG_VAR(MPICXX,[MPI C++ compiler command])
AC_CHECK_PROGS(MPICXX, mpicxx mpiCC mpCC, $CXX)
acx_mpi_save_CXX="$CXX"
CXX="$MPICXX"
AC_SUBST(MPICXX)
AC_REQUIRE([AC_PROG_CXX])
AC_ARG_VAR(MPICXX,[MPI C++ compiler command])
AC_CHECK_PROGS(MPICXX, mpic++ mpiCC mpCC hcp mpxlC mpxlC_r cmpic++, $CXX)
acx_mpi_save_CXX="$CXX"
CXX="$MPICXX"
AC_SUBST(MPICXX)
],
[Fortran 77], [
AC_REQUIRE([AC_PROG_F77])
AC_ARG_VAR(MPIF77,[MPI Fortran compiler command])
AC_CHECK_PROGS(MPIF77, mpif77 hf77 mpxlf mpf77 mpif90 mpf90 mpxlf90 mpxlf95 mpxlf_r, $F77)
acx_mpi_save_F77="$F77"
F77="$MPIF77"
AC_SUBST(MPIF77)
AC_REQUIRE([AC_PROG_F77])
AC_ARG_VAR(MPIF77,[MPI Fortran compiler command])
AC_CHECK_PROGS(MPIF77, mpif77 hf77 mpxlf mpf77 mpif90 mpf90 mpxlf90 mpxlf95 mpxlf_r cmpifc cmpif90c, $F77)
acx_mpi_save_F77="$F77"
F77="$MPIF77"
AC_SUBST(MPIF77)
])
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)])])
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"])
AC_CHECK_LIB(mpi, MPI_Init, [MPILIBS="-lmpi"])
fi
if test x = x"$MPILIBS"; then
AC_CHECK_LIB(mpich, MPI_Init, [MPILIBS="-lmpich"])
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)])
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)])
AC_MSG_CHECKING([for mpi.h])
AC_TRY_COMPILE([#include <mpi.h>],[],[AC_MSG_RESULT(yes)], [MPILIBS=""
AC_MSG_RESULT(no)])
fi])
AC_LANG_CASE([C], [CC="$acx_mpi_save_CC"],
[C++], [CXX="$acx_mpi_save_CXX"],
[Fortran 77], [F77="$acx_mpi_save_F77"])
[C++], [CXX="$acx_mpi_save_CXX"],
[Fortran 77], [F77="$acx_mpi_save_F77"])
AC_SUBST(MPILIBS)
......@@ -71,3 +70,4 @@ else
:
fi
])dnl ACX_MPI
# this meta-check calls everything needed for Dune to work and all
# possible components. Applications should use this so that
# Dune-updates enable new features automagically
# the entries are more or less copied from an "autoscan"-run in the
# dune-directory
# check for thing needed to compile the ALU-Grid library.
AC_DEFUN([ALU3D_CHECK_ALL],[
AC_LANG_PUSH([C++])
dnl check for programs
AC_REQUIRE([ALU3D_CHECK_COMPILER])
AC_REQUIRE([AC_PROG_CXX])
AC_REQUIRE([AC_PROG_CPP])
AC_REQUIRE([AC_PROG_CXXCPP])
AC_REQUIRE([AC_PROG_INSTALL])
AC_REQUIRE([AC_PROG_LN_S])
AC_REQUIRE([AC_PROG_MAKE_SET])
......@@ -30,7 +28,7 @@ dnl check for library functions
AC_LANG_PUSH([C++])
AC_CHECK_LIB([m], [pow])
AC_CHECK_FUNCS([sqrt strchr])
AC_LANG_POP([C++])
AC_LANG_POP
dnl check all components
AC_REQUIRE([ALU3D_PATH_METIS])
......@@ -41,22 +39,30 @@ dnl check all components
AC_SUBST(ALL_PKG_LIBS, "$LIBS $ALU3D_PKG_LIBS")
AC_SUBST(ALL_PKG_LDFLAGS, "$LDFLAGS $ALU3D_PKG_LDFLAGS")
AC_SUBST(ALL_PKG_CPPFLAGS, "$CPPFLAGS $ALU3D_PKG_CPPFLAGS")
AC_LANG_POP([C++])
])
AC_DEFUN([ALU3D_SUMMARY_ALL],[
# show search results
echo
echo "Found the following components for ALU3d-Grid (parallel) : "
if test x$with_parallel = xnone ; then
echo "ALU3d-Grid is not ready to compile for computations!"
else
echo "ALU3d-Grid is ready to compile for $with_parallel computations!"
fi
if test x$with_parallel = xparallel ; then
echo
echo "-----------------------------"
echo The following components where found:
echo "------------------------------------"
echo
echo "METIS............: $with_metis"
echo "PARTY............: $with_party"
echo "MPI..............: $with_parallel"
echo "MPI..............: $with_mpi"
echo
echo "-----------------------------"
echo "------------------------------------"
fi
echo
echo "See ./configure --help and config.log for reasons why a component wasn't found"
echo
......
......@@ -3,8 +3,9 @@
AC_DEFUN([ALU3D_SERIAL_PARALLEL],[
AC_PREREQ(2.50) dnl for AC_LANG_CASE
with_mpi="no"
# implicitly sets the HAVE_MPI-define and the MPICXX-substitution
ACX_MPI()
ACX_MPI([with_mpi="yes"])
# get compilation script
AC_LANG_CASE([C],[
......@@ -14,38 +15,36 @@ AC_DEFUN([ALU3D_SERIAL_PARALLEL],[
MPICOMP="$MPICXX"
])
with_parallel="no"
REM_CPPFLAGS=$CPPFLAGS
ALU3D_INC_FLAG_PARA="-I./src -I./src/serial -I./src/parallel -I./src/duneinterface $MPI_CPPFLAGS"
REM_CXXFLAGS=$CXXFLAGS
ALU3D_INC_FLAG_PARA="-I./src -I./src/serial -I./src/parallel -I./src/duneinterface"
CXXFLAGS="$CPPFLAGS $ALU3D_INC_FLAG_PARA"
CPPFLAGS="$CPPFLAGS $ALU3D_INC_FLAG_PARA"
with_parallel="none"
with_serial="no"
AC_LANG_PUSH([C++])
AC_CHECK_HEADER([alu3dgrid_serial.h],[with_serial="yes"],
AC_MSG_WARN([alu3dgrid_serial.h could not be found or compiled!])
)
AC_MSG_CHECKING([serial ALUGrid usability])
AC_MSG_RESULT([$with_serial])
AC_LANG_PUSH([C++])
AC_CHECK_HEADER([alu3dgrid_parallel.h],[with_parallel="yes"],
AC_MSG_WARN([alu3dgrid_parallel.h could not be found or compiled!])
)
# set flags
AC_MSG_CHECKING([parallel ALUGrid usability])
if test x$with_parallel != xno ; then
AC_SUBST(MPI_CPPFLAGS, $MPI_CPPFLAGS)
AC_SUBST(MPI_LDFLAGS, $MPI_LDFLAGS)
else
AC_SUBST(MPI_CPPFLAGS, "")
AC_SUBST(MPI_LDFLAGS, "")
if test x$with_serial != xno ; then
with_parallel="serial"
if test x$with_mpi != xno ; then
AC_CHECK_HEADER([alu3dgrid_parallel.h],[with_parallel="parallel"],
AC_MSG_WARN([alu3dgrid_parallel.h could not be found or compiled!
Maybe you should use < $MPICXX > instead of < $CXX > !!])
)
fi
fi
AC_MSG_CHECKING([for which type of run mode ALU-Grid can be used])
AC_MSG_RESULT([$with_parallel])
AC_LANG_POP
CPPFLAGS="$REM_CPPFLAGS"
CXXFLAGS="$REM_CXXFLAGS"
REM_CPPFLAGS=
AM_CONDITIONAL(MPI, test x$with_parallel != xno)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment