Merge pull request #7026 from ggouaillardet/topic/openpmix_refresh
pmix/pmix4x: refresh to the latest open PMIx master
Этот коммит содержится в:
Коммит
280856928a
90
.gitignore
поставляемый
90
.gitignore
поставляемый
@ -373,51 +373,51 @@ opal/mca/hwloc/base/static-components.h.new.struct
|
||||
|
||||
opal/mca/installdirs/config/install_dirs.h
|
||||
|
||||
!opal/mca/pmix/pmix*/pmix/AUTHORS
|
||||
!opal/mca/pmix/pmix*/pmix/contrib/perf_tools/Makefile
|
||||
opal/mca/pmix/pmix*/pmix/include/pmix/autogen/config.h
|
||||
opal/mca/pmix/pmix*/pmix/include/pmix/autogen/config.h.in
|
||||
opal/mca/pmix/pmix*/pmix/src/include/private/autogen/config.h.in
|
||||
opal/mca/pmix/pmix*/pmix/src/include/private/autogen/config.h
|
||||
opal/mca/pmix/pmix*/pmix/src/include/frameworks.h
|
||||
opal/mca/pmix/pmix*/pmix/src/mca/pinstalldirs/config/pinstall_dirs.h
|
||||
opal/mca/pmix/pmix*/pmix/config/autogen_found_items.m4
|
||||
opal/mca/pmix/pmix*/pmix/config/mca_library_paths.txt
|
||||
opal/mca/pmix/pmix*/pmix/config/test-driver
|
||||
opal/mca/pmix/pmix*/pmix/src/include/pmix_config.h
|
||||
opal/mca/pmix/pmix*/pmix/src/include/pmix_config.h.in
|
||||
opal/mca/pmix/pmix*/pmix/include/pmix_common.h
|
||||
opal/mca/pmix/pmix*/pmix/include/pmix_rename.h
|
||||
opal/mca/pmix/pmix*/pmix/include/pmix_version.h
|
||||
opal/mca/pmix/pmix*/pmix/src/util/keyval/keyval_lex.c
|
||||
opal/mca/pmix/pmix*/pmix/src/util/show_help_lex.c
|
||||
opal/mca/pmix/pmix*/pmix/examples/alloc
|
||||
opal/mca/pmix/pmix*/pmix/examples/client
|
||||
opal/mca/pmix/pmix*/pmix/examples/debugger
|
||||
opal/mca/pmix/pmix*/pmix/examples/debuggerd
|
||||
opal/mca/pmix/pmix*/pmix/examples/dmodex
|
||||
opal/mca/pmix/pmix*/pmix/examples/dynamic
|
||||
opal/mca/pmix/pmix*/pmix/examples/fault
|
||||
opal/mca/pmix/pmix*/pmix/examples/jctrl
|
||||
opal/mca/pmix/pmix*/pmix/examples/pub
|
||||
opal/mca/pmix/pmix*/pmix/examples/server
|
||||
opal/mca/pmix/pmix*/pmix/examples/tool
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests00.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests01.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests02.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests03.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests04.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests05.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests06.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests07.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests08.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests09.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests10.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests11.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests12.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests13.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests14.pl
|
||||
opal/mca/pmix/pmix*/pmix/test/run_tests15.pl
|
||||
!opal/mca/pmix/pmix*/openpmix/AUTHORS
|
||||
!opal/mca/pmix/pmix*/openpmix/contrib/perf_tools/Makefile
|
||||
opal/mca/pmix/pmix*/openpmix/include/pmix/autogen/config.h
|
||||
opal/mca/pmix/pmix*/openpmix/include/pmix/autogen/config.h.in
|
||||
opal/mca/pmix/pmix*/openpmix/src/include/private/autogen/config.h.in
|
||||
opal/mca/pmix/pmix*/openpmix/src/include/private/autogen/config.h
|
||||
opal/mca/pmix/pmix*/openpmix/src/include/frameworks.h
|
||||
opal/mca/pmix/pmix*/openpmix/src/mca/pinstalldirs/config/pinstall_dirs.h
|
||||
opal/mca/pmix/pmix*/openpmix/config/autogen_found_items.m4
|
||||
opal/mca/pmix/pmix*/openpmix/config/mca_library_paths.txt
|
||||
opal/mca/pmix/pmix*/openpmix/config/test-driver
|
||||
opal/mca/pmix/pmix*/openpmix/src/include/pmix_config.h
|
||||
opal/mca/pmix/pmix*/openpmix/src/include/pmix_config.h.in
|
||||
opal/mca/pmix/pmix*/openpmix/include/pmix_common.h
|
||||
opal/mca/pmix/pmix*/openpmix/include/pmix_rename.h
|
||||
opal/mca/pmix/pmix*/openpmix/include/pmix_version.h
|
||||
opal/mca/pmix/pmix*/openpmix/src/util/keyval/keyval_lex.c
|
||||
opal/mca/pmix/pmix*/openpmix/src/util/show_help_lex.c
|
||||
opal/mca/pmix/pmix*/openpmix/examples/alloc
|
||||
opal/mca/pmix/pmix*/openpmix/examples/client
|
||||
opal/mca/pmix/pmix*/openpmix/examples/debugger
|
||||
opal/mca/pmix/pmix*/openpmix/examples/debuggerd
|
||||
opal/mca/pmix/pmix*/openpmix/examples/dmodex
|
||||
opal/mca/pmix/pmix*/openpmix/examples/dynamic
|
||||
opal/mca/pmix/pmix*/openpmix/examples/fault
|
||||
opal/mca/pmix/pmix*/openpmix/examples/jctrl
|
||||
opal/mca/pmix/pmix*/openpmix/examples/pub
|
||||
opal/mca/pmix/pmix*/openpmix/examples/server
|
||||
opal/mca/pmix/pmix*/openpmix/examples/tool
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests00.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests01.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests02.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests03.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests04.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests05.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests06.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests07.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests08.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests09.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests10.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests11.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests12.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests13.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests14.pl
|
||||
opal/mca/pmix/pmix*/openpmix/test/run_tests15.pl
|
||||
|
||||
|
||||
opal/mca/pmix/ext4x/ext4x.c
|
||||
|
@ -15,7 +15,7 @@ EXTRA_DIST = autogen.subdirs
|
||||
|
||||
dist_opaldata_DATA = help-pmix-pmix4x.txt
|
||||
|
||||
SUBDIRS = pmix
|
||||
SUBDIRS = openpmix
|
||||
|
||||
sources = \
|
||||
pmix4x.h \
|
||||
@ -43,7 +43,7 @@ mcacomponent_LTLIBRARIES = $(component_install)
|
||||
mca_pmix_pmix4x_la_SOURCES = $(sources)
|
||||
mca_pmix_pmix4x_la_CFLAGS = $(opal_pmix_pmix4x_CFLAGS)
|
||||
mca_pmix_pmix4x_la_CPPFLAGS = \
|
||||
-I$(srcdir)/pmix/include $(opal_pmix_pmix4x_CPPFLAGS)
|
||||
-I$(srcdir)/openpmix/include $(opal_pmix_pmix4x_CPPFLAGS)
|
||||
mca_pmix_pmix4x_la_LDFLAGS = -module -avoid-version $(opal_pmix_pmix4x_LDFLAGS)
|
||||
mca_pmix_pmix4x_la_LIBADD = $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la \
|
||||
$(opal_pmix_pmix4x_LIBS)
|
||||
|
@ -1 +1 @@
|
||||
pmix
|
||||
openpmix
|
||||
|
@ -59,7 +59,7 @@ AC_DEFUN([MCA_opal_pmix_pmix4x_CONFIG],[
|
||||
[opal_pmix_pmix4x_args="--with-devel-headers $opal_pmix_pmix4x_args"])
|
||||
CPPFLAGS="-I$OPAL_TOP_SRCDIR -I$OPAL_TOP_BUILDDIR -I$OPAL_TOP_SRCDIR/opal/include -I$OPAL_TOP_BUILDDIR/opal/include $CPPFLAGS"
|
||||
|
||||
OPAL_CONFIG_SUBDIR([$opal_pmix_pmix4x_basedir/pmix],
|
||||
OPAL_CONFIG_SUBDIR([$opal_pmix_pmix4x_basedir/openpmix],
|
||||
[$opal_pmix_pmix4x_args $opal_subdir_args 'CFLAGS=$CFLAGS' 'CPPFLAGS=$CPPFLAGS'],
|
||||
[opal_pmix_pmix4x_happy=1], [opal_pmix_pmix4x_happy=0])
|
||||
|
||||
@ -83,9 +83,9 @@ AC_DEFUN([MCA_opal_pmix_pmix4x_CONFIG],[
|
||||
AC_MSG_ERROR([CANNOT CONTINUE])])
|
||||
# Build flags for our Makefile.am
|
||||
opal_pmix_pmix4x_LDFLAGS=
|
||||
opal_pmix_pmix4x_LIBS="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/pmix/src/libpmix.la"
|
||||
opal_pmix_pmix4x_CPPFLAGS="-I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/pmix/include -I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/pmix -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix4x_basedir/pmix/include -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix4x_basedir/pmix"
|
||||
opal_pmix_pmix4x_DEPENDENCIES="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/pmix/src/libpmix.la"])
|
||||
opal_pmix_pmix4x_LIBS="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/openpmix/src/libpmix.la"
|
||||
opal_pmix_pmix4x_CPPFLAGS="-I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/openpmix/include -I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/openpmix -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix4x_basedir/openpmix/include -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix4x_basedir/openpmix"
|
||||
opal_pmix_pmix4x_DEPENDENCIES="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/openpmix/src/libpmix.la"])
|
||||
|
||||
AC_SUBST([opal_pmix_pmix4x_LIBS])
|
||||
AC_SUBST([opal_pmix_pmix4x_CPPFLAGS])
|
||||
@ -94,7 +94,7 @@ AC_DEFUN([MCA_opal_pmix_pmix4x_CONFIG],[
|
||||
|
||||
# Finally, add some flags to the wrapper compiler so that our
|
||||
# headers can be found.
|
||||
pmix_pmix4x_status_filename="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/pmix/config.status"
|
||||
pmix_pmix4x_status_filename="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/openpmix/config.status"
|
||||
pmix_pmix4x_WRAPPER_EXTRA_CPPFLAGS=`egrep PMIX_EMBEDDED_CPPFLAGS $pmix_pmix4x_status_filename | cut -d\" -f4`
|
||||
pmix_pmix4x_WRAPPER_EXTRA_LDFLAGS=`egrep PMIX_EMBEDDED_LDFLAGS $pmix_pmix4x_status_filename | cut -d\" -f4`
|
||||
pmix_pmix4x_WRAPPER_EXTRA_LIBS=`egrep PMIX_EMBEDDED_LIBS $pmix_pmix4x_status_filename | cut -d\" -f4`
|
||||
|
@ -11,7 +11,7 @@
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2006-2016 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2012-2013 Los Alamos National Security, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2019 Amazon.com, Inc. or its affiliates. All Rights
|
||||
# reserved.
|
||||
# $COPYRIGHT$
|
||||
@ -32,7 +32,7 @@ AM_DISTCHECK_CONFIGURE_FLAGS = --disable-dlopen
|
||||
headers =
|
||||
sources =
|
||||
nodist_headers =
|
||||
EXTRA_DIST = AUTHORS README HACKING INSTALL VERSION LICENSE autogen.pl
|
||||
EXTRA_DIST = AUTHORS README HACKING INSTALL VERSION LICENSE autogen.pl Makefile.pmix-rules
|
||||
|
||||
# Only install the valgrind suppressions file and man pages
|
||||
# if we're building in standalone mode
|
37
opal/mca/pmix/pmix4x/openpmix/Makefile.pmix-rules
Обычный файл
37
opal/mca/pmix/pmix4x/openpmix/Makefile.pmix-rules
Обычный файл
@ -0,0 +1,37 @@
|
||||
# -*- makefile -*-
|
||||
# Copyright (c) 2008-2018 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.
|
||||
# Copyright (c) 2019 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
TRIM_OPTIONS=
|
||||
|
||||
.1in.1:
|
||||
$(PMIX_V_GEN) $(top_srcdir)/contrib/make_manpage.pl \
|
||||
--package-name='@PACKAGE_NAME@' \
|
||||
--package-version='@PACKAGE_VERSION@' \
|
||||
--pmix-date='@PMIX_RELEASE_DATE@' \
|
||||
--input=$< \
|
||||
--output=$@
|
||||
|
||||
.3in.3:
|
||||
$(PMIX_V_GEN) $(top_srcdir)/contrib/make_manpage.pl \
|
||||
--package-name='@PACKAGE_NAME@' \
|
||||
--package-version='@PACKAGE_VERSION@' \
|
||||
--pmix-date='@PMIX_RELEASE_DATE@' \
|
||||
$(TRIM_OPTIONS) \
|
||||
--input=$< \
|
||||
--output=$@
|
||||
|
||||
.7in.7:
|
||||
$(PMIX_V_GEN) $(top_srcdir)/contrib/make_manpage.pl \
|
||||
--package-name='@PACKAGE_NAME@' \
|
||||
--package-version='@PACKAGE_VERSION@' \
|
||||
--pmix-date='@PMIX_RELEASE_DATE@' \
|
||||
--input=$< \
|
||||
--output=$@
|
@ -23,6 +23,89 @@ multiple release branches.
|
||||
Master (not on release branches yet)
|
||||
------------------------------------
|
||||
|
||||
3.1.5 -- TBD
|
||||
----------------------
|
||||
NOTE: The signature of the PMIx_Allocation_request has changed
|
||||
in accordance with an Errata update of the PMIx v3 Standard
|
||||
- PR #1382: dstore: fixed truncate key-names while restoring
|
||||
- PR #1405: Fix xnspace dmodex and add verbose debug
|
||||
- PR #1406: Resolve request for job-level data
|
||||
- PR #1407/#1409/#1411: Fix xnspace get yet again
|
||||
- PR #1434/#1436: Cleanup handling of info arrays
|
||||
- PR #1435: Cleanup example and remove debug
|
||||
- PR #1437: Update blocking Allocation_request signature
|
||||
- PR #1440: Fix 'get' of data for unknown namespace
|
||||
- PR #1442: Fix fences with namespaces where no local processes are running
|
||||
|
||||
|
||||
3.1.4 -- 9 Aug 2019
|
||||
----------------------
|
||||
- PR #1342: Fix if_linux_ipv6_open interface filter
|
||||
- PR #1344: Remove unnecessary libtool init for c++
|
||||
- PR #1346: Fix incorrect pointer casts/deref
|
||||
- PR #1347/#1348: Fix use of gethostname
|
||||
- PR #1353/#1357: util/environ: use setenv() if available
|
||||
- PR #1354: Plug a misc memory leak in the pmix_query_caddy_t destructor
|
||||
- PR #1356: Fix another pointer cast/deref in test suite
|
||||
- PR #1358: Implement support for class-based info arrays
|
||||
- PR #1359: Plug misc minor memory leaks
|
||||
- PR #1368: Backport support for libev
|
||||
- PR #1369: Fix legacy support for PMI-1
|
||||
- PR #1370: Cleanup handling of data requests for different nspaces
|
||||
- PR #1193: Resolve get of proc-specific job-level info from another nspace
|
||||
- PR #1376: Fix problems in the Log code path, updates to simple test suite
|
||||
- PR #1377: Skip fastpath/dstore for NULL keys
|
||||
- PR #1379: Change IF_NAMESIZE to PMIX_IF_NAMESIZE and set to safe size
|
||||
- PR #1385: Check for EINVAL return from posix_fallocate
|
||||
- PR #1389: Plug misc memory leaks in configure
|
||||
|
||||
|
||||
3.1.3 -- 2 July 2019
|
||||
----------------------
|
||||
- PR #1096: Restore PMIX_NUM_SLOTS for backward compatibility
|
||||
- PR #1106: Automatically generate PMIX_NUMERIC_VERSION
|
||||
- PR #1143: Fix tool connection handshake for tools that are registered
|
||||
clients
|
||||
- PR #1163: Fix a compiler warning in atomics on POWER arch
|
||||
- PR #1162: Fix race condition when clients fail while in a PMIx
|
||||
collective operation
|
||||
- PR #1166: Fix a regression in spinlock atomics
|
||||
- PR #1159: Fix missing pointer update when shared memory segment
|
||||
was re-attached
|
||||
- PR #1180: Remove dependency on C++ compiler for thread detection
|
||||
- PR #1180: Add detection for Flex when building in non-tarball situations
|
||||
- PR #1165: Add dependency on libevent-devel to rpm spec file
|
||||
- PR #1188: Link libpmix.so to MCA component libraries
|
||||
- PR #1194: Ensure any cached notifications arrive after registration completes
|
||||
- PR #1205: Add "make check" support
|
||||
- PR #1209: Update configure logic for clock_gettime
|
||||
- PR #1213/#1217/#1221: Add configure option "--enable-nonglobal-dlopen"
|
||||
If the MCA component libraries should link back to libpmix.so
|
||||
- PR #1231: SPEC: Allow splitting PMIx in pmix and pmix-libpmi packages
|
||||
- PR #1222: Fix case of multiple launcher calls in job script
|
||||
- PR #1237: Avoid double-free of collective tracker
|
||||
- PR #1237: Ensure all participants are notified of fence complete
|
||||
- PR #1237: Ensure all participants are notified of connect and disconnect complete
|
||||
- PR #1250: Fix PMIx_server_finalize hang (rare)
|
||||
- PR #1271: PTL/usock doesn't support tools
|
||||
- PR #1280: Fix the PTL connection establishment protocol
|
||||
- PR #1280: Fix tool connection in psec/handshake mode
|
||||
- PR #1289: Avoid output_verbose overhead when it won't print
|
||||
- PR #1296: Allow setup_fork to proceed even if gdds and pnet don't contribute
|
||||
- PR #1296: Allow servers to pass NULL module
|
||||
- PR #1297: Provide internal blocking ability to the register/deregister fns
|
||||
- PR #1298: Add dummy handshake component to psec framework for testing
|
||||
- PR #1303: Allow jobs to not specify proc-level info
|
||||
- PR #1304: Provide proc data in cases where host does not
|
||||
- PR #1305: Add some more values that can be computed
|
||||
- PR #1308: Add missing tool rendezvous file
|
||||
- PR #1309: Fix potential integer overflow in regex
|
||||
- PR #1311: Work around memory bug in older gcc compilers
|
||||
- PR #1321: Provide memory op hooks in user-facing macros
|
||||
- PR #1329: Add -fPIC to static builds
|
||||
- PR #1340: Do not use '==' in m4 test statements
|
||||
|
||||
|
||||
3.1.2 -- 24 Jan 2019
|
||||
----------------------
|
||||
- Fix a bug in macro identifying system events
|
||||
@ -183,6 +266,57 @@ Master (not on release branches yet)
|
||||
- Fix several memory and file descriptor leaks
|
||||
|
||||
|
||||
2.2.3 -- 15 Aug 2019
|
||||
----------------------
|
||||
- PR #1162: Fix race condition when clients fail while in a PMIx
|
||||
collective operation
|
||||
- PR #1163: Fix a compiler warning in atomics on POWER arch
|
||||
- PR #1165: Add BuildRequires: libevent-devel to spec file
|
||||
- PR #1180: Remove dependency on C++ compiler for thread detection
|
||||
- PR #1180: Add detection for Flex when building in non-tarball situations
|
||||
- PR #1182: configury: use PMIX_ENABLE_DLOPEN_SUPPORT instead of enable_dlopen
|
||||
- PR #1188: Link libpmix.so to MCA component libraries
|
||||
- PR #1190: Ensure any cached notifications arrive after reg completes
|
||||
- PR #1194: Ensure any cached notifications arrive after registration completes
|
||||
- PR #1209: Update configure logic for clock_gettime
|
||||
- PR #1213/#1217/#1221: Add configure option "--enable-nonglobal-dlopen"
|
||||
If the MCA component libraries should link back to libpmix.so
|
||||
- PR #1231: SPEC: Allow splitting PMIx in pmix and pmix-libpmi packages
|
||||
- PR #1253: Preserve user-provided CFLAGS to protect autotools
|
||||
- PR #1267: Correct dmodex example
|
||||
- PR #1275: IPv6 IF Read: Buffer Overflow
|
||||
- PR #1295: Fix comment: IPv6 IF_NAMESIZE
|
||||
- PR #1296: Allow setup_fork to proceed even if gdds and pnet don't contribute
|
||||
- PR #1296: Allow servers to pass NULL module
|
||||
- PR #1297: Provide internal blocking ability to the register/deregister fns
|
||||
- PR #1298: Add dummy handshake component to psec framework for testing
|
||||
- PR #1303: Allow jobs to not specify proc-level info
|
||||
- PR #1304: Provide proc data in cases where host does not
|
||||
- PR #1305: Add some more values that can be computed
|
||||
- PR #1308: Add missing tool rendezvous file
|
||||
- PR #1309: Fix potential integer overflow in regex
|
||||
- PR #1311: Work around memory bug in older gcc compilers
|
||||
- PR #1329: Add -fPIC to static builds
|
||||
- PR #1334: Cache only -W CFLAG entries to fix 32-bit builds
|
||||
- PR #1341: Do not use '==' in m4 test statements
|
||||
- PR #1342: Fix if_linux_ipv6_open interface filter
|
||||
- PR #1344: Remove unnecessary libtool init for c++
|
||||
- PR #1346: Fix incorrect pointer casts/deref
|
||||
- PR #1347/#1348: Fix use of gethostname
|
||||
- PR #1353/#1357: util/environ: use setenv() if available
|
||||
- PR #1354: Plug a misc memory leak in the pmix_query_caddy_t destructor
|
||||
- PR #1356: Fix another pointer cast/deref in test suite
|
||||
- PR #1358: Implement support for class-based info arrays
|
||||
- PR #1359: Plug misc minor memory leaks
|
||||
- PR #1369: Fix legacy support for PMI-1
|
||||
- PR #1370: Cleanup handling of data requests for different nspaces
|
||||
- PR #1193: Resolve get of proc-specific job-level info from another nspace
|
||||
- PR #1377: Skip fastpath/dstore for NULL keys
|
||||
- PR #1379: Change IF_NAMESIZE to PMIX_IF_NAMESIZE and set to safe size
|
||||
- PR #1385: Check for EINVAL return from posix_fallocate
|
||||
- PR #1389: Plug misc memory leaks in configure
|
||||
|
||||
|
||||
2.2.2 -- 24 Jan 2019
|
||||
----------------------
|
||||
- Fix a bug in macro identifying system events
|
@ -23,14 +23,14 @@ release=0
|
||||
# The only requirement is that it must be entirely printable ASCII
|
||||
# characters and have no white space.
|
||||
|
||||
greek=
|
||||
greek=a1
|
||||
|
||||
# If repo_rev is empty, then the repository version number will be
|
||||
# obtained during "make dist" via the "git describe --tags --always"
|
||||
# command, or with the date (if "git describe" fails) in the form of
|
||||
# "date<date>".
|
||||
|
||||
repo_rev=gitf87459fe
|
||||
repo_rev=gitea3b29b1
|
||||
|
||||
# If tarball_version is not empty, it is used as the version string in
|
||||
# the tarball filename, regardless of all other versions listed in
|
||||
@ -44,7 +44,7 @@ tarball_version=
|
||||
|
||||
# The date when this release was created
|
||||
|
||||
date="Sep 03, 2019"
|
||||
date="Oct 01, 2019"
|
||||
|
||||
# The shared library version of each of PMIx's public libraries.
|
||||
# These versions are maintained in accordance with the "Library
|
@ -23,6 +23,8 @@
|
||||
|
||||
helpers = setup.py pmix.pyx pmix.pxi construct.py
|
||||
|
||||
EXTRA_DIST = $(helpers)
|
||||
|
||||
if WANT_PYTHON_BINDINGS
|
||||
|
||||
install-exec-local: $(helpers)
|
520
opal/mca/pmix/pmix4x/openpmix/bindings/python/construct.py
Исполняемый файл
520
opal/mca/pmix/pmix4x/openpmix/bindings/python/construct.py
Исполняемый файл
@ -0,0 +1,520 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os, os.path, sys, shutil, signal
|
||||
from optparse import OptionParser, OptionGroup
|
||||
|
||||
takeconst = False
|
||||
takeapis = False
|
||||
takedtypes = False
|
||||
|
||||
def signal_handler(signal, frame):
|
||||
print("Ctrl-C received")
|
||||
sys.exit(0)
|
||||
|
||||
def harvest_constants(options, src, constants, definitions):
|
||||
global takeconst, takeapis, takedtypes
|
||||
|
||||
path = os.path.join(options.src, src)
|
||||
# open the file
|
||||
try:
|
||||
inputfile = open(path, "r")
|
||||
except:
|
||||
print("File", path, "could not be opened")
|
||||
return
|
||||
# read the file - these files aren't too large
|
||||
# so ingest the whole thing at one gulp
|
||||
lines = inputfile.readlines()
|
||||
# cache the string constants, numeric, and typedef constants
|
||||
# in separate lists
|
||||
strconsts = []
|
||||
strconstlen = 0
|
||||
errconsts = []
|
||||
nconsts = []
|
||||
nconstlen = 0
|
||||
typedefs = []
|
||||
apis = []
|
||||
# loop over the lines
|
||||
for n in range(len(lines)):
|
||||
line = lines[n]
|
||||
# remove white space at front and back
|
||||
myline = line.strip()
|
||||
# remove comment lines
|
||||
if "/*" in myline or "*/" in myline or myline.startswith("*"):
|
||||
n += 1
|
||||
continue
|
||||
# if the line starts with #define, then we want it
|
||||
if takeconst and myline.startswith("#define"):
|
||||
value = myline[8:]
|
||||
# skip some well-known unwanted values
|
||||
if value.startswith("PMIx"):
|
||||
continue
|
||||
if value.startswith("PMIX_HAVE_VISIB"):
|
||||
continue
|
||||
tokens = value.split()
|
||||
if len(tokens) >= 2:
|
||||
if tokens[1][0] == '"':
|
||||
strconsts.append(tokens[0])
|
||||
if len(tokens[0]) > strconstlen:
|
||||
strconstlen = len(tokens[0])
|
||||
elif "PMIX_ERR_" in value or tokens[1].startswith("-"):
|
||||
# numerical constant that looks just like a
|
||||
# string constant - i.e., PMIX_ERR_FOO...1
|
||||
# we output them in a separate section, but
|
||||
# consider them string constants
|
||||
errconsts.append(tokens[0])
|
||||
if len(tokens[0]) > strconstlen:
|
||||
strconstlen = len(tokens[0])
|
||||
elif tokens[1].isdigit() or tokens[1].startswith("UINT") or tokens[1].startswith("0x"):
|
||||
# values that were defined as UINT32_MAX need to be converted
|
||||
# to hex values as Python otherwise gets confused
|
||||
if tokens[1] == "UINT32_MAX":
|
||||
tokens[1] = "0xffffffff"
|
||||
elif "UINT32_MAX-1" in tokens[1]:
|
||||
tokens[1] = "0xfffffffe"
|
||||
elif "UINT32_MAX-2" in tokens[1]:
|
||||
tokens[1] = "0xfffffffd"
|
||||
elif "UINT32_MAX-3" in tokens[1]:
|
||||
tokens[1] = "0xfffffffc"
|
||||
elif "UINT8_MAX" in tokens[1]:
|
||||
tokens[1] = "0xff"
|
||||
nconsts.append([tokens[0], tokens[1]])
|
||||
if len(tokens[0]) > nconstlen:
|
||||
nconstlen = len(tokens[0])
|
||||
elif takeapis and myline.startswith("PMIX_EXPORT"):
|
||||
value = myline[12:].strip()
|
||||
# this is the name of an API - these
|
||||
# are frequently multi-line, so collect
|
||||
# all of them
|
||||
if ";" in value:
|
||||
value = value[:-1]
|
||||
# check for bool type - must be converted to bint
|
||||
value = value.replace("bool ", "bint ")
|
||||
# a single-line API might have a "void" arg
|
||||
# Python doesn't accept "void" as an arg, so
|
||||
# we have to "snip" it out
|
||||
start = value.find("(") + 1
|
||||
end = value.find(")")
|
||||
snip = value[start:end]
|
||||
if snip == "void":
|
||||
value = value[0:start] + value[end:]
|
||||
newapi = [value]
|
||||
apis.append(newapi)
|
||||
else:
|
||||
value = value.replace("bool ", "bint ")
|
||||
newapi = [value]
|
||||
apirunning = True
|
||||
while apirunning:
|
||||
n += 1
|
||||
value = lines[n].strip()
|
||||
# check for bool type - must be converted to bint
|
||||
value = value.replace("bool ", "bint ")
|
||||
if ";" in value:
|
||||
apirunning = False
|
||||
value = value[:-1]
|
||||
newapi.append(value)
|
||||
apis.append(newapi)
|
||||
elif takedtypes and myline.startswith("typedef"):
|
||||
# there are three types of typedef's in PMIx:
|
||||
#
|
||||
# 1. simple one-line typedef - e.g., "typedef int foo"
|
||||
#
|
||||
# 2. multi-line struct types
|
||||
#
|
||||
# 3. function definitions - by PMIx convention, these
|
||||
# always have an "fn_t" in the name
|
||||
#
|
||||
# 4. enum definitions
|
||||
#
|
||||
# start with the fourth option by looking for "enum"
|
||||
if "enum" in myline:
|
||||
# each line after this one should contain a name
|
||||
# so we just assign a value sequentially.
|
||||
counter = 0
|
||||
n += 1
|
||||
value = lines[n].strip()
|
||||
if ',' in value:
|
||||
value = value[:-1]
|
||||
while '}' not in value and n < len(lines):
|
||||
tokens[0] = value
|
||||
tokens[1] = str(counter)
|
||||
counter += 1
|
||||
nconsts.append([tokens[0], tokens[1]])
|
||||
if len(tokens[0]) > nconstlen:
|
||||
nconstlen = len(tokens[0])
|
||||
n += 1
|
||||
value = lines[n].strip()
|
||||
if ',' in value:
|
||||
value = value[:-1]
|
||||
# the termination line contains the type name
|
||||
# for this enum - declare it as integer here
|
||||
value = "typedef int " + value[2:]
|
||||
typedefs.append([value])
|
||||
# now address the first option - detectable by
|
||||
# having a semi-colon at the end of the line and
|
||||
# no "fn_t" or "cbfunc_t" in it
|
||||
elif ";" in myline and not "fn_t" in myline and not "cbfunc_t" in myline:
|
||||
value = myline[:-1]
|
||||
# check for bool type - must be converted to bint
|
||||
if "bool" in value:
|
||||
value.replace("bool ", "bint ")
|
||||
# check for pre-declaration statements of form
|
||||
# typedef struct foo foo
|
||||
ck = value.split()
|
||||
if len(ck) == 4 and ck[1] == "struct" and ck[2] == ck[3]:
|
||||
n += 1
|
||||
continue
|
||||
else:
|
||||
# check for a typedef that includes a named value
|
||||
# of either PMIX_MAX_NSLEN or PMIX_MAX_KEYLEN
|
||||
if "PMIX_MAX_NSLEN+1" in value:
|
||||
value = value.replace("PMIX_MAX_NSLEN+1", str(256))
|
||||
elif "PMIX_MAX_NSLEN" in value:
|
||||
value = value.replace("PMIX_MAX_NSLEN", str(255))
|
||||
elif "PMIX_MAX_KEYLEN+1" in value:
|
||||
value = value.replace("PMIX_MAX_KEYLEN+1", str(512))
|
||||
elif "PMIX_MAX_KEYLEN" in value:
|
||||
value = value.replace("PMIX_MAX_KEYLEN", str(511))
|
||||
typedefs.append([value])
|
||||
# now check the third option by looking for
|
||||
# "fn_t" or "cbfunc_t" in it
|
||||
elif "fn_t" in myline or "cbfunc_t" in myline:
|
||||
if ";" in myline:
|
||||
# this is a one-line function definition
|
||||
value = myline[:-1]
|
||||
# check for bool type - must be converted to bint
|
||||
if "bool" in value:
|
||||
value.replace("bool ", "bint ")
|
||||
typedefs.append([value])
|
||||
else:
|
||||
# this is a multi-line function definition
|
||||
# check for bool type - must be converted to bint
|
||||
if "bool" in myline:
|
||||
myline.replace("bool ", "bint ")
|
||||
newdef = [myline]
|
||||
defrunning = True
|
||||
while defrunning:
|
||||
n += 1
|
||||
value = lines[n].strip()
|
||||
# check for bool type - must be converted to bint
|
||||
if "bool" in value:
|
||||
value.replace("bool ", "bint ")
|
||||
if ";" in value:
|
||||
defrunning = False
|
||||
value = value[:-1]
|
||||
newdef.append(value)
|
||||
typedefs.append(newdef)
|
||||
# must be a multi-line struct type definition
|
||||
# we capture these in the typedef list
|
||||
# so we output their type definition
|
||||
else:
|
||||
# check for pre-declaration statements of form
|
||||
# typedef struct foo foo
|
||||
value = myline
|
||||
ck = value.split()
|
||||
if len(ck) == 4 and ck[1] == "struct" and ck[2] == ck[3]:
|
||||
n += 1
|
||||
continue
|
||||
else:
|
||||
newdef = []
|
||||
n += 1
|
||||
value = lines[n].strip()
|
||||
nbrk = 1
|
||||
while nbrk > 0:
|
||||
# avoid comments
|
||||
if "/*" in value or "*/" in value or value.startswith("*"):
|
||||
n += 1
|
||||
value = lines[n].strip()
|
||||
continue
|
||||
if "}" in value:
|
||||
nbrk -= 1
|
||||
if nbrk > 0:
|
||||
n += 1
|
||||
value = lines[n].strip()
|
||||
continue
|
||||
if "union" in value:
|
||||
# we have to create another definition that contains
|
||||
# just the union and then add that back into the
|
||||
# current typedef
|
||||
uniondef = []
|
||||
n += 1
|
||||
value = lines[n].strip()
|
||||
while "}" not in value:
|
||||
# terminate at the semi-colon
|
||||
idx = value.rfind(';')
|
||||
value = " " + value[:idx]
|
||||
# check for bool type - must be converted to bint
|
||||
if "bool" in value:
|
||||
value = value.replace("bool ", "bint ")
|
||||
elif "struct timeval " in value:
|
||||
value = value.replace("struct timeval", "timeval")
|
||||
# add it to the union def
|
||||
uniondef.append(value)
|
||||
n += 1
|
||||
value = lines[n].strip()
|
||||
# terminate at the semi-colon
|
||||
idx = value.rfind(';')
|
||||
value = value[:idx]
|
||||
# extract the name of the union
|
||||
idx = value.rfind(' ')
|
||||
value = value[idx+1:]
|
||||
# save this name
|
||||
lowname = value
|
||||
# capitalize the first letter
|
||||
value = value.title()
|
||||
# create the union definition - the output
|
||||
# routine will prepend a 'c'
|
||||
myvalue = "def union " + value + ":"
|
||||
uniondef.insert(0, myvalue)
|
||||
typedefs.append(uniondef)
|
||||
# add the union to the struct
|
||||
value = " " + value + " " + lowname
|
||||
newdef.append(value)
|
||||
nbrk -= 1
|
||||
n += 1
|
||||
value = lines[n].strip()
|
||||
continue
|
||||
# terminate at the semi-colon
|
||||
idx = value.rfind(';')
|
||||
value = " " + value[:idx]
|
||||
# check for bool type - must be converted to bint
|
||||
if "bool" in value:
|
||||
value = value.replace("bool ", "bint ")
|
||||
elif "struct timeval " in value:
|
||||
value = value.replace("struct timeval", "timeval")
|
||||
# we don't want any dimensions - if given, convert
|
||||
# to the corresponding value
|
||||
idx = value.find('[')
|
||||
if idx >= 0:
|
||||
# find the end of the dimension
|
||||
dim = value.rfind(']')
|
||||
dimstr = value[idx+1:dim]
|
||||
# have to do this manually
|
||||
if "MAX_KEYLEN" in dimstr:
|
||||
value = value[:idx] + "[512]" + value[dim+1:]
|
||||
elif "MAX_NSLEN" in dimstr:
|
||||
value = value[:idx] + "[256]" + value[dim+1:]
|
||||
else:
|
||||
print("BAD DIMENSION " + dimstr)
|
||||
exit(1)
|
||||
newdef.append(value)
|
||||
n += 1
|
||||
value = lines[n].strip()
|
||||
# we need to extract the type name
|
||||
value = "typedef struct " + value[2:]
|
||||
value = value[:-1] + ":"
|
||||
newdef.insert(0, value)
|
||||
typedefs.append(newdef)
|
||||
# only write the data sources once per file
|
||||
defsrc = False
|
||||
constsrc = False
|
||||
|
||||
# start by pretty-printing the string constants
|
||||
# prepended with an underscore to avoid conflicts
|
||||
# with the Python version of the name
|
||||
if takeconst and len(strconsts) > 0:
|
||||
if not defsrc:
|
||||
definitions.write("cdef extern from \"" + src + "\":\n")
|
||||
defsrc = True
|
||||
if not constsrc:
|
||||
constants.write("# " + src + "\n")
|
||||
constsrc = True
|
||||
definitions.write("\n # STRING CONSTANTS\n")
|
||||
for const in strconsts:
|
||||
defname = "_" + const
|
||||
definitions.write(" cdef const char* " + defname)
|
||||
for i in range (4 + strconstlen - len(const)):
|
||||
definitions.write(" ")
|
||||
definitions.write("\"" + const + "\"\n")
|
||||
# now output it into the constants file
|
||||
constants.write(const)
|
||||
for i in range (4 + strconstlen - len(const)):
|
||||
constants.write(" ")
|
||||
constants.write("= " + defname + "\n")
|
||||
# add some space
|
||||
definitions.write("\n")
|
||||
constants.write("\n")
|
||||
|
||||
if takeconst and len(errconsts) > 0:
|
||||
if not defsrc:
|
||||
definitions.write("cdef extern from \"" + src + "\":\n")
|
||||
defsrc = True
|
||||
if not constsrc:
|
||||
constants.write("# " + src + "\n")
|
||||
constsrc = True
|
||||
definitions.write("\n # ERROR CONSTANTS\n")
|
||||
for const in errconsts:
|
||||
defname = "_" + const
|
||||
definitions.write(" cdef int " + defname)
|
||||
for i in range (4 + strconstlen - len(const)):
|
||||
definitions.write(" ")
|
||||
definitions.write("\"" + const + "\"\n")
|
||||
# now output it into the constants file
|
||||
constants.write(const)
|
||||
for i in range (4 + strconstlen - len(const)):
|
||||
constants.write(" ")
|
||||
constants.write("= " + defname + "\n")
|
||||
# add some space
|
||||
definitions.write("\n")
|
||||
constants.write("\n")
|
||||
|
||||
if takeconst and len(nconsts) > 0:
|
||||
if not constsrc:
|
||||
constants.write("# " + src + "\n")
|
||||
constsrc = True
|
||||
# pretty-print the numeric constants
|
||||
for num in nconsts:
|
||||
constants.write(num[0])
|
||||
for i in range (4 + strconstlen - len(num[0])):
|
||||
constants.write(" ")
|
||||
constants.write("= " + num[1] + "\n")
|
||||
# add some space
|
||||
constants.write("\n")
|
||||
|
||||
# pretty-print any typedefs
|
||||
if takedtypes and len(typedefs) > 0:
|
||||
if not defsrc:
|
||||
definitions.write("cdef extern from \"" + src + "\":\n")
|
||||
defsrc = True
|
||||
definitions.write("\n # TYPEDEFS\n")
|
||||
for t in typedefs:
|
||||
if len(t) > 1:
|
||||
definitions.write("\n")
|
||||
definitions.write(" c" + t[0] + "\n")
|
||||
if len(t) > 1:
|
||||
# find the 2nd opening paren
|
||||
idx = t[0].find("(") + 1
|
||||
idx = t[0].find("(", idx) + 2
|
||||
for n in range(1, len(t)):
|
||||
definitions.write(" ")
|
||||
for m in range(idx):
|
||||
definitions.write(" ")
|
||||
definitions.write(t[n] + "\n")
|
||||
# add some space
|
||||
definitions.write("\n")
|
||||
|
||||
# pretty-print any APIs
|
||||
if takeapis and len(apis) > 0:
|
||||
if not defsrc:
|
||||
definitions.write("cdef extern from \"" + src + "\":\n")
|
||||
defsrc = True
|
||||
definitions.write("\n # APIS\n")
|
||||
for api in apis:
|
||||
definitions.write(" " + api[0] + "\n")
|
||||
if len(api) > 1:
|
||||
# find the opening paren
|
||||
idx = api[0].find("(") + 1
|
||||
for n in range(1, len(api)):
|
||||
definitions.write(" ")
|
||||
for m in range(idx):
|
||||
definitions.write(" ")
|
||||
definitions.write(api[n] + "\n")
|
||||
definitions.write("\n")
|
||||
return
|
||||
|
||||
def main():
|
||||
global takeconst, takeapis, takedtypes
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
|
||||
parser = OptionParser("usage: %prog [options]")
|
||||
debugGroup = OptionGroup(parser, "Debug Options")
|
||||
debugGroup.add_option("--debug",
|
||||
action="store_true", dest="debug", default=False,
|
||||
help="Output lots of debug messages while processing")
|
||||
debugGroup.add_option("--dryrun",
|
||||
action="store_true", dest="dryrun", default=False,
|
||||
help="Show commands, but do not execute them")
|
||||
parser.add_option_group(debugGroup)
|
||||
|
||||
execGroup = OptionGroup(parser, "Execution Options")
|
||||
execGroup.add_option("--src", dest="src",
|
||||
help="The directory where the PMIx header files will be found")
|
||||
execGroup.add_option("--constants",
|
||||
action="store_true", dest="constants", default=False,
|
||||
help="Translate constants")
|
||||
execGroup.add_option("--apis",
|
||||
action="store_true", dest="apis", default=False,
|
||||
help="Translate APIs")
|
||||
execGroup.add_option("--datatypes",
|
||||
action="store_true", dest="datatypes", default=False,
|
||||
help="Translate datatypes")
|
||||
parser.add_option_group(execGroup)
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
if not options.constants and not options.apis and not options.datatypes:
|
||||
takeconst = True
|
||||
takeapis = True
|
||||
takedtypes = True
|
||||
|
||||
if options.constants:
|
||||
takeconst = True
|
||||
if options.apis:
|
||||
takeapis = True
|
||||
if options.datatypes:
|
||||
takedtypes = True
|
||||
|
||||
if options.dryrun or options.debug:
|
||||
debug = True
|
||||
else:
|
||||
debug = False
|
||||
|
||||
if options.src:
|
||||
# see if the source directory exists
|
||||
if not os.path.exists(options.src):
|
||||
print("SOURCE directory",options.src,"does not exist")
|
||||
sys.exit(1)
|
||||
|
||||
if options.dryrun:
|
||||
constants = sys.stdout
|
||||
definitions = sys.stdout
|
||||
else:
|
||||
# open the .pxd file for the definitions
|
||||
# if the output file exists, remove it
|
||||
if os.path.exists("pmix_constants.pxd"):
|
||||
if debug:
|
||||
print("Remove pmix_constants.pxd")
|
||||
if not options.dryrun:
|
||||
os.remove("pmix_constants.pxd")
|
||||
elif debug:
|
||||
print("File pmix_constants.pxd not found")
|
||||
definitions = open("pmix_constants.pxd", "w+")
|
||||
# add the necessary imports
|
||||
definitions.write("from posix.types cimport *\n")
|
||||
definitions.write("from posix.time cimport *\n")
|
||||
definitions.write("from libc.stdint cimport *\n\n")
|
||||
|
||||
# open the .pxi file for the Python-level constants
|
||||
if os.path.exists("pmix_constants.pxi"):
|
||||
if debug:
|
||||
print("Remove pmix_constants.pxi")
|
||||
if not options.dryrun:
|
||||
os.remove("pmix_constants.pxi")
|
||||
elif debug:
|
||||
print("File pmix_constants.pxi not found")
|
||||
constants = open("pmix_constants.pxi", "w+")
|
||||
# add the necessary import and provide a little space for neatness
|
||||
constants.write("from pmix_constants cimport *\n\n")
|
||||
|
||||
# scan across the header files in the src directory
|
||||
# looking for constants and typedefs
|
||||
# add some space
|
||||
harvest_constants(options, "pmix_common.h", constants, definitions)
|
||||
definitions.write("\n\n")
|
||||
constants.write("\n\n")
|
||||
harvest_constants(options, "pmix.h", constants, definitions)
|
||||
# add some space
|
||||
definitions.write("\n\n")
|
||||
constants.write("\n\n")
|
||||
harvest_constants(options, "pmix_server.h", constants, definitions)
|
||||
# add some space
|
||||
definitions.write("\n\n")
|
||||
constants.write("\n\n")
|
||||
harvest_constants(options, "pmix_tool.h", constants, definitions)
|
||||
# add some space
|
||||
definitions.write("\n\n")
|
||||
constants.write("\n\n")
|
||||
harvest_constants(options, "pmix_sched.h", constants, definitions)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
1018
opal/mca/pmix/pmix4x/openpmix/bindings/python/pmix.pxi
Обычный файл
1018
opal/mca/pmix/pmix4x/openpmix/bindings/python/pmix.pxi
Обычный файл
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
2265
opal/mca/pmix/pmix4x/openpmix/bindings/python/pmix.pyx
Обычный файл
2265
opal/mca/pmix/pmix4x/openpmix/bindings/python/pmix.pyx
Обычный файл
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
47
opal/mca/pmix/pmix4x/openpmix/bindings/python/setup.py
Исполняемый файл
47
opal/mca/pmix/pmix4x/openpmix/bindings/python/setup.py
Исполняемый файл
@ -0,0 +1,47 @@
|
||||
from distutils.core import setup
|
||||
from distutils.extension import Extension
|
||||
from Cython.Build import cythonize
|
||||
from sys import platform, maxsize, version_info
|
||||
import os
|
||||
from subprocess import check_output, CalledProcessError
|
||||
|
||||
def getVersion():
|
||||
dir = os.path.dirname(__file__)
|
||||
vers_path = os.path.join(dir, '../../include', 'pmix_version.h')
|
||||
with open(vers_path) as verFile:
|
||||
lines = verFile.readlines()
|
||||
for l in lines:
|
||||
if 'MAJOR' in l:
|
||||
major = l.split()[2]
|
||||
major = major[:-1]
|
||||
elif 'MINOR' in l:
|
||||
minor = l.split()[2]
|
||||
minor = minor[:-1]
|
||||
elif 'RELEASE' in l:
|
||||
release = l.split()[2]
|
||||
release = release[:-1]
|
||||
vers = [major, minor, release]
|
||||
version = ".".join(vers)
|
||||
return version
|
||||
|
||||
setup(
|
||||
name = 'pypmix',
|
||||
version = getVersion(),
|
||||
url = 'https://pmix.org',
|
||||
license = '3-clause BSD',
|
||||
author = 'Ralph H. Castain',
|
||||
author_email = 'ralph.h.castain@intel.com',
|
||||
description = 'Python bindings for PMIx',
|
||||
classifiers = [
|
||||
'Development Status :: 1 - Under Construction',
|
||||
'Intended Audience :: Developers',
|
||||
'Topic :: HPC :: Parallel Programming :: System Management',
|
||||
'License :: 3-clause BSD',
|
||||
'Programming Language :: Python :: 3.4',
|
||||
'Programming Language :: Python :: 3.5',
|
||||
'Programming Language :: Python :: 3.6'],
|
||||
keywords = 'PMI PMIx HPC MPI SHMEM',
|
||||
platforms = 'any',
|
||||
ext_modules = cythonize([Extension("pmix", ["pmix.pyx"], libraries=["pmix"])],
|
||||
compiler_directives={'language_level': 3})
|
||||
)
|
@ -11,7 +11,7 @@ dnl University of Stuttgart. All rights reserved.
|
||||
dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
dnl All rights reserved.
|
||||
dnl Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2015-2019 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl $COPYRIGHT$
|
@ -664,7 +664,7 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
# -lrt might be needed for clock_gettime
|
||||
PMIX_SEARCH_LIBS_CORE([clock_gettime], [rt])
|
||||
|
||||
AC_CHECK_FUNCS([asprintf snprintf vasprintf vsnprintf strsignal socketpair strncpy_s usleep statfs statvfs getpeereid getpeerucred strnlen posix_fallocate tcgetpgrp setpgid ptsname openpty setenv])
|
||||
AC_CHECK_FUNCS([asprintf snprintf vasprintf vsnprintf strsignal socketpair strncpy_s usleep statfs statvfs getpeereid getpeerucred strnlen posix_fallocate tcgetpgrp setpgid ptsname openpty setenv fork execve waitpid])
|
||||
|
||||
# On some hosts, htonl is a define, so the AC_CHECK_FUNC will get
|
||||
# confused. On others, it's in the standard library, but stubbed with
|
||||
@ -729,6 +729,9 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
LDFLAGS="$LDFLAGS $THREAD_LDFLAGS"
|
||||
LIBS="$LIBS $THREAD_LIBS"
|
||||
|
||||
PMIX_WRAPPER_FLAGS_ADD([CFLAGS], [$THREAD_CFLAGS])
|
||||
PMIX_WRAPPER_FLAGS_ADD([LDFLAGS], [$THREAD_LDFLAGS])
|
||||
|
||||
#
|
||||
# What is the local equivalent of "ln -s"
|
||||
#
|
||||
@ -851,6 +854,18 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
CPPFLAGS="-I$PMIX_top_srcdir -I$PMIX_top_srcdir/src -I$PMIX_top_srcdir/include $CPPFLAGS"
|
||||
fi
|
||||
|
||||
############################################################################
|
||||
# final wrapper compiler config
|
||||
############################################################################
|
||||
opal_show_subtitle "Wrapper compiler final setup"
|
||||
|
||||
# The PMIx wrapper script (i.e., not the C-compiled
|
||||
# executables) need perl.
|
||||
AC_PATH_PROG(PERL, perl, perl)
|
||||
|
||||
PMIX_SETUP_WRAPPER_FINAL
|
||||
|
||||
############################################################################
|
||||
# pmixdatadir, pmixlibdir, and pmixinclude are essentially the same as
|
||||
# pkg*dir, but will always be */pmix.
|
||||
pmixdatadir='${datadir}/pmix'
|
||||
@ -913,6 +928,9 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
pmix_config_prefix[src/tools/plookup/Makefile]
|
||||
pmix_config_prefix[src/tools/pps/Makefile]
|
||||
pmix_config_prefix[src/tools/pattrs/Makefile]
|
||||
pmix_config_prefix[src/tools/wrapper/Makefile]
|
||||
pmix_config_prefix[src/tools/wrapper/pmixcc-wrapper-data.txt]
|
||||
pmix_config_prefix[src/tools/wrapper/pmix.pc]
|
||||
)
|
||||
|
||||
# publish any embedded flags so external wrappers can use them
|
@ -1,7 +1,7 @@
|
||||
dnl -*- shell-script -*-
|
||||
dnl
|
||||
dnl Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
|
||||
dnl Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2019 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl
|
@ -10,7 +10,7 @@ dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
dnl University of Stuttgart. All rights reserved.
|
||||
dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
dnl All rights reserved.
|
||||
dnl Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2014 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2016-2019 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl $COPYRIGHT$
|
@ -16,7 +16,7 @@ dnl Copyright (c) 2012-2017 Los Alamos National Security, LLC. All rights
|
||||
dnl reserved.
|
||||
dnl Copyright (c) 2015-2019 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl Copyright (c) 2018 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2018-2019 Intel, Inc. All rights reserved.
|
||||
dnl $COPYRIGHT$
|
||||
dnl
|
||||
dnl Additional copyrights may follow
|
||||
@ -135,6 +135,11 @@ AC_DEFUN([PMIX_SETUP_CC],[
|
||||
|
||||
PMIX_VAR_SCOPE_PUSH([pmix_prog_cc_c11_helper__Thread_local_available pmix_prog_cc_c11_helper_atomic_var_available pmix_prog_cc_c11_helper__Atomic_available pmix_prog_cc_c11_helper__static_assert_available pmix_prog_cc_c11_helper__Generic_available pmix_prog_cc__thread_available pmix_prog_cc_c11_helper_atomic_fetch_xor_explicit_available])
|
||||
|
||||
# AC_PROG_CC_C99 changes CC (instead of CFLAGS) so save CC (without c99
|
||||
# flags) for use in our wrappers.
|
||||
WRAPPER_CC="$CC"
|
||||
AC_SUBST([WRAPPER_CC])
|
||||
|
||||
PMIX_PROG_CC_C11
|
||||
|
||||
if test $pmix_cv_c11_supported = no ; then
|
@ -108,11 +108,14 @@ AC_DEFUN([_PMIX_HWLOC_EXTERNAL],[
|
||||
[pmix_hwloc_support=0])
|
||||
|
||||
AS_IF([test "$pmix_hwloc_standard_header_location" != "yes"],
|
||||
[PMIX_FLAGS_APPEND_UNIQ(CPPFLAGS, $pmix_hwloc_CPPFLAGS)])
|
||||
[PMIX_FLAGS_APPEND_UNIQ(CPPFLAGS, $pmix_hwloc_CPPFLAGS)
|
||||
PMIX_WRAPPER_FLAGS_ADD(CPPFLAGS, $pmix_hwloc_CPPFLAGS)])
|
||||
|
||||
AS_IF([test "$pmix_hwloc_standard_lib_location" != "yes"],
|
||||
[PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_hwloc_LDFLAGS)])
|
||||
[PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_hwloc_LDFLAGS)
|
||||
PMIX_WRAPPER_FLAGS_ADD(LDFLAGS, $pmix_hwloc_LDFLAGS)])
|
||||
PMIX_FLAGS_APPEND_UNIQ(LIBS, $pmix_hwloc_LIBS)
|
||||
PMIX_WRAPPER_FLAGS_ADD(LIBS, $pmix_hwloc_LIBS)
|
||||
fi
|
||||
|
||||
if test ! -z "$with_hwloc" && test "$with_hwloc" != "no" && test "$pmix_hwloc_support" != "1"; then
|
@ -72,12 +72,15 @@ AC_DEFUN([PMIX_LIBEV_CONFIG],[
|
||||
LIBS="$pmix_check_libev_save_LIBS"])
|
||||
|
||||
AS_IF([test $pmix_libev_support -eq 1],
|
||||
[LIBS="$LIBS $pmix_libev_LIBS"
|
||||
[PMIX_FLAGS_APPEND_UNIQ(LIBS, $pmix_libev_LIBS)
|
||||
PMIX_WRAPPER_FLAGS_ADD(LIBS, $pmix_libev_LIBS)
|
||||
|
||||
AS_IF([test "$pmix_libev_standard_header_location" != "yes"],
|
||||
[CPPFLAGS="$CPPFLAGS $pmix_libev_CPPFLAGS"])
|
||||
[PMIX_FLAGS_APPEND_UNIQ(CPPFLAGS, $pmix_libev_CPPFLAGS)
|
||||
PMIX_WRAPPER_FLAGS_ADD(CPPFLAGS, $pmix_libev_CPPFLAGS)])
|
||||
AS_IF([test "$pmix_libev_standard_lib_location" != "yes"],
|
||||
[LDFLAGS="$LDFLAGS $pmix_libev_LDFLAGS"])])
|
||||
[PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_libevent_LDFLAGS)
|
||||
PMIX_WRAPPER_FLAGS_ADD(LDFLAGS, $pmix_libevent_LDFLAGS)])])
|
||||
|
||||
AC_MSG_CHECKING([will libev support be built])
|
||||
if test $pmix_libev_support -eq 1; then
|
@ -118,8 +118,11 @@ AC_DEFUN([_PMIX_LIBEVENT_EXTERNAL],[
|
||||
|
||||
AS_IF([test "$pmix_event_defaults" = "no"],
|
||||
[PMIX_FLAGS_APPEND_UNIQ(CPPFLAGS, $pmix_libevent_CPPFLAGS)
|
||||
PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_libevent_LDFLAGS)])
|
||||
PMIX_WRAPPER_FLAGS_ADD(CPPFLAGS, $pmix_libevent_CPPFLAGS)
|
||||
PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_libevent_LDFLAGS)
|
||||
PMIX_WRAPPER_FLAGS_ADD(LDFLAGS, $pmix_libevent_LDFLAGS)])
|
||||
PMIX_FLAGS_APPEND_UNIQ(LIBS, $pmix_libevent_LIBS)
|
||||
PMIX_WRAPPER_FLAGS_ADD(LIBS, $pmix_libevent_LIBS)
|
||||
|
||||
if test $pmix_libevent_support -eq 1; then
|
||||
# Ensure that this libevent has the symbol
|
311
opal/mca/pmix/pmix4x/openpmix/config/pmix_setup_wrappers.m4
Обычный файл
311
opal/mca/pmix/pmix4x/openpmix/config/pmix_setup_wrappers.m4
Обычный файл
@ -0,0 +1,311 @@
|
||||
dnl -*- shell-script -*-
|
||||
dnl
|
||||
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
dnl University Research and Technology
|
||||
dnl Corporation. All rights reserved.
|
||||
dnl Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
dnl of Tennessee Research Foundation. All rights
|
||||
dnl reserved.
|
||||
dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
dnl University of Stuttgart. All rights reserved.
|
||||
dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
dnl All rights reserved.
|
||||
dnl Copyright (c) 2006-2010 Oracle and/or its affiliates. All rights reserved.
|
||||
dnl Copyright (c) 2009-2016 Cisco Systems, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2015-2017 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl Copyright (c) 2016 IBM Corporation. All rights reserved.
|
||||
dnl Copyright (c) 2017-2019 Intel, Inc. All rights reserved.
|
||||
dnl $COPYRIGHT$
|
||||
dnl
|
||||
dnl Additional copyrights may follow
|
||||
dnl
|
||||
dnl $HEADER$
|
||||
dnl
|
||||
|
||||
# PMIX_WRAPPER_FLAGS_ADD(variable, new_argument)
|
||||
# ----------------------------------------------
|
||||
# Add new_argument to the list of arguments for variable in the
|
||||
# wrapper compilers, if it's not already there. For example:
|
||||
# PMIX_WRAPPER_FLAGS_ADD(CFLAGS, "-pthread")
|
||||
# will add -pthread to the list of CFLAGS the wrappers use when invoked.
|
||||
#
|
||||
# This macro MAY NOT be invoked from configure macros for MCA components.
|
||||
# See the comment in SETUP_WRAPPER_INIT (below) for more information.
|
||||
AC_DEFUN([PMIX_WRAPPER_FLAGS_ADD], [
|
||||
m4_ifdef([mca_component_configure_active],
|
||||
[m4_fatal([PMIX_WRAPPER_FLAGS_ADD can not be called from a component configure])])
|
||||
m4_if([$1], [CPPFLAGS], [PMIX_FLAGS_APPEND_UNIQ([wrapper_extra_cppflags], [$2])],
|
||||
[$1], [CFLAGS], [PMIX_FLAGS_APPEND_UNIQ([wrapper_extra_cflags], [$2])],
|
||||
[$1], [LDFLAGS], [PMIX_FLAGS_APPEND_UNIQ([wrapper_extra_ldflags], [$2])],
|
||||
[$1], [LIBS], [PMIX_FLAGS_APPEND_UNIQ([wrapper_extra_libs], [$2])],
|
||||
[m4_fatal([Unknown wrapper flag type $1])])
|
||||
])
|
||||
|
||||
|
||||
# PMIX_SETUP_WRAPPER_INIT()
|
||||
# -------------------------
|
||||
# Setup wrapper compiler configuration information. Should be called early to
|
||||
# prevent lots of calculations and then an abort for a silly user typo. This
|
||||
# macro works in pair with PMIX_SETUP_WRAPPER_FINAL, which should be called
|
||||
# almost at the end of configure (after the last call to PMIX_WRAPPER_FLAGS_ADD
|
||||
# and after the MCA system has been setup).
|
||||
#
|
||||
# The wrapper compiler arguments are a little fragile and should NOT
|
||||
# be edited by configure directly. Instead, main configure should use
|
||||
# PMIX_WRAPPER_FLAGS_ADD.
|
||||
#
|
||||
# When building statically, the MCA system will add
|
||||
# <framework>_<component>_WRAPPER_EXTRA_{LDFLAGS, LIBS} if set and try
|
||||
# to add <framework>_<component>_{LDFLAGS, LIBS} (if not an external
|
||||
# configure) to the wrapper LDFLAGS and LIBS. Any arguments in
|
||||
# <framework>_<component>_WRAPPER_EXTRA_CPPFLAGS are passed to the
|
||||
# wrapper compilers IF AND ONLY IF the framework was a STOP_AT_FIRST
|
||||
# framework, the component is a static component, and devel headers
|
||||
# are installed. Note that MCA components are ONLY allowed to
|
||||
# (indirectly) influence the wrapper CPPFLAGS, LDFLAGS, and LIBS.
|
||||
# That is, a component may not influence CFLAGS, CXXFLAGS, or FCFLAGS.
|
||||
#
|
||||
# Notes:
|
||||
# * Keep user flags separate as 1) they should have no influence
|
||||
# over build and 2) they don't go through the uniqification we do
|
||||
# with the other wrapper compiler options
|
||||
# * While the user (the person who runs configure) is allowed to set
|
||||
# <flag>_prefix, configure is not. There's no known use case for
|
||||
# doing so, and we'd like to force the issue.
|
||||
AC_DEFUN([PMIX_SETUP_WRAPPER_INIT],[
|
||||
AC_ARG_WITH([wrapper-cflags],
|
||||
[AC_HELP_STRING([--with-wrapper-cflags],
|
||||
[Extra flags to add to CFLAGS when using mpicc])])
|
||||
AS_IF([test "$with_wrapper_cflags" = "yes" || test "$with_wrapper_cflags" = "no"],
|
||||
[AC_MSG_ERROR([--with-wrapper-cflags must have an argument.])])
|
||||
|
||||
AC_ARG_WITH([wrapper-cflags-prefix],
|
||||
[AC_HELP_STRING([--with-wrapper-cflags-prefix],
|
||||
[Extra flags (before user flags) to add to CFLAGS when using mpicc])])
|
||||
AS_IF([test "$with_wrapper_cflags_prefix" = "yes" || test "$with_wrapper_cflags_prefix" = "no"],
|
||||
[AC_MSG_ERROR([--with-wrapper-cflags-prefix must have an argument.])])
|
||||
|
||||
AC_ARG_WITH([wrapper-ldflags],
|
||||
[AC_HELP_STRING([--with-wrapper-ldflags],
|
||||
[Extra flags to add to LDFLAGS when using wrapper compilers])])
|
||||
AS_IF([test "$with_wrapper_ldflags" = "yes" || test "$with_wrapper_ldflags" = "no"],
|
||||
[AC_MSG_ERROR([--with-wrapper-ldflags must have an argument.])])
|
||||
|
||||
AC_ARG_WITH([wrapper-libs],
|
||||
[AC_HELP_STRING([--with-wrapper-libs],
|
||||
[Extra flags to add to LIBS when using wrapper compilers])])
|
||||
AS_IF([test "$with_wrapper_libs" = "yes" || test "$with_wrapper_libs" = "no"],
|
||||
[AC_MSG_ERROR([--with-wrapper-libs must have an argument.])])
|
||||
|
||||
AC_MSG_CHECKING([if want wrapper compiler rpath support])
|
||||
AC_ARG_ENABLE([wrapper-rpath],
|
||||
[AS_HELP_STRING([--enable-wrapper-rpath],
|
||||
[enable rpath/runpath support in the wrapper compilers (default=yes)])])
|
||||
AS_IF([test "$enable_wrapper_rpath" != "no"], [enable_wrapper_rpath=yes])
|
||||
AC_MSG_RESULT([$enable_wrapper_rpath])
|
||||
|
||||
AC_MSG_CHECKING([if want wrapper compiler runpath support])
|
||||
AC_ARG_ENABLE([wrapper-runpath],
|
||||
[AS_HELP_STRING([--enable-wrapper-runpath],
|
||||
[enable runpath in the wrapper compilers if linker supports it (default: enabled, unless wrapper-rpath is disabled).])])
|
||||
AS_IF([test "$enable_wrapper_runpath" != "no"], [enable_wrapper_runpath=yes])
|
||||
AC_MSG_RESULT([$enable_wrapper_runpath])
|
||||
|
||||
AS_IF([test "$enable_wrapper_rpath" = "no" && test "$enable_wrapper_runpath" = "yes"],
|
||||
[AC_MSG_ERROR([--enable-wrapper-runpath cannot be selected with --disable-wrapper-rpath])])
|
||||
])
|
||||
|
||||
# PMIX_LIBTOOL_CONFIG(libtool-variable, result-variable,
|
||||
# libtool-tag, extra-code)
|
||||
# Retrieve information from the generated libtool
|
||||
AC_DEFUN([PMIX_LIBTOOL_CONFIG],[
|
||||
PMIX_VAR_SCOPE_PUSH([rpath_script rpath_outfile])
|
||||
# Output goes into globally-visible variable. Run this in a
|
||||
# sub-process so that we don't pollute the current process
|
||||
# environment.
|
||||
rpath_script=conftest.$$.sh
|
||||
rpath_outfile=conftest.$$.out
|
||||
rm -f $rpath_script $rpath_outfile
|
||||
cat > $rpath_script <<EOF
|
||||
#!/bin/sh
|
||||
|
||||
# Slurp in the libtool config into my environment
|
||||
|
||||
# Apparently, "libtoool --config" calls "exit", so we can't source it
|
||||
# (because if script A sources script B, and B calls "exit", then both
|
||||
# B and A will exit). Instead, we have to send the output to a file
|
||||
# and then source that.
|
||||
$PMIX_TOP_BUILDDIR/libtool $3 --config > $rpath_outfile
|
||||
|
||||
chmod +x $rpath_outfile
|
||||
. ./$rpath_outfile
|
||||
rm -f $rpath_outfile
|
||||
|
||||
# Evaluate \$$1, and substitute in LIBDIR for \$libdir
|
||||
$4
|
||||
flags="\`eval echo \$$1\`"
|
||||
echo \$flags
|
||||
|
||||
# Done
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x $rpath_script
|
||||
$2=`./$rpath_script`
|
||||
rm -f $rpath_script
|
||||
PMIX_VAR_SCOPE_POP
|
||||
])
|
||||
|
||||
# Check to see whether the linker supports DT_RPATH. We'll need to
|
||||
# use config.rpath to find the flags that it needs, if it does (see
|
||||
# comments in config.rpath for an explanation of where it came from).
|
||||
AC_DEFUN([PMIX_SETUP_RPATH],[
|
||||
PMIX_VAR_SCOPE_PUSH([rpath_libdir_save])
|
||||
AC_MSG_CHECKING([if linker supports RPATH])
|
||||
PMIX_LIBTOOL_CONFIG([hardcode_libdir_flag_spec],[rpath_args],[],[libdir=LIBDIR])
|
||||
|
||||
AS_IF([test -n "$rpath_args"],
|
||||
[WRAPPER_RPATH_SUPPORT=rpath
|
||||
PMIX_LIBTOOL_CONFIG([hardcode_libdir_flag_spec],[rpath_fc_args],[--tag=FC],[libdir=LIBDIR])
|
||||
AC_MSG_RESULT([yes ($rpath_args + $rpath_fc_args)])],
|
||||
[WRAPPER_RPATH_SUPPORT=unnecessary
|
||||
AC_MSG_RESULT([yes (no extra flags needed)])])
|
||||
|
||||
PMIX_VAR_SCOPE_POP
|
||||
|
||||
# If we found RPATH support, check for RUNPATH support, too
|
||||
AS_IF([test "$WRAPPER_RPATH_SUPPORT" = "rpath"],
|
||||
[PMIX_SETUP_RUNPATH])
|
||||
])
|
||||
|
||||
# Check to see if the linker supports the DT_RUNPATH flags via
|
||||
# --enable-new-dtags (a GNU ld-specific option). These flags are more
|
||||
# social than DT_RPATH -- they can be overridden by LD_LIBRARY_PATH
|
||||
# (where a regular DT_RPATH cannot).
|
||||
#
|
||||
# If DT_RUNPATH is supported, then we'll use *both* the RPATH and
|
||||
# RUNPATH flags in the LDFLAGS.
|
||||
AC_DEFUN([PMIX_SETUP_RUNPATH],[
|
||||
PMIX_VAR_SCOPE_PUSH([LDFLAGS_save wl_fc])
|
||||
|
||||
# Set the output in $runpath_args
|
||||
runpath_args=
|
||||
LDFLAGS_save=$LDFLAGS
|
||||
LDFLAGS="$LDFLAGS -Wl,--enable-new-dtags"
|
||||
AS_IF([test x"$enable_wrapper_runpath" = x"yes"],
|
||||
[AC_LANG_PUSH([C])
|
||||
AC_MSG_CHECKING([if linker supports RUNPATH])
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 7;])],
|
||||
[WRAPPER_RPATH_SUPPORT=runpath
|
||||
runpath_args="-Wl,--enable-new-dtags"
|
||||
AC_MSG_RESULT([yes (-Wl,--enable-new-dtags)])],
|
||||
[AC_MSG_RESULT([no])])
|
||||
AC_LANG_POP([C])])
|
||||
LDFLAGS=$LDFLAGS_save
|
||||
|
||||
PMIX_VAR_SCOPE_POP
|
||||
])
|
||||
|
||||
# Called to find all -L arguments in the LDFLAGS and add in RPATH args
|
||||
# for each of them. Then also add in an RPATH for @{libdir} (which
|
||||
# will be replaced by the wrapper compile to the installdir libdir at
|
||||
# runtime), and the RUNPATH args, if we have them.
|
||||
AC_DEFUN([RPATHIFY_LDFLAGS_INTERNAL],[
|
||||
PMIX_VAR_SCOPE_PUSH([rpath_out rpath_dir rpath_tmp])
|
||||
AS_IF([test "$enable_wrapper_rpath" = "yes" && test "$WRAPPER_RPATH_SUPPORT" != "disabled" && test "$WRAPPER_RPATH_SUPPORT" != "unnecessary"], [
|
||||
rpath_out=""
|
||||
for val in ${$1}; do
|
||||
case $val in
|
||||
-L*)
|
||||
rpath_dir=`echo $val | cut -c3-`
|
||||
rpath_tmp=`echo ${$2} | sed -e s@LIBDIR@$rpath_dir@`
|
||||
rpath_out="$rpath_out $rpath_tmp"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Now add in the RPATH args for @{libdir}, and the RUNPATH args
|
||||
rpath_tmp=`echo ${$2} | sed -e s/LIBDIR/@{libdir}/`
|
||||
$1="${$1} $rpath_out $rpath_tmp ${$3}"
|
||||
])
|
||||
PMIX_VAR_SCOPE_POP
|
||||
])
|
||||
|
||||
AC_DEFUN([RPATHIFY_LDFLAGS],[RPATHIFY_LDFLAGS_INTERNAL([$1], [rpath_args], [runpath_args])])
|
||||
|
||||
AC_DEFUN([RPATHIFY_FC_LDFLAGS],[RPATHIFY_LDFLAGS_INTERNAL([$1], [rpath_fc_args], [runpath_fc_args])])
|
||||
|
||||
dnl
|
||||
dnl Avoid some repetitive code below
|
||||
dnl
|
||||
AC_DEFUN([_PMIX_SETUP_WRAPPER_FINAL_PKGCONFIG],[
|
||||
AC_MSG_CHECKING([for $1 pkg-config LDFLAGS])
|
||||
$1_PKG_CONFIG_LDFLAGS=`echo "$$1_WRAPPER_EXTRA_LDFLAGS" | sed -e 's/@{libdir}/\${libdir}/g'`
|
||||
AC_SUBST([$1_PKG_CONFIG_LDFLAGS])
|
||||
AC_MSG_RESULT([$$1_PKG_CONFIG_LDFLAGS])
|
||||
])
|
||||
|
||||
|
||||
# PMIX_SETUP_WRAPPER_FINAL()
|
||||
# ---------------------------
|
||||
AC_DEFUN([PMIX_SETUP_WRAPPER_FINAL],[
|
||||
|
||||
# Setup RPATH support, if desired
|
||||
WRAPPER_RPATH_SUPPORT=disabled
|
||||
AS_IF([test "$enable_wrapper_rpath" = "yes"],
|
||||
[PMIX_SETUP_RPATH])
|
||||
AS_IF([test "$enable_wrapper_rpath" = "yes" && test "$WRAPPER_RPATH_SUPPORT" = "disabled"],
|
||||
[AC_MSG_WARN([RPATH support requested but not available])
|
||||
AC_MSG_ERROR([Cannot continue])])
|
||||
|
||||
# Note that we have to setup <package>_PKG_CONFIG_LDFLAGS for the
|
||||
# pkg-config files to parallel the
|
||||
# <package>_WRAPPER_EXTRA_LDFLAGS. This is because pkg-config
|
||||
# will not understand the @{libdir} notation in
|
||||
# *_WRAPPER_EXTRA_LDFLAGS; we have to translate it to ${libdir}.
|
||||
|
||||
# We now have all relevant flags. Substitute them in everywhere.
|
||||
AC_MSG_CHECKING([for PMIX CPPFLAGS])
|
||||
if test "$WANT_INSTALL_HEADERS" = "1" ; then
|
||||
PMIX_WRAPPER_EXTRA_CPPFLAGS='-I${includedir}'
|
||||
fi
|
||||
PMIX_WRAPPER_EXTRA_CPPFLAGS="$PMIX_WRAPPER_EXTRA_CPPFLAGS $pmix_mca_wrapper_extra_cppflags $wrapper_extra_cppflags $with_wrapper_cppflags"
|
||||
PMIX_FLAGS_UNIQ(PMIX_WRAPPER_EXTRA_CPPFLAGS)
|
||||
AC_SUBST([PMIX_WRAPPER_EXTRA_CPPFLAGS])
|
||||
AC_MSG_RESULT([$PMIX_WRAPPER_EXTRA_CPPFLAGS])
|
||||
|
||||
AC_MSG_CHECKING([for PMIX CFLAGS])
|
||||
PMIX_WRAPPER_EXTRA_CFLAGS="$wrapper_extra_cflags $with_wrapper_cflags"
|
||||
PMIX_FLAGS_UNIQ(PMIX_WRAPPER_EXTRA_CFLAGS)
|
||||
AC_SUBST([PMIX_WRAPPER_EXTRA_CFLAGS])
|
||||
AC_MSG_RESULT([$PMIX_WRAPPER_EXTRA_CFLAGS])
|
||||
|
||||
AC_MSG_CHECKING([for PMIX CFLAGS_PREFIX])
|
||||
PMIX_WRAPPER_EXTRA_CFLAGS_PREFIX="$with_wrapper_cflags_prefix"
|
||||
PMIX_FLAGS_UNIQ(PMIX_WRAPPER_EXTRA_CFLAGS_PREFIX)
|
||||
AC_SUBST([PMIX_WRAPPER_EXTRA_CFLAGS_PREFIX])
|
||||
AC_MSG_RESULT([$PMIX_WRAPPER_EXTRA_CFLAGS_PREFIX])
|
||||
|
||||
AC_MSG_CHECKING([for PMIX LDFLAGS])
|
||||
PMIX_WRAPPER_EXTRA_LDFLAGS="$pmix_mca_wrapper_extra_ldflags $wrapper_extra_ldflags $with_wrapper_ldflags"
|
||||
PMIX_FLAGS_UNIQ(PMIX_WRAPPER_EXTRA_LDFLAGS)
|
||||
RPATHIFY_LDFLAGS([PMIX_WRAPPER_EXTRA_LDFLAGS])
|
||||
AC_SUBST([PMIX_WRAPPER_EXTRA_LDFLAGS])
|
||||
AC_MSG_RESULT([$PMIX_WRAPPER_EXTRA_LDFLAGS])
|
||||
|
||||
# Convert @{libdir} to ${libdir} for pkg-config
|
||||
_PMIX_SETUP_WRAPPER_FINAL_PKGCONFIG([PMIX])
|
||||
|
||||
# wrapper_extra_libs doesn't really get populated until after the mca system runs
|
||||
# since most of the libs come from libtool. So this is the first time we can
|
||||
# uniq them. ROMIO in particular adds lots of things already in wrapper_extra_libs,
|
||||
# and this cleans the duplication up a bunch. Always add everything the user
|
||||
# asked for, as they know better than us.
|
||||
AC_MSG_CHECKING([for PMIX LIBS])
|
||||
PMIX_WRAPPER_EXTRA_LIBS="$pmix_mca_wrapper_extra_libs"
|
||||
PMIX_FLAGS_APPEND_UNIQ([PMIX_WRAPPER_EXTRA_LIBS], [$wrapper_extra_libs])
|
||||
PMIX_WRAPPER_EXTRA_LIBS="$PMIX_WRAPPER_EXTRA_LIBS $with_wrapper_libs"
|
||||
PMIX_FLAGS_UNIQ(PMIX_WRAPPER_EXTRA_LIBS)
|
||||
AC_SUBST([PMIX_WRAPPER_EXTRA_LIBS])
|
||||
AC_MSG_RESULT([$PMIX_WRAPPER_EXTRA_LIBS])
|
||||
])
|
@ -176,6 +176,7 @@ AS_IF([test ! -z "$enable_static" && test "$enable_static" = "yes"],
|
||||
|
||||
AM_ENABLE_SHARED
|
||||
AM_DISABLE_STATIC
|
||||
PMIX_SETUP_WRAPPER_INIT
|
||||
|
||||
# This did not exist pre AM 1.11.x (where x is somewhere >0 and <3),
|
||||
# but it is necessary in AM 1.12.x.
|
@ -14,7 +14,7 @@
|
||||
# Copyright (c) 2010-2011 Oak Ridge National Labs. All rights reserved.
|
||||
# Copyright (c) 2013-2016 Los Alamos National Security, Inc. All rights
|
||||
# reserved.
|
||||
# Copyright (c) 2013-2016 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -30,7 +30,8 @@ EXTRA_DIST = \
|
||||
pmix-release.sh \
|
||||
pmix.spec \
|
||||
update-my-copyright.pl \
|
||||
whitespace-purge.sh
|
||||
whitespace-purge.sh \
|
||||
make_manpage.pl
|
||||
|
||||
include perf_tools/Makefile.include
|
||||
|
56
opal/mca/pmix/pmix4x/openpmix/contrib/make_manpage.pl
Исполняемый файл
56
opal/mca/pmix/pmix4x/openpmix/contrib/make_manpage.pl
Исполняемый файл
@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# Copyright (c) 2015 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2016-2019 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Subroutine to generate a bunch of Fortran declarations and symbols
|
||||
#
|
||||
|
||||
use strict;
|
||||
|
||||
use Getopt::Long;
|
||||
|
||||
my $package_name;
|
||||
my $package_version;
|
||||
my $pmix_date;
|
||||
my $input;
|
||||
my $output;
|
||||
my $help_arg = 0;
|
||||
|
||||
&Getopt::Long::Configure("bundling");
|
||||
my $ok = Getopt::Long::GetOptions("package-name=s" => \$package_name,
|
||||
"package-version=s" => \$package_version,
|
||||
"pmix-date=s" => \$pmix_date,
|
||||
"input=s" => \$input,
|
||||
"output=s" => \$output);
|
||||
|
||||
if ($help_arg || !$ok ||
|
||||
!defined($input) ||
|
||||
!defined($output) ||
|
||||
!defined($package_name) ||
|
||||
!defined($package_version) ||
|
||||
!defined($pmix_date)) {
|
||||
print "Usage: $0 --package-name=<package name> --package-version=<package version> --pmix-date=<pmix date> --input=<input file> --output=<output file>\n";
|
||||
exit(1 - $ok);
|
||||
}
|
||||
|
||||
open(FILE, $input) ||
|
||||
die "Can't open $input";
|
||||
my $file;
|
||||
$file .= $_
|
||||
while(<FILE>);
|
||||
close(FILE);
|
||||
|
||||
$file =~ s/#PACKAGE_NAME#/$package_name/g;
|
||||
$file =~ s/#PACKAGE_VERSION#/$package_version/g;
|
||||
$file =~ s/#PMIX_DATE#/$pmix_date/g;
|
||||
|
||||
open(FILE, ">$output") ||
|
||||
die "Can't open $output";
|
||||
print FILE $file;
|
||||
close(FILE);
|
||||
|
||||
exit(0);
|
@ -12,7 +12,7 @@
|
||||
# Copyright (c) 2006-2016 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2013 Mellanox Technologies, Inc.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2015-2018 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2015 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
@ -192,7 +192,7 @@
|
||||
|
||||
Summary: An extended/exascale implementation of PMI
|
||||
Name: %{?_name:%{_name}}%{!?_name:pmix}
|
||||
Version: 4.0.0
|
||||
Version: 4.0.0a1
|
||||
Release: 1%{?dist}
|
||||
License: BSD
|
||||
Group: Development/Libraries
|
215
opal/mca/pmix/pmix4x/openpmix/examples/dmodex.c
Обычный файл
215
opal/mca/pmix/pmix4x/openpmix/examples/dmodex.c
Обычный файл
@ -0,0 +1,215 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2004-2011 The University of Tennessee and The University
|
||||
* of Tennessee Research Foundation. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2006-2013 Los Alamos National Security, LLC.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Mellanox Technologies, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include <pmix.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
|
||||
static uint32_t nprocs;
|
||||
static pmix_proc_t myproc;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int rc;
|
||||
pmix_value_t value;
|
||||
pmix_value_t *val = &value;
|
||||
char *tmp;
|
||||
pmix_proc_t proc;
|
||||
uint32_t n, k, nlocal;
|
||||
bool local, all_local;
|
||||
char **peers;
|
||||
pmix_rank_t *locals;
|
||||
uint8_t j;
|
||||
|
||||
/* init us */
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Init(&myproc, NULL, 0))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Init failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
exit(0);
|
||||
}
|
||||
fprintf(stderr, "Client ns %s rank %d: Running\n", myproc.nspace, myproc.rank);
|
||||
|
||||
/* get our job size */
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_JOB_SIZE, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get job size failed: %s\n",
|
||||
myproc.nspace, myproc.rank, PMIx_Error_string(rc));
|
||||
goto done;
|
||||
}
|
||||
nprocs = val->data.uint32;
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
fprintf(stderr, "Client %s:%d job size %d\n", myproc.nspace, myproc.rank, nprocs);
|
||||
|
||||
/* put a few values */
|
||||
(void)asprintf(&tmp, "%s-%d-internal", myproc.nspace, myproc.rank);
|
||||
value.type = PMIX_UINT32;
|
||||
value.data.uint32 = 1234;
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Store_internal(&myproc, tmp, &value))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Store_internal failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
goto done;
|
||||
}
|
||||
|
||||
(void)asprintf(&tmp, "%s-%d-local", myproc.nspace, myproc.rank);
|
||||
value.type = PMIX_UINT64;
|
||||
value.data.uint64 = 1234;
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Put(PMIX_LOCAL, tmp, &value))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Put internal failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
goto done;
|
||||
}
|
||||
|
||||
(void)asprintf(&tmp, "%s-%d-remote", myproc.nspace, myproc.rank);
|
||||
value.type = PMIX_STRING;
|
||||
value.data.string = "1234";
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Put(PMIX_GLOBAL, tmp, &value))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Put internal failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
goto done;
|
||||
}
|
||||
|
||||
value.type = PMIX_BYTE_OBJECT;
|
||||
value.data.bo.bytes = (char*)malloc(128);
|
||||
for (j=0; j < 128; j++) {
|
||||
value.data.bo.bytes[j] = j;
|
||||
}
|
||||
value.data.bo.size = 128;
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Put(PMIX_GLOBAL, "ghex", &value))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Put ghex failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
PMIX_VALUE_DESTRUCT(&value);
|
||||
goto done;
|
||||
}
|
||||
PMIX_VALUE_DESTRUCT(&value);
|
||||
|
||||
/* commit the data to the server */
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Commit())) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Commit failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* get a list of our local peers */
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_LOCAL_PEERS, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get local peers failed: %s\n",
|
||||
myproc.nspace, myproc.rank, PMIx_Error_string(rc));
|
||||
goto done;
|
||||
}
|
||||
/* split the returned string to get the rank of each local peer */
|
||||
peers = pmix_argv_split(val->data.string, ',');
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
nlocal = pmix_argv_count(peers);
|
||||
if (nprocs == nlocal) {
|
||||
all_local = true;
|
||||
} else {
|
||||
all_local = false;
|
||||
locals = (pmix_rank_t*)malloc(pmix_argv_count(peers) * sizeof(pmix_rank_t));
|
||||
for (n=0; NULL != peers[n]; n++) {
|
||||
locals[n] = strtoul(peers[n], NULL, 10);
|
||||
}
|
||||
}
|
||||
pmix_argv_free(peers);
|
||||
|
||||
/* get the committed data - ask for someone who doesn't exist as well */
|
||||
for (n=0; n < nprocs; n++) {
|
||||
if (all_local) {
|
||||
local = true;
|
||||
} else {
|
||||
local = false;
|
||||
/* see if this proc is local to us */
|
||||
for (k=0; k < nlocal; k++) {
|
||||
if (proc.rank == locals[k]) {
|
||||
local = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (local) {
|
||||
(void)asprintf(&tmp, "%s-%d-local", myproc.nspace, n);
|
||||
proc.rank = n;
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, tmp, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get %s failed: %d\n", myproc.nspace, n, tmp, rc);
|
||||
goto done;
|
||||
}
|
||||
if (PMIX_UINT64 != val->type) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong type: %d\n", myproc.nspace, myproc.rank, tmp, val->type);
|
||||
goto done;
|
||||
}
|
||||
if (1234 != val->data.uint64) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong value: %d\n", myproc.nspace, myproc.rank, tmp, (int)val->data.uint64);
|
||||
goto done;
|
||||
}
|
||||
fprintf(stderr, "%s:%d Local value for %s:%d successfully retrieved\n", myproc.nspace, myproc.rank, proc.nspace, proc.rank);
|
||||
} else {
|
||||
(void)asprintf(&tmp, "%s-%d-remote", myproc.nspace, n);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, tmp, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get %s failed: %d\n", myproc.nspace, n, tmp, rc);
|
||||
goto done;
|
||||
}
|
||||
if (PMIX_STRING != val->type) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong type: %d\n", myproc.nspace, myproc.rank, tmp, val->type);
|
||||
goto done;
|
||||
}
|
||||
if (0 != strcmp(val->data.string, "1234")) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong value: %s\n", myproc.nspace, myproc.rank, tmp, val->data.string);
|
||||
goto done;
|
||||
}
|
||||
fprintf(stderr, "%s:%d Remote value for %s:%d successfully retrieved\n", myproc.nspace, myproc.rank, proc.nspace, proc.rank);
|
||||
}
|
||||
/* if this isn't us, then get the ghex key */
|
||||
if (n != myproc.rank) {
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, "ghex", NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get ghex failed: %d\n", myproc.nspace, n, rc);
|
||||
goto done;
|
||||
}
|
||||
if (PMIX_BYTE_OBJECT != val->type) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get ghex returned wrong type: %d\n", myproc.nspace, myproc.rank, val->type);
|
||||
goto done;
|
||||
}
|
||||
if (128 != val->data.bo.size) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get ghex returned wrong size: %d\n", myproc.nspace, myproc.rank, (int)val->data.bo.size);
|
||||
goto done;
|
||||
}
|
||||
fprintf(stderr, "%s:%d Ghex for %s:%d successfully retrieved\n", myproc.nspace, myproc.rank, proc.nspace, proc.rank);
|
||||
}
|
||||
}
|
||||
|
||||
/* call fence so everyone waits before leaving */
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Fence(&proc, 1, NULL, 0))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Fence failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
goto done;
|
||||
}
|
||||
|
||||
done:
|
||||
/* finalize us */
|
||||
fprintf(stderr, "Client ns %s rank %d: Finalizing\n", myproc.nspace, myproc.rank);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Finalize(NULL, 0))) {
|
||||
fprintf(stderr, "Client ns %s rank %d:PMIx_Finalize failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
} else {
|
||||
fprintf(stderr, "Client ns %s rank %d:PMIx_Finalize successfully completed\n", myproc.nspace, myproc.rank);
|
||||
}
|
||||
fflush(stderr);
|
||||
return(0);
|
||||
}
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче
Block a user