1
1

ofi: revamp OPAL_CHECK_OFI configury

Update the OPAL_CHECK_OFI configury macro:

- Make it safe to call the macro multiple times:
  - The checks only execute the first time it is invoked
  - Subsequent invocations, it just emits a friendly "checking..."
    message so that configure output is sensible/logical
- With the goal of ultimately removing opal/mca/common/ofi, rename the
  output variables from OPAL_CHECK_OFI to be
  opal_ofi_{happy|CPPFLAGS|LDFLAGS|LIBS}.
- Update btl/ofi, btl/usnic, and mtl/ofi for these new conventions.
- Also, don't use AC_REQUIRE to invoke OPAL_CHECK_OFI because that
  causes the macro to be invoked at a fairly random time, which makes
  configure stdout confusing / hard to grok.
- Remove a little left-over kruft in OPAL_CHECK_OFI, too (which
  resulted in an indenting change, making the change to
  opal_check_ofi.m4 look larger than it really is).

Thanks Alastair McKinstry for the report and initial fix.
Thanks Rashika Kheria for the reminder.

Signed-off-by: Jeff Squyres <jsquyres@cisco.com>
Этот коммит содержится в:
Jeff Squyres 2019-01-29 13:10:26 +09:00
родитель b556cabfe9
Коммит f5e1a672cc
7 изменённых файлов: 140 добавлений и 122 удалений

Просмотреть файл

@ -1,6 +1,6 @@
dnl -*- shell-script -*-
dnl
dnl Copyright (c) 2015-2016 Cisco Systems, Inc. All rights reserved.
dnl Copyright (c) 2015-2019 Cisco Systems, Inc. All rights reserved.
dnl Copyright (c) 2016-2017 Los Alamos National Security, LLC. All rights
dnl reserved.
dnl $COPYRIGHT$
@ -10,102 +10,116 @@ dnl
dnl $HEADER$
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])])
# OPAL_CHECK_OFI(prefix, [action-if-found], [action-if-not-found]
# --------------------------------------------------------
# Check if libfabric support can be found.
#
# Sets prefix_{CPPFLAGS, LDFLAGs, LIBS} as needed and runs
# action-if-found if there is support; otherwise executes
# action-if-not-found.
#
AC_DEFUN([OPAL_CHECK_OFI],[
if test -z "$opal_check_libfabric_happy" ; then
OPAL_VAR_SCOPE_PUSH([opal_check_libfabric_$1_save_CPPFLAGS opal_check_libfabric_$1_save_LDFLAGS opal_check_libfabric_$1_save_LIBS])
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.])])
# 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-libdir],
[AC_HELP_STRING([--with-ofi-libdir=DIR],
[Search for OFI libfabric libraries in DIR])])
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_check_ofi_$1_save_CPPFLAGS=$CPPFLAGS
opal_check_ofi_$1_save_LDFLAGS=$LDFLAGS
opal_check_ofi_$1_save_LIBS=$LIBS
opal_check_ofi_happy=yes
AS_IF([test "$with_ofi" = "no"],
[opal_check_ofi_happy=no])
AS_IF([test $opal_check_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_check_ofi_happy = yes],
[OPAL_CHECK_PACKAGE([opal_check_ofi],
[rdma/fabric.h],
[fabric],
[fi_getinfo],
[],
[$opal_ofi_dir],
[$opal_ofi_libdir],
[],
[opal_check_ofi_happy=no])])
CPPFLAGS=$opal_check_ofi_$1_save_CPPFLAGS
LDFLAGS=$opal_check_ofi_$1_save_LDFLAGS
LIBS=$opal_check_ofi_$1_save_LIBS
OPAL_SUMMARY_ADD([[Transports]],[[OpenFabrics Libfabric]],[$1],[$opal_check_ofi_happy])
OPAL_VAR_SCOPE_POP
if test "$with_ofi" = ""; then
with_ofi=$with_libfabric
fi
if test $opal_check_ofi_happy = yes ; then
$1_CPPFLAGS="[$]$1_CPPFLAGS $opal_check_ofi_CPPFLAGS"
$1_LIBS="[$]$1_LIBS $opal_check_ofi_LIBS"
$1_LDFLAGS="[$]$1_LDFLAGS $opal_check_ofi_LDFLAGS"
AC_SUBST($1_CPPFLAGS)
AC_SUBST($1_LDFLAGS)
AC_SUBST($1_LIBS)
if test "$with_ofi_libdir" = ""; then
with_ofi_libdir=$with_libfabric_libdir
fi
AS_IF([test $opal_check_ofi_happy = yes],
[$2],
# 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.])])
$3])
])
])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])])
])

