Skip to content

Commit 55923ea

Browse files
author
Ralph Castain
committed
Stealing some pieces of Josh Hursey's PR #1583 and modifying a bit, allow the opal/pmix external component to handle both PMIx 1.1.4 and PMIx 2.0 versions. Automatically detect the version of the target external library and adjust the only two APIs that changed (PMIx_Init and PMIx_Finalize)
Rename temp vars in .m4 to avoid conflict with Travis
1 parent d25b846 commit 55923ea

File tree

6 files changed

+176
-22
lines changed

6 files changed

+176
-22
lines changed

config/opal_check_pmi.m4

+73-17
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313
# Copyright (c) 2009-2015 Cisco Systems, Inc. All rights reserved.
1414
# Copyright (c) 2011-2014 Los Alamos National Security, LLC. All rights
1515
# reserved.
16-
# Copyright (c) 2014 Intel, Inc. All rights reserved.
16+
# Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
1717
# Copyright (c) 2014-2016 Research Organization for Information Science
1818
# and Technology (RIST). All rights reserved.
19+
# Copyright (c) 2016 IBM Corporation. All rights reserved.
1920
# $COPYRIGHT$
2021
#
2122
# Additional copyrights may follow
@@ -155,16 +156,16 @@ AC_DEFUN([OPAL_CHECK_PMI],[
155156
default_pmi_loc=yes])
156157
AS_IF([test ! -z "$with_pmi_libdir"],
157158
[check_pmi_lib_dir=$with_pmi_libdir
158-
default_pmi_libloc=no],
159+
default_pmi_libloc=no],
159160
[check_pmi_lib_dir=$check_pmi_install_dir
160-
AS_IF([test "$default_pmi_loc" = "no"],
161-
[default_pmi_libloc=no],
162-
[default_pmi_libloc=yes])])
161+
AS_IF([test "$default_pmi_loc" = "no"],
162+
[default_pmi_libloc=no],
163+
[default_pmi_libloc=yes])])
163164
164165
# check for pmi-1 lib */
165166
slurm_pmi_found=no
166167
OPAL_CHECK_PMI_LIB([$check_pmi_install_dir],
167-
[$check_pmi_lib_dir],
168+
[$check_pmi_lib_dir],
168169
[pmi], [PMI_Init],
169170
[slurm_pmi_found=yes],
170171
[opal_enable_pmi1=yes
@@ -174,10 +175,10 @@ AC_DEFUN([OPAL_CHECK_PMI],[
174175
175176
AS_IF([test "$opal_enable_pmi1" = "yes"],
176177
[AS_IF([test "$default_pmi_loc" = "no" || test "$slurm_pmi_found" = "yes"],
177-
[opal_pmi1_CPPFLAGS="$pmi_CPPFLAGS"
178+
[opal_pmi1_CPPFLAGS="$pmi_CPPFLAGS"
178179
AC_SUBST(opal_pmi1_CPPFLAGS)])
179180
AS_IF([test "$default_pmi_libloc" = "no" || test "$slurm_pmi_found" = "yes"],
180-
[opal_pmi1_LDFLAGS="$pmi_LDFLAGS"
181+
[opal_pmi1_LDFLAGS="$pmi_LDFLAGS"
181182
AC_SUBST(opal_pmi1_LDFLAGS)
182183
opal_pmi1_rpath="$pmi_rpath"
183184
AC_SUBST(opal_pmi1_rpath)])])
@@ -195,25 +196,25 @@ AC_DEFUN([OPAL_CHECK_PMI],[
195196
196197
AS_IF([test "$opal_enable_pmi2" = "yes"],
197198
[AS_IF([test "$default_pmi_loc" = "no" || test "$slurm_pmi_found" = "yes"],
198-
[opal_pmi2_CPPFLAGS="$pmi2_CPPFLAGS"
199+
[opal_pmi2_CPPFLAGS="$pmi2_CPPFLAGS"
199200
AC_SUBST(opal_pmi2_CPPFLAGS)])
200201
AS_IF([test "$default_pmi_libloc" = "no" || test "$slurm_pmi_found" = "yes"],
201-
[opal_pmi2_LDFLAGS="$pmi2_LDFLAGS"
202+
[opal_pmi2_LDFLAGS="$pmi2_LDFLAGS"
202203
AC_SUBST(opal_pmi2_LDFLAGS)
203204
opal_pmi2_rpath="$pmi2_rpath"
204205
AC_SUBST(opal_pmi2_rpath)])])
205206
206207
# since support was explicitly requested, then we should error out
207208
# if we didn't find the required support
208-
AC_MSG_CHECKING([can PMI support be built])
209+
AC_MSG_CHECKING([can PMI support be built])
209210
AS_IF([test "$opal_enable_pmi1" != "yes" && test "$opal_enable_pmi2" != "yes"],
210211
[AC_MSG_RESULT([no])
211212
AC_MSG_WARN([PMI support requested (via --with-pmi) but neither pmi.h])
212-
AC_MSG_WARN([nor pmi2.h were found under locations:])
213+
AC_MSG_WARN([nor pmi2.h were found under locations:])
213214
AC_MSG_WARN([ $check_pmi_install_dir])
214215
AC_MSG_WARN([ $check_pmi_install_dir/slurm])
215216
AC_MSG_WARN([Specified path: $with_pmi])
216-
AC_MSG_WARN([OR neither libpmi nor libpmi2 were found under:])
217+
AC_MSG_WARN([OR neither libpmi nor libpmi2 were found under:])
217218
AC_MSG_WARN([ $check_pmi_lib_dir/lib])
218219
AC_MSG_WARN([ $check_pmi_lib_dir/lib64])
219220
AC_MSG_WARN([Specified path: $with_pmi_libdir])
@@ -230,7 +231,7 @@ AC_DEFUN([OPAL_CHECK_PMIX],[
230231
opal_pmix_ext_LDFLAGS=
231232
opal_pmix_ext_LIBS=
232233
233-
OPAL_VAR_SCOPE_PUSH([pmix_ext_install_dir])
234+
OPAL_VAR_SCOPE_PUSH([pmix_ext_install_dir opal_pmix_CPPFLAGS_save opal_pmix_LDFLAGS_save opal_pmix_LIBS_save opal_pmix_LD_LIBRARY_PATH_save])
234235
235236
AC_ARG_WITH([pmix],
236237
[AC_HELP_STRING([--with-pmix(=DIR)],
@@ -251,21 +252,76 @@ AC_DEFUN([OPAL_CHECK_PMIX],[
251252
AS_IF([test "$with_pmix" = "external"],
252253
[pmix_ext_install_dir=/usr],
253254
[pmix_ext_install_dir=$with_pmix])
255+
# Make sure we have the headers and libs in the correct location
256+
OPAL_CHECK_WITHDIR([external-pmix], [$pmix_ext_install_dir/include], [pmix.h])
257+
OPAL_CHECK_WITHDIR([external-libpmix], [$pmix_ext_install_dir/lib], [libpmix.*])
254258
AC_MSG_CHECKING([if external component can be used])
255259
OPAL_CHECK_PACKAGE([opal_pmix_ext],
256260
[pmix.h],
257261
[pmix],
258262
[PMIx_Init],
259263
[],
260264
[$pmix_ext_install_dir],
261-
[],
265+
[$pmix_ext_install_dir/lib],
262266
[AC_MSG_RESULT([PMIx external support will be built])
263267
opal_external_pmix_happy=yes],
264-
[AC_MSG_RESULT([no])
268+
[opal_external_pmix_happy="no"
269+
AC_MSG_RESULT([no])
265270
AC_MSG_WARN([External PMIx support was requested but failed])
266271
AC_MSG_WARN([as explained above.])
267272
AC_MSG_ERROR([Cannot continue])])
268-
])
273+
# Check the version
274+
opal_external_pmix_version="unknown"
275+
opal_pmix_CPPFLAGS_save=$CPPFLAGS
276+
opal_pmix_LDFLAGS_save=$LDFLAGS
277+
opal_pmix_LIBS_save=$LIBS
278+
LD_LIBRARY_PATH_orig=$opal_pmix_LD_LIBRARY_PATH_save
279+
280+
CPPFLAGS=$opal_pmix_ext_CPPFLAGS
281+
LDFLAGS=$opal_pmix_ext_LDFLAGS
282+
LIBS=$opal_pmix_ext_LIBS
283+
LD_LIBRARY_PATH=$pmix_ext_install_dir/lib
284+
285+
AC_MSG_CHECKING([PMIx library version])
286+
AC_TRY_RUN([
287+
#include <stdio.h>
288+
#include <stdlib.h>
289+
#include <pmix.h>
290+
#include <pmix/pmix_common.h>
291+
292+
int main(int argc, char **argv)
293+
{
294+
const char * version = NULL;
295+
FILE *f = NULL;
296+
297+
f = fopen("conftestval", "w");
298+
if( !f ) exit(1);
299+
version = PMIx_Get_version();
300+
fprintf(f, "%s", version);
301+
fclose(f);
302+
303+
return 0;
304+
}
305+
], [
306+
eval opal_external_pmix_version=`cat conftestval`
307+
AC_MSG_RESULT([$opal_external_pmix_version])
308+
], [
309+
LD_LIBRARY_PATH=$opal_pmix_LD_LIBRARY_PATH_save
310+
opal_external_pmix_happy="no"
311+
AC_MSG_ERROR([External PMIx support requested but could not build/run a test program. Aborting])
312+
], [
313+
LD_LIBRARY_PATH=$opal_pmix_LD_LIBRARY_PATH_save
314+
opal_external_pmix_happy="no"
315+
AC_MSG_ERROR([External PMIx disabled for cross compile. Aborting])
316+
])
317+
CPPFLAGS=$opal_pmix_CPPFLAGS_save
318+
LDFLAGS=$opal_pmix_LDFLAGS_save
319+
LIBS=$opal_pmix_LIBS_save
320+
LD_LIBRARY_PATH=$opal_pmix_LD_LIBRARY_PATH_save
321+
322+
opal_external_pmix_happy="yes"
323+
])
324+
269325
AC_SUBST(opal_pmix_ext_CPPFLAGS)
270326
AC_SUBST(opal_pmix_ext_LDFLAGS)
271327
AC_SUBST(opal_pmix_ext_LIBS)

config/opal_check_version.m4

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
dnl -*- shell-script -*-
2+
dnl
3+
dnl Copyright (c) 2016 IBM Corporation. All rights reserved.
4+
dnl $COPYRIGHT$
5+
dnl
6+
dnl Additional copyrights may follow
7+
dnl
8+
dnl $HEADER$
9+
dnl
10+
11+
# Parameters: (use a version "1.1.4rc2" as the example)
12+
# * prefix
13+
# Will export a variable $prefix_version_cmp
14+
# - action_if_less => "less"
15+
# - action_if_equal => "equal"
16+
# - action_if_equal_series => "series"
17+
# - action_if_greater => "greater"
18+
# * version_actual
19+
# Actual version string
20+
# * version_desired
21+
# Desired version string to check against
22+
# * action_if_less
23+
# Action to take if the version is strictly less than
24+
# "1.1.3" < "1.1.4rc2"
25+
# * action_if_equal
26+
# Action to take if the version matches exactly
27+
# "1.1.4rc2" = "1.1.4rc2"
28+
# * action_if_equal_series
29+
# Action to take if the version matches to this series
30+
# "1.1.4rc1" ~=~ "1.1.4rc2"
31+
# "1.1.4" ~=~ "1.1.4rc2"
32+
# * action_if_greater
33+
# Action to take if the version is strictly greater than
34+
# "1.1.5" > "1.1.4rc2"
35+
# "2.0" > "1.1.4rc2"
36+
#
37+
# See documentation on m4_version_compare and AS_VERSION_COMPARE for more
38+
# precise definitions
39+
# OPAL_CHECK_VERSION(prefix, version_actual, version_desired,
40+
# action_if_less, action_if_equal, action_if_equal_series,
41+
# action_if_greater)
42+
# ----------------------------------------------------
43+
AC_DEFUN([OPAL_CHECK_VERSION],[
44+
version_actual=$2
45+
version_desired=$3
46+
47+
AC_MSG_CHECKING([Checking library version is $version_desired])
48+
#
49+
# Example: If version_desired=1.1.4 and
50+
# version_actual=1.1.3 -> -1
51+
# version_actual=1.1.4 -> 0
52+
# version_actual=1.1.4rc1 -> 1
53+
# version_actual=1.1.5 -> 1 (need further check)
54+
#
55+
AS_VERSION_COMPARE(["$version_actual"], [$version_desired],
56+
[AC_MSG_RESULT([Earlier than expected ($version_actual < $$version_desired)])
57+
$1_version_cmp="less"
58+
$4],
59+
[AC_MSG_RESULT([Equal])
60+
$1_version_cmp="equal"
61+
$5],
62+
[
63+
# Need further check to make sure we are < 1.1.5
64+
# version_actual=1.1.4rc1 -> -1
65+
# version_actual=1.1.4 -> 0 (caught above)
66+
# version_actual=1.1.5 -> 1
67+
AS_VERSION_COMPARE(["$version_actual"], [$version_desired"zzzz"],
68+
[AC_MSG_RESULT([Within release series ($version_actual)])
69+
$1_version_cmp="series"
70+
$6],
71+
[AC_MSG_RESULT([Within release series ($version_actual)])
72+
$1_version_cmp="series"
73+
$6],
74+
[AC_MSG_RESULT([Later than expected ($version_actual > $$version_desired)])
75+
$1_version_cmp="greater"
76+
$7]
77+
)]
78+
)
79+
])dnl

opal/mca/pmix/external/Makefile.am

+1-3
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,7 @@ mca_pmix_external_la_SOURCES = $(sources)
3636
mca_pmix_external_la_CFLAGS =
3737
mca_pmix_external_la_CPPFLAGS = $(opal_pmix_ext_CPPFLAGS)
3838
mca_pmix_external_la_LDFLAGS = -module -avoid-version $(opal_pmix_ext_LDFLAGS)
39-
mca_pmix_external_la_LIBADD = $(opal_pmix_ext_LIBS) \
40-
$(OPAL_TOP_BUILDDIR)/opal/mca/event/lib@OPAL_LIB_PREFIX@mca_event.la \
41-
$(OPAL_TOP_BUILDDIR)/opal/mca/hwloc/lib@OPAL_LIB_PREFIX@mca_hwloc.la
39+
mca_pmix_external_la_LIBADD = $(opal_pmix_ext_LIBS)
4240

4341
noinst_LTLIBRARIES = $(component_noinst)
4442
libmca_pmix_external_la_SOURCES =$(sources)

opal/mca/pmix/external/configure.m4

+12
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,18 @@ AC_DEFUN([MCA_opal_pmix_external_CONFIG],[
4444
AC_MSG_WARN([TO BUILD PMIX OR ELSE UNPREDICTABLE BEHAVIOR MAY RESULT])
4545
AC_MSG_ERROR([PLEASE CORRECT THE CONFIGURE COMMAND LINE AND REBUILD])])
4646
external_WRAPPER_EXTRA_CPPFLAGS='-I${includedir}/openmpi/$opal_pmix_external_basedir/pmix -I${includedir}/openmpi/$opal_pmix_external_basedir/pmix/include'
47+
# check the version
48+
AC_MSG_CHECKING([pmix version])
49+
OPAL_CHECK_VERSION([opal_pmix_external],
50+
[$opal_external_pmix_version],
51+
["2.0"],
52+
[opal_external_pmix_version_flag=1.1],
53+
[opal_external_pmix_version_flag=2.0],
54+
[opal_external_pmix_version_flag=2.0],
55+
[opal_external_pmix_version_flag=2.0])
56+
AC_MSG_RESULT([$opal_external_pmix_version])
57+
AS_IF([test "$opal_external_pmix_version_flag" = "1.1"],
58+
[AC_DEFINE([OPAL_PMIX_VERSION_11], [1], [PMIx external version])])
4759
$1],
4860
[$2])
4961
])dnl

opal/mca/pmix/external/pmix_ext_client.c

+9
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,12 @@ int pmix1_client_init(void)
112112
asprintf(&dbgvalue, "PMIX_DEBUG=%d", dbg);
113113
putenv(dbgvalue);
114114
}
115+
116+
#ifdef OPAL_PMIX_VERSION_11
117+
rc = PMIx_Init(&my_proc);
118+
#else
115119
rc = PMIx_Init(&my_proc, NULL, 0);
120+
#endif
116121
if (PMIX_SUCCESS != rc) {
117122
return pmix1_convert_rc(rc);
118123
}
@@ -154,7 +159,11 @@ int pmix1_client_finalize(void)
154159
/* deregister the errhandler */
155160
PMIx_Deregister_errhandler(errhdler_ref, NULL, NULL);
156161

162+
#ifdef OPAL_PMIX_VERSION_11
163+
rc = PMIx_Finalize();
164+
#else
157165
rc = PMIx_Finalize(NULL, 0);
166+
#endif
158167

159168
return pmix1_convert_rc(rc);
160169
}

opal/mca/pmix/external/pmix_ext_server_south.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
22
/*
3-
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
3+
* Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
44
* Copyright (c) 2014-2016 Research Organization for Information Science
55
* and Technology (RIST). All rights reserved.
66
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
@@ -231,7 +231,7 @@ int pmix1_server_register_nspace(opal_jobid_t jobid,
231231
pmapinfo = (opal_list_t*)kv->data.ptr;
232232
szmap = opal_list_get_size(pmapinfo);
233233
PMIX_INFO_CREATE(pmap, szmap);
234-
pinfo[n].value.data.array.array = (struct pmix_info*)pmap;
234+
pinfo[n].value.data.array.array = (struct pmix_info_t*)pmap;
235235
pinfo[n].value.data.array.size = szmap;
236236
m = 0;
237237
OPAL_LIST_FOREACH(k2, pmapinfo, opal_value_t) {

0 commit comments

Comments
 (0)