| 1 | dnl -*- mode: autoconf -*- | 
|---|
| 2 | # =========================================================================== | 
|---|
| 3 | #       http://www.gnu.org/software/autoconf-archive/ax_prog_cc_mpi.html | 
|---|
| 4 | # =========================================================================== | 
|---|
| 5 | # | 
|---|
| 6 | # SYNOPSIS | 
|---|
| 7 | # | 
|---|
| 8 | #   AX_PROG_CC_MPI([MPI-WANTED-TEST[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]]) | 
|---|
| 9 | # | 
|---|
| 10 | # DESCRIPTION | 
|---|
| 11 | # | 
|---|
| 12 | #   This macro tries to find out how to compile C programs that use MPI | 
|---|
| 13 | #   (Message Passing Interface), a standard API for parallel process | 
|---|
| 14 | #   communication (see http://www-unix.mcs.anl.gov/mpi/). | 
|---|
| 15 | #   The macro has to be used instead of the standard macro AC_PROG_CC | 
|---|
| 16 | #   and will replace the standard variable CC with the found compiler. | 
|---|
| 17 | # | 
|---|
| 18 | #   MPI-WANTED-TEST is used to test whether MPI is actually wanted by | 
|---|
| 19 | #   the user. If MPI-WANTED_TEST is omitted or if it succeeds, the | 
|---|
| 20 | #   macro will try to find out how to use MPI, if it fails, the macro | 
|---|
| 21 | #   will call AC_PROG_CC to find a standard C compiler instead. | 
|---|
| 22 | # | 
|---|
| 23 | #   When MPI is found, ACTION-IF-FOUND will be executed, if MPI is not | 
|---|
| 24 | #   found (or MPI-WANTED-TEST fails) ACTION-IF-NOT-FOUND is | 
|---|
| 25 | #   executed. If ACTION-IF-FOUND is not set, the macro will define | 
|---|
| 26 | #   HAVE_MPI. | 
|---|
| 27 | # | 
|---|
| 28 | # EXAMPLE | 
|---|
| 29 | # | 
|---|
| 30 | #  # If --with-mpi=auto is used, try to find MPI, but use standard C | 
|---|
| 31 | #  compiler if it is not found. | 
|---|
| 32 | #  # If --with-mpi=yes is used, try to find MPI and fail if it isn't | 
|---|
| 33 | #  # found. | 
|---|
| 34 | #  # If --with-mpi=no is used, use a standard C compiler instead. | 
|---|
| 35 | #  AC_ARG_WITH(mpi, [AS_HELP_STRING([--with-mpi], | 
|---|
| 36 | #      [compile with MPI (parallelization) support. If none is found, | 
|---|
| 37 | #      MPI is not used. Default: auto]) | 
|---|
| 38 | #  ],,[with_mpi=auto]) | 
|---|
| 39 | # | 
|---|
| 40 | #  AX_PROG_CC_MPI([test x"$with_mpi" != xno],[use_mpi=yes],[ | 
|---|
| 41 | #    use_mpi=no | 
|---|
| 42 | #    if test x"$with_mpi" = xyes; then | 
|---|
| 43 | #      AC_MSG_FAILURE([MPI compiler requested, but couldn't use MPI.]) | 
|---|
| 44 | #    else | 
|---|
| 45 | #      AC_MSG_WARN([No MPI compiler found, won't use MPI.]) | 
|---|
| 46 | #    fi | 
|---|
| 47 | #  ]) | 
|---|
| 48 | # | 
|---|
| 49 | # LICENSE | 
|---|
| 50 | # | 
|---|
| 51 | #   Copyright (c) 2010,2011 Olaf Lenz <olenz@icp.uni-stuttgart.de> | 
|---|
| 52 | # | 
|---|
| 53 | #   This program is free software: you can redistribute it and/or modify it | 
|---|
| 54 | #   under the terms of the GNU General Public License as published by the | 
|---|
| 55 | #   Free Software Foundation, either version 3 of the License, or (at your | 
|---|
| 56 | #   option) any later version. | 
|---|
| 57 | # | 
|---|
| 58 | #   This program is distributed in the hope that it will be useful, but | 
|---|
| 59 | #   WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
| 60 | #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General | 
|---|
| 61 | #   Public License for more details. | 
|---|
| 62 | # | 
|---|
| 63 | #   You should have received a copy of the GNU General Public License along | 
|---|
| 64 | #   with this program. If not, see <http://www.gnu.org/licenses/>. | 
|---|
| 65 | # | 
|---|
| 66 | #   As a special exception, the respective Autoconf Macro's copyright owner | 
|---|
| 67 | #   gives unlimited permission to copy, distribute and modify the configure | 
|---|
| 68 | #   scripts that are the output of Autoconf when processing the Macro. You | 
|---|
| 69 | #   need not follow the terms of the GNU General Public License when using | 
|---|
| 70 | #   or distributing such scripts, even though portions of the text of the | 
|---|
| 71 | #   Macro appear in them. The GNU General Public License (GPL) does govern | 
|---|
| 72 | #   all other use of the material that constitutes the Autoconf Macro. | 
|---|
| 73 | # | 
|---|
| 74 | #   This special exception to the GPL applies to versions of the Autoconf | 
|---|
| 75 | #   Macro released by the Autoconf Archive. When you make and distribute a | 
|---|
| 76 | #   modified version of the Autoconf Macro, you may extend this special | 
|---|
| 77 | #   exception to the GPL to apply to your modified version as well. | 
|---|
| 78 |  | 
|---|
| 79 | #serial 1 | 
|---|
| 80 |  | 
|---|
| 81 | AC_DEFUN([AX_PROG_CC_MPI], [ | 
|---|
| 82 | AC_PREREQ(2.50) | 
|---|
| 83 |  | 
|---|
| 84 | # Check for compiler | 
|---|
| 85 | # Needs to be split off into an extra macro to ensure right expansion | 
|---|
| 86 | # order. | 
|---|
| 87 | AC_REQUIRE([_AX_PROG_CC_MPI],[_AX_PROG_CC_MPI([$1])]) | 
|---|
| 88 |  | 
|---|
| 89 | AS_IF([test x"$_ax_prog_cc_mpi_mpi_wanted" = xno], | 
|---|
| 90 | [ _ax_prog_cc_mpi_mpi_found=no ], | 
|---|
| 91 | [ | 
|---|
| 92 | AC_LANG_PUSH([C]) | 
|---|
| 93 | # test whether MPI_Init is available | 
|---|
| 94 | # We do not use AC_SEARCH_LIBS here, as it caches its outcome and | 
|---|
| 95 | # thus disallows corresponding calls in the other AX_PROG_*_MPI | 
|---|
| 96 | # macros. | 
|---|
| 97 | for lib in NONE mpi mpich; do | 
|---|
| 98 | save_LIBS=$LIBS | 
|---|
| 99 | if test x"$lib" = xNONE; then | 
|---|
| 100 | AC_MSG_CHECKING([for function MPI_Init]) | 
|---|
| 101 | else | 
|---|
| 102 | AC_MSG_CHECKING([for function MPI_Init in -l$lib]) | 
|---|
| 103 | LIBS="-l$lib $LIBS" | 
|---|
| 104 | fi | 
|---|
| 105 | AC_LINK_IFELSE([AC_LANG_CALL([],[MPI_Init])], | 
|---|
| 106 | [ _ax_prog_cc_mpi_mpi_found=yes ], | 
|---|
| 107 | [ _ax_prog_cc_mpi_mpi_found=no ]) | 
|---|
| 108 | AC_MSG_RESULT($_ax_prog_cc_mpi_mpi_found) | 
|---|
| 109 | if test "x$_ax_prog_cc_mpi_mpi_found" = "xyes"; then | 
|---|
| 110 | break; | 
|---|
| 111 | fi | 
|---|
| 112 | LIBS=$save_LIBS | 
|---|
| 113 | done | 
|---|
| 114 |  | 
|---|
| 115 | # Check for header | 
|---|
| 116 | AS_IF([test x"$_ax_prog_cc_mpi_mpi_found" = xyes], [ | 
|---|
| 117 | AC_MSG_CHECKING([for mpi.h]) | 
|---|
| 118 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <mpi.h>])], | 
|---|
| 119 | [ AC_MSG_RESULT(yes)], | 
|---|
| 120 | [ AC_MSG_RESULT(no) | 
|---|
| 121 | _ax_prog_cc_mpi_mpi_found=no | 
|---|
| 122 | ]) | 
|---|
| 123 | ]) | 
|---|
| 124 | AC_LANG_POP([C]) | 
|---|
| 125 | ]) | 
|---|
| 126 |  | 
|---|
| 127 | # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: | 
|---|
| 128 | AS_IF([test x"$_ax_prog_cc_mpi_mpi_found" = xyes], [ | 
|---|
| 129 | ifelse([$2],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$2]) | 
|---|
| 130 | : | 
|---|
| 131 | ],[ | 
|---|
| 132 | $3 | 
|---|
| 133 | : | 
|---|
| 134 | ]) | 
|---|
| 135 |  | 
|---|
| 136 | ])dnl AX_PROG_CC_MPI | 
|---|
| 137 |  | 
|---|
| 138 | dnl _AX_PROG_CC_MPI is an internal macro required by AX_PROG_CC_MPI. | 
|---|
| 139 | dnl To ensure the right expansion order, the main function AX_PROG_CC_MPI | 
|---|
| 140 | dnl has to be split into two parts. | 
|---|
| 141 | dnl | 
|---|
| 142 | dnl Known MPI C compilers: | 
|---|
| 143 | dnl  mpicc | 
|---|
| 144 | dnl  mpixlc_r | 
|---|
| 145 | dnl  mpixlc | 
|---|
| 146 | dnl  hcc | 
|---|
| 147 | dnl  mpxlc_r | 
|---|
| 148 | dnl  mpxlc | 
|---|
| 149 | dnl  sxmpicc  NEC SX | 
|---|
| 150 | dnl  mpifcc   Fujitsu | 
|---|
| 151 | dnl  mpgcc | 
|---|
| 152 | dnl  mpcc | 
|---|
| 153 | dnl  cmpicc | 
|---|
| 154 | dnl  cc | 
|---|
| 155 | dnl | 
|---|
| 156 | AC_DEFUN([_AX_PROG_CC_MPI], [ | 
|---|
| 157 | AC_ARG_VAR(MPICC,[MPI C compiler command]) | 
|---|
| 158 | ifelse([$1],,[_ax_prog_cc_mpi_mpi_wanted=yes],[ | 
|---|
| 159 | AC_MSG_CHECKING([whether to compile using MPI]) | 
|---|
| 160 | if $1; then | 
|---|
| 161 | _ax_prog_cc_mpi_mpi_wanted=yes | 
|---|
| 162 | else | 
|---|
| 163 | _ax_prog_cc_mpi_mpi_wanted=no | 
|---|
| 164 | fi | 
|---|
| 165 | AC_MSG_RESULT($_ax_prog_cc_mpi_mpi_wanted) | 
|---|
| 166 | ]) | 
|---|
| 167 | if test x"$_ax_prog_cc_mpi_mpi_wanted" = xyes; then | 
|---|
| 168 | if test -z "$CC" && test -n "$MPICC"; then | 
|---|
| 169 | CC="$MPICC" | 
|---|
| 170 | else | 
|---|
| 171 | AC_CHECK_TOOLS([CC], [mpicc mpixlc_r mpixlc hcc mpxlc_r mpxlc sxmpicc mpifcc mpgcc mpcc cmpicc cc gcc]) | 
|---|
| 172 | fi | 
|---|
| 173 | fi | 
|---|
| 174 | AC_PROG_CC | 
|---|
| 175 | ])dnl _AX_PROG_CC_MPI | 
|---|