Просмотреть файл

@ -1,10 +1,12 @@
#
# Copyright (c) 2013-2015 Intel, Inc. All rights reserved
#
# Copyright (c) 2014-2015 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2014-2019 Cisco Systems, Inc. All rights reserved
# Copyright (c) 2017 Los Alamos National Security, LLC. All rights
# reserved.
# Copyright (c) 2017 IBM Corporation. All rights reserved.
# Copyright (c) 2019 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
@ -18,7 +20,7 @@ EXTRA_DIST = post_configure.sh \
MAINTAINERCLEANFILES = \
$(generated_sources)
AM_CPPFLAGS = $(ompi_mtl_ofi_CPPFLAGS) $(opal_common_ofi_CPPFLAGS)
AM_CPPFLAGS = $(opal_ofi_CPPFLAGS)
dist_ompidata_DATA = help-mtl-ofi.txt
@ -73,15 +75,14 @@ mcacomponentdir = $(ompilibdir)
mcacomponent_LTLIBRARIES = $(component_install)
mca_mtl_ofi_la_SOURCES = $(mtl_ofi_sources)
mca_mtl_ofi_la_LDFLAGS = \
$(ompi_mtl_ofi_LDFLAGS) \
$(opal_ofi_LDFLAGS) \
-module -avoid-version
mca_mtl_ofi_la_LIBADD = $(top_builddir)/ompi/lib@OMPI_LIBMPI_NAME@.la \
$(ompi_mtl_ofi_LIBS) \
$(OPAL_TOP_BUILDDIR)/opal/mca/common/ofi/lib@OPAL_LIB_PREFIX@mca_common_ofi.la
$(opal_ofi_LIBS)
noinst_LTLIBRARIES = $(component_noinst)
libmca_mtl_ofi_la_SOURCES = $(mtl_ofi_sources)
libmca_mtl_ofi_la_LDFLAGS = \
$(ompi_mtl_ofi_LDFLAGS) \
$(opal_ofi_LDFLAGS) \
-module -avoid-version
libmca_mtl_ofi_la_LIBADD = $(ompi_mtl_ofi_LIBS)
libmca_mtl_ofi_la_LIBADD = $(opal_ofi_LIBS)

Просмотреть файл

