[Darshan-commits] [Git][darshan/darshan][dev-no-mpi] add new autoconf macro for detecting mpicc

Shane Snyder xgitlab at cels.anl.gov
Thu Dec 5 13:49:24 CST 2019



Shane Snyder pushed to branch dev-no-mpi at darshan / darshan


Commits:
bd164684 by Shane Snyder at 2019-12-05T19:49:10Z
add new autoconf macro for detecting mpicc

- - - - -


1 changed file:

- + maint/config/ax_prog_cc_mpi.m4


Changes:

=====================================
maint/config/ax_prog_cc_mpi.m4
=====================================
@@ -0,0 +1,171 @@
+# ===========================================================================
+#      https://www.gnu.org/software/autoconf-archive/ax_prog_cc_mpi.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PROG_CC_MPI([MPI-WANTED-TEST[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]])
+#
+# DESCRIPTION
+#
+#   This macro tries to find out how to compile C programs that use MPI
+#   (Message Passing Interface), a standard API for parallel process
+#   communication (see http://www-unix.mcs.anl.gov/mpi/). The macro has to
+#   be used instead of the standard macro AC_PROG_CC and will replace the
+#   standard variable CC with the found compiler.
+#
+#   MPI-WANTED-TEST is used to test whether MPI is actually wanted by the
+#   user. If MPI-WANTED_TEST is omitted or if it succeeds, the macro will
+#   try to find out how to use MPI, if it fails, the macro will call
+#   AC_PROG_CC to find a standard C compiler instead.
+#
+#   When MPI is found, ACTION-IF-FOUND will be executed, if MPI is not found
+#   (or MPI-WANTED-TEST fails) ACTION-IF-NOT-FOUND is executed. If
+#   ACTION-IF-FOUND is not set, the macro will define HAVE_MPI.
+#
+#   The following example demonstrates usage of the macro:
+#
+#     # If --with-mpi=auto is used, try to find MPI, but use standard C compiler if it is not found.
+#     # If --with-mpi=yes is used, try to find MPI and fail if it isn't found.
+#     # If --with-mpi=no is used, use a standard C compiler instead.
+#     AC_ARG_WITH(mpi, [AS_HELP_STRING([--with-mpi],
+#         [compile with MPI (parallelization) support. If none is found,
+#         MPI is not used. Default: auto])
+#     ],,[with_mpi=auto])
+#     #
+#     AX_PROG_CC_MPI([test x"$with_mpi" != xno],[use_mpi=yes],[
+#       use_mpi=no
+#       if test x"$with_mpi" = xyes; then
+#         AC_MSG_FAILURE([MPI compiler requested, but couldn't use MPI.])
+#       else
+#         AC_MSG_WARN([No MPI compiler found, won't use MPI.])
+#       fi
+#     ])
+#
+# LICENSE
+#
+#   Copyright (c) 2010,2011 Olaf Lenz <olenz at icp.uni-stuttgart.de>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 2
+
+AC_DEFUN([AX_PROG_CC_MPI], [
+AC_PREREQ(2.50)
+
+# Check for compiler
+# Needs to be split off into an extra macro to ensure right expansion
+# order.
+AC_REQUIRE([_AX_PROG_CC_MPI],[_AX_PROG_CC_MPI([$1])])
+
+AS_IF([test x"$_ax_prog_cc_mpi_mpi_wanted" = xno],
+  [ _ax_prog_cc_mpi_mpi_found=no ],
+  [
+    AC_LANG_PUSH([C])
+    # test whether MPI_Init is available
+    # We do not use AC_SEARCH_LIBS here, as it caches its outcome and
+    # thus disallows corresponding calls in the other AX_PROG_*_MPI
+    # macros.
+    for lib in NONE mpi mpich; do
+      save_LIBS=$LIBS
+      if test x"$lib" = xNONE; then
+        AC_MSG_CHECKING([for function MPI_Init])
+      else
+        AC_MSG_CHECKING([for function MPI_Init in -l$lib])
+        LIBS="-l$lib $LIBS"
+      fi
+      AC_LINK_IFELSE([AC_LANG_CALL([],[MPI_Init])],
+        [ _ax_prog_cc_mpi_mpi_found=yes ],
+        [ _ax_prog_cc_mpi_mpi_found=no ])
+      AC_MSG_RESULT($_ax_prog_cc_mpi_mpi_found)
+      if test "x$_ax_prog_cc_mpi_mpi_found" = "xyes"; then
+        break;
+      fi
+      LIBS=$save_LIBS
+    done
+
+    # Check for header
+    AS_IF([test x"$_ax_prog_cc_mpi_mpi_found" = xyes], [
+      AC_MSG_CHECKING([for mpi.h])
+      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <mpi.h>])],
+        [ AC_MSG_RESULT(yes)],
+        [ AC_MSG_RESULT(no)
+         _ax_prog_cc_mpi_mpi_found=no
+      ])
+    ])
+    AC_LANG_POP([C])
+])
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+AS_IF([test x"$_ax_prog_cc_mpi_mpi_found" = xyes], [
+        ifelse([$2],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$2])
+        :
+],[
+        $3
+        :
+])
+
+])dnl AX_PROG_CC_MPI
+
+dnl _AX_PROG_CC_MPI is an internal macro required by AX_PROG_CC_MPI.
+dnl To ensure the right expansion order, the main function AX_PROG_CC_MPI
+dnl has to be split into two parts.
+dnl
+dnl Known MPI C compilers:
+dnl  mpicc
+dnl  mpixlc_r
+dnl  mpixlc
+dnl  hcc
+dnl  mpxlc_r
+dnl  mpxlc
+dnl  sxmpicc  NEC SX
+dnl  mpifcc   Fujitsu
+dnl  mpgcc
+dnl  mpcc
+dnl  cmpicc
+dnl  cc
+dnl
+AC_DEFUN([_AX_PROG_CC_MPI], [
+  AC_ARG_VAR(MPICC,[MPI C compiler command])
+  ifelse([$1],,[_ax_prog_cc_mpi_mpi_wanted=yes],[
+    AC_MSG_CHECKING([whether to compile using MPI])
+    if $1; then
+      _ax_prog_cc_mpi_mpi_wanted=yes
+    else
+      _ax_prog_cc_mpi_mpi_wanted=no
+    fi
+    AC_MSG_RESULT($_ax_prog_cc_mpi_mpi_wanted)
+  ])
+  if test x"$_ax_prog_cc_mpi_mpi_wanted" = xyes; then
+    if test -z "$CC" && test -n "$MPICC"; then
+      CC="$MPICC"
+    else
+      AC_CHECK_TOOLS([CC], [mpicc mpixlc_r mpixlc hcc mpxlc_r mpxlc sxmpicc mpifcc mpgcc mpcc cmpicc cc gcc])
+    fi
+  fi
+  AC_PROG_CC
+])dnl _AX_PROG_CC_MPI



View it on GitLab: https://xgitlab.cels.anl.gov/darshan/darshan/commit/bd16468465e5c5eaae9ad3ad693290913a9066ff

-- 
View it on GitLab: https://xgitlab.cels.anl.gov/darshan/darshan/commit/bd16468465e5c5eaae9ad3ad693290913a9066ff
You're receiving this email because of your account on xgitlab.cels.anl.gov.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/darshan-commits/attachments/20191205/21ab1d0a/attachment-0001.html>


More information about the Darshan-commits mailing list