Skip to content

configury: revamp ucx detection #4383

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 25, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 78 additions & 67 deletions config/ompi_check_ucx.m4
Original file line number Diff line number Diff line change
Expand Up @@ -20,86 +20,97 @@
# LDFLAGS, LIBS} as needed and runs action-if-found if there is
# support, otherwise executes action-if-not-found
AC_DEFUN([OMPI_CHECK_UCX],[
if test -z "$ompi_check_ucx_happy" ; then
AC_ARG_WITH([ucx],
[AC_HELP_STRING([--with-ucx(=DIR)],
[Build with Unified Communication X library support])])
OPAL_CHECK_WITHDIR([ucx], [$with_ucx], [include/ucp/api/ucp.h])
AC_ARG_WITH([ucx-libdir],
[AC_HELP_STRING([--with-ucx-libdir=DIR],
[Search for Unified Communication X libraries in DIR])])
OPAL_CHECK_WITHDIR([ucx-libdir], [$with_ucx_libdir], [libucp.*])
OPAL_VAR_SCOPE_PUSH([ompi_check_ucx_dir])

AS_IF([test "$with_ucx" != "no"],
[AS_IF([test ! -z "$with_ucx" && test "$with_ucx" != "yes"],
[_x_ac_ucx_dirs="$with_ucx"],
[
PKG_CHECK_MODULES_STATIC([ucx],[ucx],
[_x_ac_ucx_dirs=`$PKG_CONFIG --variable=prefix ucx`],
[_x_ac_ucx_dirs="/usr /usr/local /opt/ucx"])
])
for ompi_check_ucx_dir in $_x_ac_ucx_dirs; do
AS_IF([test ! -z "$with_ucx_libdir" && test "$with_ucx_libdir" != "yes"],
[
ompi_check_ucx_libdir="$with_ucx_libdir"
ompi_check_ucx_extra_libs="-L$ompi_check_ucx_libdir"
],
[AS_IF([test ! -z "$ompi_check_ucx_dir"],
[
ompi_check_ucx_libdir=$ompi_check_ucx_dir/lib
ompi_check_ucx_extra_libs="-L$ompi_check_ucx_libdir"
])])
AS_IF([test -z "$ompi_check_ucx_happy"],
[AC_ARG_WITH([ucx],
[AC_HELP_STRING([--with-ucx(=DIR)],
[Build with Unified Communication X library support])])
OPAL_CHECK_WITHDIR([ucx], [$with_ucx], [include/ucp/api/ucp.h])
AC_ARG_WITH([ucx-libdir],
[AC_HELP_STRING([--with-ucx-libdir=DIR],
[Search for Unified Communication X libraries in DIR])])
OPAL_CHECK_WITHDIR([ucx-libdir], [$with_ucx_libdir], [libucp.*])

ompi_check_ucx_$1_save_CPPFLAGS="$CPPFLAGS"
ompi_check_ucx_$1_save_LDFLAGS="$LDFLAGS"
ompi_check_ucx_$1_save_LIBS="$LIBS"
AS_IF([test "$with_ucx" != "no"],
[AS_IF([test -n "$with_ucx" && test "$with_ucx" != "yes"],
[ompi_check_ucx_dir="$with_ucx"],
[PKG_CHECK_MODULES_STATIC([ucx],[ucx],
[ompi_check_ucx_dir=`$PKG_CONFIG --variable=prefix ucx`
AS_IF([test "$ompi_check_ucx_dir" = "/usr"],
[ompi_check_ucx_dir=])],
[true])])
ompi_check_ucx_happy="no"
AS_IF([test -z "$ompi_check_ucx_dir"],
[OPAL_CHECK_PACKAGE([ompi_check_ucx],
[ucp/api/ucp.h],
[ucp],
[ucp_cleanup],
[],
[],
[],
[ompi_check_ucx_happy="yes"],
[ompi_check_ucx_happy="no"])
AS_IF([test "$ompi_check_ucx_happy" = yes],
[AC_MSG_CHECKING(for UCX version compatibility)
AC_REQUIRE_CPP
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include <uct/api/version.h>]],[[]])],
[ompi_check_ucx_happy="yes"],
[ompi_check_ucx_happy="no"])

OPAL_CHECK_PACKAGE([ompi_check_ucx],
[ucp/api/ucp.h],
[ucp],
[ucp_cleanup],
[$ompi_check_ucx_extra_libs],
[$ompi_check_ucx_dir],
[$ompi_check_ucx_libdir],
[ompi_check_ucx_happy="yes"],
[ompi_check_ucx_happy="no"])
CPPFLAGS="$ompi_check_ucx_$1_save_CPPFLAGS"
LDFLAGS="$ompi_check_ucx_$1_save_LDFLAGS"
LIBS="$ompi_check_ucx_$1_save_LIBS"
AC_MSG_RESULT([$ompi_check_ucx_happy])])
AS_IF([test "$ompi_check_ucx_happy" = "no"],
[ompi_check_ucx_dir=/opt/ucx])])
AS_IF([test "$ompi_check_ucx_happy" != yes],
[AS_IF([test -n "$with_ucx_libdir"],
[ompi_check_ucx_libdir="$with_ucx_libdir"],
[files=`ls $ompi_check_ucx_dir/lib64/libucp.* 2> /dev/null | wc -l`
AS_IF([test "$files" -gt 0],
[ompi_check_ucx_libdir=$ompi_check_ucx_dir/lib64],
[ompi_check_ucx_libdir=$ompi_check_ucx_dir/lib])])

if test "$ompi_check_ucx_happy" = no; then
continue
fi
ompi_check_ucx_$1_save_CPPFLAGS="$CPPFLAGS"
ompi_check_ucx_$1_save_LDFLAGS="$LDFLAGS"
ompi_check_ucx_$1_save_LIBS="$LIBS"

AC_MSG_CHECKING(for UCX version compatibility)
AC_REQUIRE_CPP
old_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS -I$ompi_check_ucx_dir/include"
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include <uct/api/version.h>]],[[]])],
[ompi_ucx_version_ok="yes"],
[ompi_ucx_version_ok="no"])
OPAL_CHECK_PACKAGE([ompi_check_ucx],
[ucp/api/ucp.h],
[ucp],
[ucp_cleanup],
[],
[$ompi_check_ucx_dir],
[$ompi_check_ucx_libdir],
[ompi_check_ucx_happy="yes"],
[ompi_check_ucx_happy="no"])
CPPFLAGS="$ompi_check_ucx_$1_save_CPPFLAGS"
LDFLAGS="$ompi_check_ucx_$1_save_LDFLAGS"
LIBS="$ompi_check_ucx_$1_save_LIBS"