@ -2,7 +2,7 @@
#
# Copyright (c) 2013-2014 Intel, Inc. All rights reserved
#
# Copyright (c) 2014-2015 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2014-2019 Cisco Systems, Inc. All rights reserved
# Copyright (c) 2017 Los Alamos National Security, LLC. All rights
# reserved.
# $COPYRIGHT$
@ -25,10 +25,10 @@ AC_DEFUN([MCA_ompi_mtl_ofi_POST_CONFIG], [
AC_DEFUN([MCA_ompi_mtl_ofi_CONFIG],[
AC_CONFIG_FILES([ompi/mca/mtl/ofi/Makefile])
# ensure we already ran the common OFI/libfabric config
AC_REQUIRE([MCA_opal_common_ofi_CONFIG])
# Check for OFI
OPAL_CHECK_OFI
AS_IF([test "$opal_common_ofi_happy" = "yes"],
AS_IF([test "$opal_ofi_happy" = "yes"],
[$1],
[$2])
])dnl

Просмотреть файл

@ -22,7 +22,7 @@
#dist_opaldata_DATA = help-mpi-btl-ofi.txt
AM_CPPFLAGS = $(opal_common_ofi_CPPFLAGS)
AM_CPPFLAGS = $(opal_ofi_CPPFLAGS)
sources = \
btl_ofi.h \
btl_ofi_component.c \
@ -56,10 +56,11 @@ mcacomponentdir = $(opallibdir)
mcacomponent_LTLIBRARIES = $(component)
mca_btl_ofi_la_SOURCES = $(component_sources)
mca_btl_ofi_la_LDFLAGS = -module -avoid-version \
$(opal_common_ofi_LDFLAGS)
$(opal_ofi_LDFLAGS)
mca_btl_ofi_la_LIBADD = $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la \
$(OPAL_TOP_BUILDDIR)/opal/mca/common/ofi/lib@OPAL_LIB_PREFIX@mca_common_ofi.la
$(opal_ofi_LIBS)
noinst_LTLIBRARIES = $(lib)
libmca_btl_ofi_la_SOURCES = $(lib_sources)
libmca_btl_ofi_la_LDFLAGS = -module -avoid-version $(opal_common_ofi_LDFLAGS)
libmca_btl_ofi_la_LDFLAGS = -module -avoid-version $(opal_ofi_LDFLAGS)
libmca_btl_ofi_la_LIBS = $(opal_ofi_LIBS)

Просмотреть файл

@ -11,7 +11,7 @@
# Copyright (c) 2004-2006 The Regents of the University of California.
# All rights reserved.
# Copyright (c) 2006 QLogic Corp. All rights reserved.
# Copyright (c) 2009 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2009-2019 Cisco Systems, Inc. All rights reserved
# Copyright (c) 2011-2018 Los Alamos National Security, LLC.
# All rights reserved.
# Copyright (c) 2018 Intel, inc. All rights reserved
@ -34,12 +34,13 @@ AC_DEFUN([MCA_opal_btl_ofi_CONFIG],[
AC_CONFIG_FILES([opal/mca/btl/ofi/Makefile])
AC_REQUIRE([MCA_opal_common_ofi_CONFIG])
# Check for OFI
OPAL_CHECK_OFI
opal_btl_ofi_happy=0
AS_IF([test "$opal_common_ofi_happy" = "yes"],
AS_IF([test "$opal_ofi_happy" = "yes"],
[CPPFLAGS_save=$CPPFLAGS
CPPFLAGS="$opal_common_ofi_CPPFLAGS $CPPFLAGS"
CPPFLAGS="$opal_ofi_CPPFLAGS $CPPFLAGS"
AC_CHECK_DECL([FI_MR_VIRT_ADDR], [opal_btl_ofi_happy=1], [],
[#include <rdma/fabric.h>])
CPPFLAGS=$CPPFLAGS_save])

Просмотреть файл

@ -11,7 +11,7 @@
# All rights reserved.
# Copyright (c) 2006 Sandia National Laboratories. All rights
# reserved.
# Copyright (c) 2010-2015 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2010-2019 Cisco Systems, Inc. All rights reserved
# Copyright (c) 2015 Intel, Inc. All rights reserved.
# Copyright (c) 2016-2017 IBM Corporation. All rights reserved.
# Copyright (c) 2017 Los Alamos National Security, LLC. All rights
@ -23,7 +23,7 @@
# $HEADER$
#
AM_CPPFLAGS = -DBTL_IN_OPAL=1 $(opal_common_ofi_CPPFLAGS) -DOMPI_LIBMPI_NAME=\"$(OMPI_LIBMPI_NAME)\"
AM_CPPFLAGS = -DBTL_IN_OPAL=1 $(opal_ofi_CPPFLAGS) -DOMPI_LIBMPI_NAME=\"$(OMPI_LIBMPI_NAME)\"
EXTRA_DIST = README.txt README.test
@ -88,13 +88,18 @@ mcacomponent_LTLIBRARIES = $(component)
mca_btl_usnic_la_SOURCES = $(component_sources)
mca_btl_usnic_la_LDFLAGS = \
$(opal_btl_usnic_LDFLAGS) \
$(opal_ofi_LDFLAGS) \
-module -avoid-version
mca_btl_usnic_la_LIBADD = $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la \
$(OPAL_TOP_BUILDDIR)/opal/mca/common/ofi/lib@OPAL_LIB_PREFIX@mca_common_ofi.la
$(opal_ofi_LIBS)
noinst_LTLIBRARIES = $(lib)
libmca_btl_usnic_la_SOURCES = $(lib_sources)
libmca_btl_usnic_la_LDFLAGS = -module -avoid-version $(opal_btl_usnic_LDFLAGS)
libmca_btl_usnic_la_LDFLAGS = \
$(opal_btl_usnic_LDFLAGS) \
$(opal_ofi_LDFLAGS) \
-module -avoid-version
libmca_btl_usnic_la_LIBADD = $(opal_ofi_LIBS)
if OPAL_BTL_USNIC_BUILD_UNIT_TESTS
usnic_btl_run_tests_CPPFLAGS = \

Просмотреть файл

@ -12,7 +12,7 @@
# All rights reserved.
# Copyright (c) 2006 Sandia National Laboratories. All rights
# reserved.
# Copyright (c) 2010-2017 Cisco Systems, Inc. All rights reserved
# Copyright (c) 2010-2019 Cisco Systems, Inc. All rights reserved
# Copyright (c) 2017 Los Alamos National Security, LLC. All rights
# reserved.
# $COPYRIGHT$
@ -95,21 +95,17 @@ AC_DEFUN([_OPAL_BTL_USNIC_DO_CONFIG],[
AC_MSG_RESULT([$opal_btl_usnic_happy])
])
# The usnic BTL requires OFI libfabric support.
AS_IF([test "$opal_btl_usnic_happy" = "yes"],
[AC_MSG_CHECKING([whether OFI libfabric support is available])
AS_IF([test "$opal_common_ofi_happy" = "yes"],
[opal_btl_usnic_happy=yes],
[opal_btl_usnic_happy=no])
AC_MSG_RESULT([$opal_btl_usnic_happy])
])
[ # The usnic BTL requires OFI libfabric support
OPAL_CHECK_OFI
opal_btl_usnic_happy=$opal_ofi_happy])
# The usnic BTL requires at least OFI libfabric v1.1 (there was a
# critical bug in libfabric v1.0).
AS_IF([test "$opal_btl_usnic_happy" = "yes"],
[AC_MSG_CHECKING([whether OFI libfabric is >= v1.1])
opal_btl_usnic_CPPFLAGS_save=$CPPFLAGS
CPPFLAGS="$opal_common_ofi_CPPFLAGS $CPPFLAGS"
CPPFLAGS="$opal_ofi_CPPFLAGS $CPPFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <rdma/fabric.h>]],
[[
#if !defined(FI_MAJOR_VERSION)
@ -127,7 +123,7 @@ AC_DEFUN([_OPAL_BTL_USNIC_DO_CONFIG],[
# Make sure we can find the OFI libfabric usnic extensions header
AS_IF([test "$opal_btl_usnic_happy" = "yes" ],
[opal_btl_usnic_CPPFLAGS_save=$CPPFLAGS
CPPFLAGS="$opal_common_ofi_CPPFLAGS $CPPFLAGS"
CPPFLAGS="$opal_ofi_CPPFLAGS $CPPFLAGS"
AC_CHECK_HEADER([rdma/fi_ext_usnic.h],
[],
[opal_btl_usnic_happy=no])