1
1
openmpi/config/opal_check_ofi.m4
Jeff Squyres 21bc9042e1 mtl/ofi: check for FI_LOCAL_COMM+FI_REMOTE_COMM
Make sure to get an RDM provider that can provide both local and
remote communication.  We need this check because some providers could
be selected via RXD or RXM, but can't provide local communication, for
example.

Add OPAL_CHECK_OFI_VERSION_GE() m4 macro to check that the Libfabric
we're building against is >= a target version.  Use this check in two
places:

1. MTL/OFI: Make sure it is >= v1.5, because the FI_LOCAL_COMM /
   FI_REMOTE_COMM constants were introduced in Libfabric API v1.5.
2. BTL/usnic: It already had similar configury to check for Libfabric
   >= v1.1, but the usnic component was checking for >= v1.3.  So
   update the btl/usnic configury to use the new macro and check for
   >= v1.3.

Signed-off-by: Jeff Squyres <jsquyres@cisco.com>
2020-01-13 08:19:53 -08:00

165 строки
5.8 KiB
Bash

dnl -*- shell-script -*-
dnl
dnl Copyright (c) 2015-2020 Cisco Systems, Inc. All rights reserved.
dnl Copyright (c) 2016-2017 Los Alamos National Security, LLC. All rights
dnl reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
dnl
dnl $HEADER$
dnl
dnl
dnl OPAL_CHECK_OFI_VERSION_GE
dnl
dnl Check that the OFI API version number is >= a specific value.
dnl
dnl $1: version number to compare, in the form of "major,minor"
dnl (without quotes) -- i.e., a single token representing the
dnl arguments to FI_VERSION()
dnl $2: action if OFI API version is >= $1
dnl $3: action if OFI API version is < $1
AC_DEFUN([OPAL_CHECK_OFI_VERSION_GE],[
OPAL_VAR_SCOPE_PUSH([opal_ofi_ver_ge_save_CPPFLAGS opal_ofi_ver_ge_happy])
AC_MSG_CHECKING([if OFI API version number is >= $1])
opal_ofi_ver_ge_save_CPPFLAGS=$CPPFLAGS
CPPFLAGS=$opal_ofi_CPPFLAGS
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <rdma/fabric.h>]],
[[
#if !defined(FI_MAJOR_VERSION)
#error "we cannot check the version -- sad panda"
#elif FI_VERSION_LT(FI_VERSION(FI_MAJOR_VERSION, FI_MINOR_VERSION), FI_VERSION($1))
#error "version is too low -- nopes"
#endif
]])],
[opal_ofi_ver_ge_happy=1],
[opal_ofi_ver_ge_happy=0])
AS_IF([test $opal_ofi_ver_ge_happy -eq 1],
[AC_MSG_RESULT([yes])
$2],
[AC_MSG_RESULT([no])
$3])
CPPFLAGS=$opal_ofi_ver_ge_save_CPPFLAGS
OPAL_VAR_SCOPE_POP
])dnl
dnl
dnl _OPAL_CHECK_OFI
dnl --------------------------------------------------------
dnl Do the real work of checking for OFI libfabric.
dnl Upon return:
dnl
dnl - opal_ofi_happy: will be "yes" or "no"
dnl - opal_ofi_{CPPFLAGS|LDFLAGS|LIBS} will be loaded (if relevant)
dnl
AC_DEFUN([_OPAL_CHECK_OFI],[
# Add --with options
AC_ARG_WITH([libfabric],
[AC_HELP_STRING([--with-libfabric=DIR],
[Deprecated synonym for --with-ofi])])
AC_ARG_WITH([libfabric-libdir],
[AC_HELP_STRING([--with-libfabric-libdir=DIR],
[Deprecated synonym for --with-ofi-libdir])])
AC_ARG_WITH([ofi],
[AC_HELP_STRING([--with-ofi=DIR],
[Specify location of OFI libfabric installation, adding DIR/include to the default search location for libfabric headers, and DIR/lib or DIR/lib64 to the default search location for libfabric libraries. Error if libfabric support cannot be found.])])
AC_ARG_WITH([ofi-libdir],
[AC_HELP_STRING([--with-ofi-libdir=DIR],
[Search for OFI libfabric libraries in DIR])])
if test "$with_ofi" = ""; then
with_ofi=$with_libfabric
fi
if test "$with_ofi_libdir" = ""; then
with_ofi_libdir=$with_libfabric_libdir
fi
# Sanity check the --with values
OPAL_CHECK_WITHDIR([ofi], [$with_ofi],
[include/rdma/fabric.h])
OPAL_CHECK_WITHDIR([ofi-libdir], [$with_ofi_libdir],
[libfabric.*])
OPAL_VAR_SCOPE_PUSH([opal_check_ofi_save_CPPFLAGS opal_check_ofi_save_LDFLAGS opal_check_ofi_save_LIBS])
opal_check_ofi_save_CPPFLAGS=$CPPFLAGS
opal_check_ofi_save_LDFLAGS=$LDFLAGS
opal_check_ofi_save_LIBS=$LIBS
opal_ofi_happy=yes
AS_IF([test "$with_ofi" = "no"],
[opal_ofi_happy=no])
AS_IF([test $opal_ofi_happy = yes],
[AC_MSG_CHECKING([looking for OFI libfabric in])
AS_IF([test "$with_ofi" != "yes"],
[opal_ofi_dir=$with_ofi
AC_MSG_RESULT([($opal_ofi_dir)])],
[AC_MSG_RESULT([(default search paths)])])
AS_IF([test ! -z "$with_ofi_libdir" && \
test "$with_ofi_libdir" != "yes"],
[opal_ofi_libdir=$with_ofi_libdir])
])
AS_IF([test $opal_ofi_happy = yes],
[OPAL_CHECK_PACKAGE([opal_ofi],
[rdma/fabric.h],
[fabric],
[fi_getinfo],
[],
[$opal_ofi_dir],
[$opal_ofi_libdir],
[],
[opal_ofi_happy=no])])
CPPFLAGS=$opal_check_ofi_save_CPPFLAGS
LDFLAGS=$opal_check_ofi_save_LDFLAGS
LIBS=$opal_check_ofi_save_LIBS
AC_SUBST([opal_ofi_CPPFLAGS])
AC_SUBST([opal_ofi_LDFLAGS])
AC_SUBST([opal_ofi_LIBS])
OPAL_SUMMARY_ADD([[Transports]],[[OpenFabrics OFI Libfabric]],[],[$opal_ofi_happy])
OPAL_VAR_SCOPE_POP
AS_IF([test $opal_ofi_happy = no],
[AS_IF([test -n "$with_ofi" && test "$with_ofi" != "no"],
[AC_MSG_WARN([OFI libfabric support requested (via --with-ofi or --with-libfabric), but not found.])
AC_MSG_ERROR([Cannot continue.])])
])
])dnl
dnl
dnl OPAL_CHECK_OFI
dnl --------------------------------------------------------
dnl Check to see if OFI libfabric is available.
dnl
dnl This is a simple wrapper around _OPAL_CHECK_OFI that just
dnl ensures to only run the checks once. We do not use AC_REQUIRE
dnl because that re-orders the texts and makes ordering in stdout
dnl quite confusing / difficult to grok.
dnl
AC_DEFUN([OPAL_CHECK_OFI],[
# Check for OFI libfabric. Note that $opal_ofi_happy is used in
# other configure.m4's to know if OFI/libfabric configured
# successfully. We only need to run the back-end checks once, but
# at least emit a "checking..." statement each subsequent time
# this macro is invoked so that configure's stdout has
# sensible/logical output.
AS_IF([test -z "$opal_ofi_happy"],
[_OPAL_CHECK_OFI],
[AC_MSG_CHECKING([if OFI libfabric is available])
AC_MSG_RESULT([$opal_ofi_happy])])
])