AC_MSG_RESULT([$ompi_ucx_version_ok])
CPPFLAGS=$old_CPPFLAGS
AS_IF([test "$ompi_check_ucx_happy" = yes],
[AC_MSG_CHECKING(for UCX version compatibility)
AC_REQUIRE_CPP
old_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS -I$ompi_check_ucx_dir/include"
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include <uct/api/version.h>]],[[]])],
[ompi_check_ucx_happy="yes"],
[ompi_check_ucx_happy="no"])

AS_IF([test "$ompi_ucx_version_ok" = "no"], [ompi_check_ucx_happy="no"])
AC_MSG_RESULT([$ompi_check_ucx_happy])
CPPFLAGS=$old_CPPFLAGS])])

if test "$ompi_check_ucx_happy" = yes; then
break
fi
done],
[ompi_check_ucx_happy="no"])
OPAL_SUMMARY_ADD([[Transports]],[[Open UCX]],[$1],[$ompi_check_ucx_happy])
fi
OPAL_SUMMARY_ADD([[Transports]],[[Open UCX]],[$1],[$ompi_check_ucx_happy])])])

AS_IF([test "$ompi_check_ucx_happy" = "yes"],
[$1_CPPFLAGS="[$]$1_CPPFLAGS $ompi_check_ucx_CPPFLAGS"
$1_LDFLAGS="[$]$1_LDFLAGS $ompi_check_ucx_LDFLAGS"
$1_LIBS="[$]$1_LIBS $ompi_check_ucx_LIBS"
$2],
$1_LDFLAGS="[$]$1_LDFLAGS $ompi_check_ucx_LDFLAGS"
$1_LIBS="[$]$1_LIBS $ompi_check_ucx_LIBS"
$2],
[AS_IF([test ! -z "$with_ucx" && test "$with_ucx" != "no"],
[AC_MSG_ERROR([UCX support requested but not found. Aborting])])
$3])

OPAL_VAR_SCOPE_POP
])