1
- dnl -* - shell-script -* -
1
+ dnl -*- autoconf -*-
2
2
dnl
3
3
dnl Copyright (c) 2015-2020 Cisco Systems, Inc. All rights reserved.
4
4
dnl Copyright (c) 2016-2017 Los Alamos National Security, LLC. All rights
@@ -24,42 +24,55 @@ dnl $3: action if OFI API version is < $1
24
24
AC_DEFUN ( [ OPAL_CHECK_OFI_VERSION_GE] ,[
25
25
OPAL_VAR_SCOPE_PUSH([ opal_ofi_ver_ge_save_CPPFLAGS opal_ofi_ver_ge_happy] )
26
26
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
30
30
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
+ ] ] , [ [
33
39
#if !defined(FI_MAJOR_VERSION)
34
40
#error "we cannot check the version -- sad panda"
35
41
#elif FI_VERSION_LT(FI_VERSION(FI_MAJOR_VERSION, FI_MINOR_VERSION), FI_VERSION($1 ))
36
42
#error "version is too low -- nopes"
37
43
#endif
38
44
] ] ) ] ,
39
- [opal_ofi_ver_ge_happy = 1 ],
40
- [opal_ofi_ver_ge_happy = 0 ])
45
+ [ version_cache_var=yes ] ,
46
+ [ version_cache_var=no ] ) ] )
41
47
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 ] )
47
51
48
52
CPPFLAGS=$opal_ofi_ver_ge_save_CPPFLAGS
49
53
54
+ m4_popdef ( [ version_pretty_print] )
55
+ AS_VAR_POPDEF ( [ version_cache_var] )
50
56
OPAL_VAR_SCOPE_POP
51
57
] ) dnl
52
58
53
- dnl
54
- dnl _OPAL_CHECK_OFI
59
+
60
+ dnl OPAL_CHECK_OFI(prefix, [action if found], [action if not found])
55
61
dnl --------------------------------------------------------
56
62
dnl Do the real work of checking for OFI libfabric.
57
63
dnl Upon return:
58
64
dnl
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.
61
67
dnl
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
+
63
76
# Add --with options
64
77
AC_ARG_WITH ( [ libfabric] ,
65
78
[ AS_HELP_STRING ( [ --with-libfabric=DIR] ,
@@ -71,58 +84,32 @@ AC_DEFUN([_OPAL_CHECK_OFI],[
71
84
AC_ARG_WITH ( [ ofi] ,
72
85
[ AS_HELP_STRING ( [ --with-ofi=DIR] ,
73
86
[ 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
-
75
87
AC_ARG_WITH ( [ ofi-libdir] ,
76
88
[ AS_HELP_STRING ( [ --with-ofi-libdir=DIR] ,
77
89
[ Search for OFI libfabric libraries in DIR] ) ] )
78
90
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}] )
86
93
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}
92
97
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
97
98
opal_check_fi_info_pci=0
98
99
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] )
113
111
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}] )
126
113
127
114
AS_IF ( [ test $opal_ofi_happy = yes] ,
128
115
[ AC_CHECK_HEADERS ( [ rdma/fi_ext.h] )
@@ -133,7 +120,7 @@ AC_DEFUN([_OPAL_CHECK_OFI],[
133
120
[ [ #include <rdma/fabric.h>] ] )
134
121
135
122
AC_DEFINE_UNQUOTED ( [ OPAL_OFI_PCI_DATA_AVAILABLE] ,
136
- [$opal_check_fi_info_pci ],
123
+ [ ${ opal_check_fi_info_pci} ] ,
137
124
[ check if pci data is available in ofi] )
138
125
139
126
AC_CHECK_DECLS ( [ FI_OPT_FI_HMEM_P2P] ,
@@ -147,51 +134,28 @@ AC_DEFUN([_OPAL_CHECK_OFI],[
147
134
] )
148
135
149
136
OPAL_FLAGS_APPEND_UNIQ([ CPPFLAGS] , [ ${opal_pmix_CPPFLAGS}] )
150
-
151
137
AC_CHECK_DECLS ( [ PMIX_PACKAGE_RANK] ,
152
138
[ ] ,
153
139
[ ] ,
154
140
[ #include <pmix.h>] ) ] )
155
141
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}
159
145
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}"
163
150
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}] )
167
152
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"] ,
170
156
[ AC_MSG_WARN ( [ OFI libfabric support requested (via --with-ofi or --with-libfabric), but not found.] )
171
157
AC_MSG_ERROR ( [ Cannot continue.] ) ] )
172
- ])
173
- ])dnl
174
-
158
+ $3 ] )
175
159
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