From afb7eb798fdba18b5a2942a5e88ac796de072d6d Mon Sep 17 00:00:00 2001 From: "Peter W. Draper" <p.w.draper@durham.ac.uk> Date: Wed, 10 Jun 2015 13:25:13 +0100 Subject: [PATCH] Add MPI and METIS support, neither is enabled by default For future requirements --- configure.ac | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/configure.ac b/configure.ac index 3ec22c1..1b3e241 100644 --- a/configure.ac +++ b/configure.ac @@ -45,6 +45,59 @@ LT_INIT AX_COMPILER_VENDOR AX_COMPILER_VERSION +# Check for MPI. Need to do this before characterising the compiler (C99 mode), +# as this changes the compiler. +# We should consider using AX_PROG_CC_MPI to replace AC_PROG_CC when compiling +# whole applications. There are issues with mixing compilers when using this +# macro. See +# http://lists.gnu.org/archive/html/autoconf-archive-maintainers/2011-05/msg00004.html. +AC_ARG_ENABLE([mpi], + [AS_HELP_STRING([--enable-mpi], + [Compile with functionality for distributed-memory parallelism using MPI @<:@default=yes@:>@] + )], + [enable_mpi="$enableval"], + [enable_mpi="no"] +) +if test "$enable_mpi" = "yes"; then + AX_MPI([CC="$MPICC" AC_DEFINE(HAVE_MPI, 1, [Define if you have the MPI library.]) ]) + + # Various MPI implementations require additional libraries when also using + # threads. Use mpirun (on PATH) as that seems to be only command with + # version flag. + AC_PATH_PROG([MPIRUN],[mpirun],[notfound]) + if test "$MPIRUN" = "notfound"; then + AC_MSG_WARN([Cannot find mpirun command on PATH, thread support may not be correct]) + else + # Special options we know about. + # Intel: -mt_mpi + # PLATFORM: -lmtmpi + # OpenMPI: nothing, but library should be built correctly. + # Set MPI_THREAD_LIBS and add to linker commands as necessary. + AC_MSG_CHECKING([MPI threads options]) + version=`$MPIRUN -version 2>&1` + case "$version" in + *Intel*MPI*) + MPI_THREAD_LIBS="-mt_mpi" + AC_MSG_RESULT([Intel MPI]) + ;; + *Platform*) + MPI_THREAD_LIBS="-lmtmpi" + AC_MSG_RESULT([PLATFORM MPI]) + ;; + *"Open MPI"*) + MPI_THREAD_LIBS="" + AC_MSG_RESULT([Open MPI]) + ;; + *) + MPI_THREAD_LIBS="" + AC_MSG_RESULT([unknown]) + ;; + esac + AC_SUBST([MPI_THREAD_LIBS]) + fi +fi +AM_CONDITIONAL([HAVEMPI],[test -n "$MPICC"]) + # Need C99 and inline support. AC_PROG_CC_C99 AC_C_INLINE @@ -125,6 +178,29 @@ else AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled]) fi +# Check for metis. Note AX_LIB_METIS exists, but cannot be configured +# to be default off (i.e. given no option it tries to locate METIS), so we +# don't use that. +AC_ARG_WITH([metis], + [AS_HELP_STRING([--with-metis=PATH], + [prefix where the metis library is installed @<:@default=yes@:>@] + )], + [], + [with_metis="no"] +) +if test "x$with_metis" != "xno"; then + if test "x$with_metis" != "xyes" -a "x$with_metis" != "x"; then + METIS_LIBS="-L$with_metis -lmetis" + else + METIS_LIBS="-lmetis" + fi + AC_CHECK_LIB([metis],[METIS_PartGraphKway], + AC_DEFINE([HAVE_METIS],1,[The metis library appears to be present.]), + AC_MSG_ERROR(something is wrong with the metis library!),$METIS_LIBS) +fi +AC_SUBST([METIS_LIBS]) +AM_CONDITIONAL([HAVEMETIS],[test -n "$METIS_LIBS"]) + # Check for timing functions needed by cycle.h AC_C_INLINE AC_HEADER_TIME @@ -164,7 +240,9 @@ AC_MSG_RESULT([ vendor: $ax_cv_c_compiler_vendor version: $ax_cv_c_compiler_version flags: $CFLAGS + MPI enabled: $enable_mpi OpenMP enabled: $enable_openmp + Metis enabled: $with_metis ]) # generate output. -- GitLab