1- dnl -* - shell-script -* -
1+ dnl -*- autoconf -*-
22dnl
33dnl Copyright (c) 2015-2020 Cisco Systems, Inc. All rights reserved.
44dnl Copyright (c) 2016-2017 Los Alamos National Security, LLC. All rights
@@ -24,42 +24,55 @@ dnl $3: action if OFI API version is < $1
2424AC_DEFUN ( [ OPAL_CHECK_OFI_VERSION_GE] ,[
2525 OPAL_VAR_SCOPE_PUSH([ opal_ofi_ver_ge_save_CPPFLAGS opal_ofi_ver_ge_happy] )
2626
27- AC_MSG_CHECKING([if OFI API version number is >= $1 ])
28- opal_ofi_ver_ge_save_CPPFLAGS = $CPPFLAGS
29- CPPFLAGS = $opal_ofi_CPPFLAGS
27+ AS_LITERAL_WORD_IF ( [ $1 ] , [ ] , [ m4_fatal ( [ OPAL_CHECK_OFI_VERSION_GE called with non-literal first argument ] ) ] ) dnl
28+ AS_VAR_PUSHDEF ( [ version_cache_var ] , [ opal_ofi_ver_ge_cv_ $1 ] ) dnl
29+ m4_pushdef ( [ version_pretty_print ] , [ m4_translit ( [ $1 ] , [ , ] , [ . ] ) ] ) dnl
3030
31- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[# include <rdma/fabric.h>]],
32- [[
31+ AC_CACHE_CHECK ( [ if OFI API version number is >= version_pretty_print] ,
32+ [ version_cache_var] ,
33+ [ opal_ofi_ver_ge_save_CPPFLAGS=$CPPFLAGS
34+ CPPFLAGS=$opal_ofi_CPPFLAGS
35+
36+ AC_COMPILE_IFELSE ( [ AC_LANG_PROGRAM (
37+ [ [ #include <rdma/fabric.h>
38+ ] ] , [ [
3339#if !defined(FI_MAJOR_VERSION)
3440#error "we cannot check the version -- sad panda"
3541#elif FI_VERSION_LT(FI_VERSION(FI_MAJOR_VERSION, FI_MINOR_VERSION), FI_VERSION($1 ))
3642#error "version is too low -- nopes"
3743#endif
3844] ] ) ] ,
39- [opal_ofi_ver_ge_happy = 1 ],
40- [opal_ofi_ver_ge_happy = 0 ])
45+ [ version_cache_var=yes ] ,
46+ [ version_cache_var=no ] ) ] )
4147
42- AS_IF([test $opal_ofi_ver_ge_happy -eq 1],
43- [AC_MSG_RESULT([yes])
44- $2 ],
45- [AC_MSG_RESULT([no])
46- $3 ])
48+ AS_IF ( [ test "${version_cache_var}" = "yes"] ,
49+ [ $2 ] ,
50+ [ $3 ] )
4751
4852 CPPFLAGS=$opal_ofi_ver_ge_save_CPPFLAGS
4953
54+ m4_popdef ( [ version_pretty_print] )
55+ AS_VAR_POPDEF ( [ version_cache_var] )
5056 OPAL_VAR_SCOPE_POP
5157] ) dnl
5258
53- dnl
54- dnl _OPAL_CHECK_OFI
59+
60+ dnl OPAL_CHECK_OFI(prefix, [action if found], [action if not found])
5561dnl --------------------------------------------------------
5662dnl Do the real work of checking for OFI libfabric.
5763dnl Upon return:
5864dnl
59- dnl - opal_ofi_happy: will be " yes " or " no "
60- dnl - opal_ofi_{CPPFLAGS | LDFLAGS | LIBS} will be loaded (if relevant)
65+ dnl opal_ofi_{CPPFLAGS, LDFLAGS, LIBS} and prefix_{CPPFLAGS, LDFLAGS,
66+ dnl LIBS} will be set as needed.
6167dnl
62- AC_DEFUN([_OPAL_CHECK_OFI],[
68+ dnl This macro intentionally leaks opal_ofi_happy = yes/no as well as
69+ dnl evaluating the action if found / action if not found
70+ dnl
71+ AC_DEFUN ( [ OPAL_CHECK_OFI] ,[
72+ OPAL_VAR_SCOPE_PUSH([ opal_check_ofi_save_CPPFLAGS opal_check_ofi_save_LDFLAGS opal_check_ofi_save_LIBS opal_check_fi_info_pci] )
73+
74+ m4_ifblank ( [ $1 ] , [ m4_fatal ( [ First argument must be set for call to OPAL_CHECK_OFI] ) ] )
75+
6376 # Add --with options
6477 AC_ARG_WITH ( [ libfabric] ,
6578 [ AS_HELP_STRING ( [ --with-libfabric=DIR] ,
@@ -71,58 +84,32 @@ AC_DEFUN([_OPAL_CHECK_OFI],[
7184 AC_ARG_WITH ( [ ofi] ,
7285 [ AS_HELP_STRING ( [ --with-ofi=DIR] ,
7386 [ 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.] ) ] )
74-
7587 AC_ARG_WITH ( [ ofi-libdir] ,
7688 [ AS_HELP_STRING ( [ --with-ofi-libdir=DIR] ,
7789 [ Search for OFI libfabric libraries in DIR] ) ] )
7890
79- if test " $with_ofi " = " " ; then
80- with_ofi=$with_libfabric
81- fi
82-
83- if test " $with_ofi_libdir " = " " ; then
84- with_ofi_libdir=$with_libfabric_libdir
85- fi
91+ AS_IF ( [ test -z "${with_ofi}"] , [ with_ofi=${with_libfabric}] )
92+ AS_IF ( [ test -z "${with_ofi_libdir}"] , [ with_ofi_libdir=${with_libfabric_libdir}] )
8693
87- # Sanity check the --with values
88- OPAL_CHECK_WITHDIR([ofi], [$with_ofi ],
89- [include/rdma/fabric.h])
90- OPAL_CHECK_WITHDIR([ofi-libdir], [$with_ofi_libdir ],
91- [libfabric.* ])
94+ opal_check_ofi_save_CPPFLAGS=${CPPFLAGS}
95+ opal_check_ofi_save_LDFLAGS=${LDFLAGS}
96+ opal_check_ofi_save_LIBS=${LIBS}
9297
93- OPAL_VAR_SCOPE_PUSH([opal_check_ofi_save_CPPFLAGS opal_check_ofi_save_LDFLAGS opal_check_ofi_save_LIBS opal_check_fi_info_pci])
94- opal_check_ofi_save_CPPFLAGS=$CPPFLAGS
95- opal_check_ofi_save_LDFLAGS=$LDFLAGS
96- opal_check_ofi_save_LIBS=$LIBS
9798 opal_check_fi_info_pci=0
9899
99- opal_ofi_happy=yes
100- AS_IF([test " $with_ofi " = " no" ],
101- [opal_ofi_happy= no])
102-
103- AS_IF([test $opal_ofi_happy = yes],
104- [AC_MSG_CHECKING([looking for OFI libfabric in])
105- AS_IF([test " $with_ofi " != " yes" ],
106- [opal_ofi_dir= $with_ofi
107- AC_MSG_RESULT([($opal_ofi_dir )])],
108- [AC_MSG_RESULT([(default search paths)])])
109- AS_IF([test ! -z " $with_ofi_libdir " && \
110- test " $with_ofi_libdir " != " yes" ],
111- [opal_ofi_libdir= $with_ofi_libdir ])
112- ])
100+ dnl OMPI has used ofi everywhere for some time, but the pkg-config
101+ dnl module name is libfabric. Easier to set the pkg-config module
102+ dnl name explicitly than change everything in OMPI.
103+ m4_define ( [ ofi_pkgconfig_module] , [ libfabric] )
104+ OAC_CHECK_PACKAGE([ ofi] ,
105+ [ $1 ] ,
106+ [ rdma/fabric.h] ,
107+ [ fabric] ,
108+ [ fi_getinfo] ,
109+ [ opal_ofi_happy=yes] ,
110+ [ opal_ofi_happy=no] )
113111
114- AS_IF([test $opal_ofi_happy = yes],
115- [OPAL_CHECK_PACKAGE([opal_ofi],
116- [rdma/fabric.h],
117- [fabric],
118- [fi_getinfo],
119- [],
120- [$opal_ofi_dir ],
121- [$opal_ofi_libdir ],
122- [],
123- [opal_ofi_happy= no])])
124-
125- CPPFLAGS=" $CPPFLAGS $opal_ofi_CPPFLAGS "
112+ OPAL_FLAGS_APPEND_UNIQ([ CPPFLAGS] , [ ${$1 _CPPFLAGS}] )
126113
127114 AS_IF ( [ test $opal_ofi_happy = yes] ,
128115 [ AC_CHECK_HEADERS ( [ rdma/fi_ext.h] )
@@ -133,7 +120,7 @@ AC_DEFUN([_OPAL_CHECK_OFI],[
133120 [ [ #include <rdma/fabric.h>] ] )
134121
135122 AC_DEFINE_UNQUOTED ( [ OPAL_OFI_PCI_DATA_AVAILABLE] ,
136- [$opal_check_fi_info_pci ],
123+ [ ${ opal_check_fi_info_pci} ] ,
137124 [ check if pci data is available in ofi] )
138125
139126 AC_CHECK_DECLS ( [ FI_OPT_FI_HMEM_P2P] ,
@@ -147,51 +134,28 @@ AC_DEFUN([_OPAL_CHECK_OFI],[
147134 ] )
148135
149136 OPAL_FLAGS_APPEND_UNIQ([ CPPFLAGS] , [ ${opal_pmix_CPPFLAGS}] )
150-
151137 AC_CHECK_DECLS ( [ PMIX_PACKAGE_RANK] ,
152138 [ ] ,
153139 [ ] ,
154140 [ #include <pmix.h>] ) ] )
155141
156- CPPFLAGS= $opal_check_ofi_save_CPPFLAGS
157- LDFLAGS= $opal_check_ofi_save_LDFLAGS
158- LIBS= $opal_check_ofi_save_LIBS
142+ CPPFLAGS=${ opal_check_ofi_save_CPPFLAGS}
143+ LDFLAGS=${ opal_check_ofi_save_LDFLAGS}
144+ LIBS=${ opal_check_ofi_save_LIBS}
159145
160- AC_SUBST([opal_ofi_CPPFLAGS])
161- AC_SUBST([opal_ofi_LDFLAGS])
162- AC_SUBST([opal_ofi_LIBS])
146+ dnl for backwards compatibility reasons
147+ opal_ofi_CPPFLAGS="${$1 _CPPFLAGS}"
148+ opal_ofi_LDFLAGS="${$1 _LDFLAGS}"
149+ opal_ofi_LIBS="${$1 _LIBS}"
163150
164- OPAL_SUMMARY_ADD([Transports], [OpenFabrics OFI Libfabric], [], [$opal_ofi_happy ])
165-
166- OPAL_VAR_SCOPE_POP
151+ OPAL_SUMMARY_ADD([ Transports] , [ OpenFabrics OFI Libfabric] , [ ] , [ ${$1 _SUMMARY}] )
167152
168- AS_IF([test $opal_ofi_happy = no],
169- [AS_IF([test -n " $with_ofi " && test " $with_ofi " != " no" ],
153+ AS_IF ( [ test "${opal_ofi_happy}" = "yes"] ,
154+ [ $2 ] ,
155+ [ AS_IF ( [ test -n "${with_ofi}" && test "${with_ofi}" != "no"] ,
170156 [ AC_MSG_WARN ( [ OFI libfabric support requested (via --with-ofi or --with-libfabric), but not found.] )
171157 AC_MSG_ERROR ( [ Cannot continue.] ) ] )
172- ])
173- ])dnl
174-
158+ $3 ] )
175159
176- dnl
177- dnl OPAL_CHECK_OFI
178- dnl --------------------------------------------------------
179- dnl Check to see if OFI libfabric is available.
180- dnl
181- dnl This is a simple wrapper around _OPAL_CHECK_OFI that just
182- dnl ensures to only run the checks once. We do not use AC_REQUIRE
183- dnl because that re-orders the texts and makes ordering in stdout
184- dnl quite confusing / difficult to grok.
185- dnl
186- AC_DEFUN([OPAL_CHECK_OFI],[
187- # Check for OFI libfabric. Note that $opal_ofi_happy is used in
188- # other configure.m4's to know if OFI/libfabric configured
189- # successfully. We only need to run the back-end checks once, but
190- # at least emit a "checking..." statement each subsequent time
191- # this macro is invoked so that configure's stdout has
192- # sensible/logical output.
193- AS_IF([test -z " $opal_ofi_happy " ],
194- [_OPAL_CHECK_OFI],
195- [AC_MSG_CHECKING([if OFI libfabric is available])
196- AC_MSG_RESULT([$opal_ofi_happy ])])
197- ])
160+ OPAL_VAR_SCOPE_POP
161+ ] ) dnl
0 commit comments