1
1

Merge pull request #7026 from ggouaillardet/topic/openpmix_refresh

pmix/pmix4x: refresh to the latest open PMIx master
Этот коммит содержится в:
Gilles Gouaillardet 2019-10-01 18:15:53 +09:00 коммит произвёл GitHub
родитель f4371f7f94 1c4a3598d0
Коммит 280856928a
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
723 изменённых файлов: 9293 добавлений и 1265 удалений

90
.gitignore поставляемый
Просмотреть файл

@ -373,51 +373,51 @@ opal/mca/hwloc/base/static-components.h.new.struct
opal/mca/installdirs/config/install_dirs.h opal/mca/installdirs/config/install_dirs.h
!opal/mca/pmix/pmix*/pmix/AUTHORS !opal/mca/pmix/pmix*/openpmix/AUTHORS
!opal/mca/pmix/pmix*/pmix/contrib/perf_tools/Makefile !opal/mca/pmix/pmix*/openpmix/contrib/perf_tools/Makefile
opal/mca/pmix/pmix*/pmix/include/pmix/autogen/config.h opal/mca/pmix/pmix*/openpmix/include/pmix/autogen/config.h
opal/mca/pmix/pmix*/pmix/include/pmix/autogen/config.h.in opal/mca/pmix/pmix*/openpmix/include/pmix/autogen/config.h.in
opal/mca/pmix/pmix*/pmix/src/include/private/autogen/config.h.in opal/mca/pmix/pmix*/openpmix/src/include/private/autogen/config.h.in
opal/mca/pmix/pmix*/pmix/src/include/private/autogen/config.h opal/mca/pmix/pmix*/openpmix/src/include/private/autogen/config.h
opal/mca/pmix/pmix*/pmix/src/include/frameworks.h opal/mca/pmix/pmix*/openpmix/src/include/frameworks.h
opal/mca/pmix/pmix*/pmix/src/mca/pinstalldirs/config/pinstall_dirs.h opal/mca/pmix/pmix*/openpmix/src/mca/pinstalldirs/config/pinstall_dirs.h
opal/mca/pmix/pmix*/pmix/config/autogen_found_items.m4 opal/mca/pmix/pmix*/openpmix/config/autogen_found_items.m4
opal/mca/pmix/pmix*/pmix/config/mca_library_paths.txt opal/mca/pmix/pmix*/openpmix/config/mca_library_paths.txt
opal/mca/pmix/pmix*/pmix/config/test-driver opal/mca/pmix/pmix*/openpmix/config/test-driver
opal/mca/pmix/pmix*/pmix/src/include/pmix_config.h opal/mca/pmix/pmix*/openpmix/src/include/pmix_config.h
opal/mca/pmix/pmix*/pmix/src/include/pmix_config.h.in opal/mca/pmix/pmix*/openpmix/src/include/pmix_config.h.in
opal/mca/pmix/pmix*/pmix/include/pmix_common.h opal/mca/pmix/pmix*/openpmix/include/pmix_common.h
opal/mca/pmix/pmix*/pmix/include/pmix_rename.h opal/mca/pmix/pmix*/openpmix/include/pmix_rename.h
opal/mca/pmix/pmix*/pmix/include/pmix_version.h opal/mca/pmix/pmix*/openpmix/include/pmix_version.h
opal/mca/pmix/pmix*/pmix/src/util/keyval/keyval_lex.c opal/mca/pmix/pmix*/openpmix/src/util/keyval/keyval_lex.c
opal/mca/pmix/pmix*/pmix/src/util/show_help_lex.c opal/mca/pmix/pmix*/openpmix/src/util/show_help_lex.c
opal/mca/pmix/pmix*/pmix/examples/alloc opal/mca/pmix/pmix*/openpmix/examples/alloc
opal/mca/pmix/pmix*/pmix/examples/client opal/mca/pmix/pmix*/openpmix/examples/client
opal/mca/pmix/pmix*/pmix/examples/debugger opal/mca/pmix/pmix*/openpmix/examples/debugger
opal/mca/pmix/pmix*/pmix/examples/debuggerd opal/mca/pmix/pmix*/openpmix/examples/debuggerd
opal/mca/pmix/pmix*/pmix/examples/dmodex opal/mca/pmix/pmix*/openpmix/examples/dmodex
opal/mca/pmix/pmix*/pmix/examples/dynamic opal/mca/pmix/pmix*/openpmix/examples/dynamic
opal/mca/pmix/pmix*/pmix/examples/fault opal/mca/pmix/pmix*/openpmix/examples/fault
opal/mca/pmix/pmix*/pmix/examples/jctrl opal/mca/pmix/pmix*/openpmix/examples/jctrl
opal/mca/pmix/pmix*/pmix/examples/pub opal/mca/pmix/pmix*/openpmix/examples/pub
opal/mca/pmix/pmix*/pmix/examples/server opal/mca/pmix/pmix*/openpmix/examples/server
opal/mca/pmix/pmix*/pmix/examples/tool opal/mca/pmix/pmix*/openpmix/examples/tool
opal/mca/pmix/pmix*/pmix/test/run_tests00.pl opal/mca/pmix/pmix*/openpmix/test/run_tests00.pl
opal/mca/pmix/pmix*/pmix/test/run_tests01.pl opal/mca/pmix/pmix*/openpmix/test/run_tests01.pl
opal/mca/pmix/pmix*/pmix/test/run_tests02.pl opal/mca/pmix/pmix*/openpmix/test/run_tests02.pl
opal/mca/pmix/pmix*/pmix/test/run_tests03.pl opal/mca/pmix/pmix*/openpmix/test/run_tests03.pl
opal/mca/pmix/pmix*/pmix/test/run_tests04.pl opal/mca/pmix/pmix*/openpmix/test/run_tests04.pl
opal/mca/pmix/pmix*/pmix/test/run_tests05.pl opal/mca/pmix/pmix*/openpmix/test/run_tests05.pl
opal/mca/pmix/pmix*/pmix/test/run_tests06.pl opal/mca/pmix/pmix*/openpmix/test/run_tests06.pl
opal/mca/pmix/pmix*/pmix/test/run_tests07.pl opal/mca/pmix/pmix*/openpmix/test/run_tests07.pl
opal/mca/pmix/pmix*/pmix/test/run_tests08.pl opal/mca/pmix/pmix*/openpmix/test/run_tests08.pl
opal/mca/pmix/pmix*/pmix/test/run_tests09.pl opal/mca/pmix/pmix*/openpmix/test/run_tests09.pl
opal/mca/pmix/pmix*/pmix/test/run_tests10.pl opal/mca/pmix/pmix*/openpmix/test/run_tests10.pl
opal/mca/pmix/pmix*/pmix/test/run_tests11.pl opal/mca/pmix/pmix*/openpmix/test/run_tests11.pl
opal/mca/pmix/pmix*/pmix/test/run_tests12.pl opal/mca/pmix/pmix*/openpmix/test/run_tests12.pl
opal/mca/pmix/pmix*/pmix/test/run_tests13.pl opal/mca/pmix/pmix*/openpmix/test/run_tests13.pl
opal/mca/pmix/pmix*/pmix/test/run_tests14.pl opal/mca/pmix/pmix*/openpmix/test/run_tests14.pl
opal/mca/pmix/pmix*/pmix/test/run_tests15.pl opal/mca/pmix/pmix*/openpmix/test/run_tests15.pl
opal/mca/pmix/ext4x/ext4x.c opal/mca/pmix/ext4x/ext4x.c

Просмотреть файл

@ -15,7 +15,7 @@ EXTRA_DIST = autogen.subdirs
dist_opaldata_DATA = help-pmix-pmix4x.txt dist_opaldata_DATA = help-pmix-pmix4x.txt
SUBDIRS = pmix SUBDIRS = openpmix
sources = \ sources = \
pmix4x.h \ pmix4x.h \
@ -43,7 +43,7 @@ mcacomponent_LTLIBRARIES = $(component_install)
mca_pmix_pmix4x_la_SOURCES = $(sources) mca_pmix_pmix4x_la_SOURCES = $(sources)
mca_pmix_pmix4x_la_CFLAGS = $(opal_pmix_pmix4x_CFLAGS) mca_pmix_pmix4x_la_CFLAGS = $(opal_pmix_pmix4x_CFLAGS)
mca_pmix_pmix4x_la_CPPFLAGS = \ 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_LDFLAGS = -module -avoid-version $(opal_pmix_pmix4x_LDFLAGS)
mca_pmix_pmix4x_la_LIBADD = $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la \ mca_pmix_pmix4x_la_LIBADD = $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la \
$(opal_pmix_pmix4x_LIBS) $(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"]) [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" 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_args $opal_subdir_args 'CFLAGS=$CFLAGS' 'CPPFLAGS=$CPPFLAGS'],
[opal_pmix_pmix4x_happy=1], [opal_pmix_pmix4x_happy=0]) [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])]) AC_MSG_ERROR([CANNOT CONTINUE])])
# Build flags for our Makefile.am # Build flags for our Makefile.am
opal_pmix_pmix4x_LDFLAGS= opal_pmix_pmix4x_LDFLAGS=
opal_pmix_pmix4x_LIBS="$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/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_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/pmix/src/libpmix.la"]) 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_LIBS])
AC_SUBST([opal_pmix_pmix4x_CPPFLAGS]) 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 # Finally, add some flags to the wrapper compiler so that our
# headers can be found. # 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_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_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` pmix_pmix4x_WRAPPER_EXTRA_LIBS=`egrep PMIX_EMBEDDED_LIBS $pmix_pmix4x_status_filename | cut -d\" -f4`

Просмотреть файл

@ -11,7 +11,7 @@
# All rights reserved. # All rights reserved.
# Copyright (c) 2006-2016 Cisco Systems, Inc. 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) 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 # Copyright (c) 2019 Amazon.com, Inc. or its affiliates. All Rights
# reserved. # reserved.
# $COPYRIGHT$ # $COPYRIGHT$
@ -32,7 +32,7 @@ AM_DISTCHECK_CONFIGURE_FLAGS = --disable-dlopen
headers = headers =
sources = sources =
nodist_headers = 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 # Only install the valgrind suppressions file and man pages
# if we're building in standalone mode # if we're building in standalone mode

Просмотреть файл

@ -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) 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 3.1.2 -- 24 Jan 2019
---------------------- ----------------------
- Fix a bug in macro identifying system events - 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 - 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 2.2.2 -- 24 Jan 2019
---------------------- ----------------------
- Fix a bug in macro identifying system events - 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 # The only requirement is that it must be entirely printable ASCII
# characters and have no white space. # characters and have no white space.
greek= greek=a1
# If repo_rev is empty, then the repository version number will be # If repo_rev is empty, then the repository version number will be
# obtained during "make dist" via the "git describe --tags --always" # obtained during "make dist" via the "git describe --tags --always"
# command, or with the date (if "git describe" fails) in the form of # command, or with the date (if "git describe" fails) in the form of
# "date<date>". # "date<date>".
repo_rev=gitf87459fe repo_rev=gitea3b29b1
# If tarball_version is not empty, it is used as the version string in # If tarball_version is not empty, it is used as the version string in
# the tarball filename, regardless of all other versions listed in # the tarball filename, regardless of all other versions listed in
@ -44,7 +44,7 @@ tarball_version=
# The date when this release was created # 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. # The shared library version of each of PMIx's public libraries.
# These versions are maintained in accordance with the "Library # These versions are maintained in accordance with the "Library

Просмотреть файл

@ -23,6 +23,8 @@
helpers = setup.py pmix.pyx pmix.pxi construct.py helpers = setup.py pmix.pyx pmix.pxi construct.py
EXTRA_DIST = $(helpers)
if WANT_PYTHON_BINDINGS if WANT_PYTHON_BINDINGS
install-exec-local: $(helpers) install-exec-local: $(helpers)

Просмотреть файл

@ -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()

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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 Copyright (c) 2004-2005 The Regents of the University of California.
dnl All rights reserved. dnl All rights reserved.
dnl Copyright (c) 2009 Sun Microsystems, Inc. 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 Copyright (c) 2015-2019 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved. dnl and Technology (RIST). All rights reserved.
dnl $COPYRIGHT$ dnl $COPYRIGHT$

Просмотреть файл

@ -664,7 +664,7 @@ AC_DEFUN([PMIX_SETUP_CORE],[
# -lrt might be needed for clock_gettime # -lrt might be needed for clock_gettime
PMIX_SEARCH_LIBS_CORE([clock_gettime], [rt]) 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 # 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 # 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" LDFLAGS="$LDFLAGS $THREAD_LDFLAGS"
LIBS="$LIBS $THREAD_LIBS" 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" # 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" CPPFLAGS="-I$PMIX_top_srcdir -I$PMIX_top_srcdir/src -I$PMIX_top_srcdir/include $CPPFLAGS"
fi 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 # pmixdatadir, pmixlibdir, and pmixinclude are essentially the same as
# pkg*dir, but will always be */pmix. # pkg*dir, but will always be */pmix.
pmixdatadir='${datadir}/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/plookup/Makefile]
pmix_config_prefix[src/tools/pps/Makefile] pmix_config_prefix[src/tools/pps/Makefile]
pmix_config_prefix[src/tools/pattrs/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 # publish any embedded flags so external wrappers can use them

Просмотреть файл

@ -1,7 +1,7 @@
dnl -*- shell-script -*- dnl -*- shell-script -*-
dnl dnl
dnl Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. 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 Copyright (c) 2019 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved. dnl and Technology (RIST). All rights reserved.
dnl dnl

Просмотреть файл

@ -10,7 +10,7 @@ dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved. dnl University of Stuttgart. All rights reserved.
dnl Copyright (c) 2004-2005 The Regents of the University of California. dnl Copyright (c) 2004-2005 The Regents of the University of California.
dnl All rights reserved. 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 Copyright (c) 2016-2019 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved. dnl and Technology (RIST). All rights reserved.
dnl $COPYRIGHT$ dnl $COPYRIGHT$

Просмотреть файл

@ -16,7 +16,7 @@ dnl Copyright (c) 2012-2017 Los Alamos National Security, LLC. All rights
dnl reserved. dnl reserved.
dnl Copyright (c) 2015-2019 Research Organization for Information Science dnl Copyright (c) 2015-2019 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved. 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 $COPYRIGHT$
dnl dnl
dnl Additional copyrights may follow 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]) 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 PMIX_PROG_CC_C11
if test $pmix_cv_c11_supported = no ; then if test $pmix_cv_c11_supported = no ; then

Просмотреть файл

@ -108,11 +108,14 @@ AC_DEFUN([_PMIX_HWLOC_EXTERNAL],[
[pmix_hwloc_support=0]) [pmix_hwloc_support=0])
AS_IF([test "$pmix_hwloc_standard_header_location" != "yes"], 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"], 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_FLAGS_APPEND_UNIQ(LIBS, $pmix_hwloc_LIBS)
PMIX_WRAPPER_FLAGS_ADD(LIBS, $pmix_hwloc_LIBS)
fi fi
if test ! -z "$with_hwloc" && test "$with_hwloc" != "no" && test "$pmix_hwloc_support" != "1"; then 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"]) LIBS="$pmix_check_libev_save_LIBS"])
AS_IF([test $pmix_libev_support -eq 1], 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"], 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"], 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]) AC_MSG_CHECKING([will libev support be built])
if test $pmix_libev_support -eq 1; then if test $pmix_libev_support -eq 1; then

Просмотреть файл

@ -118,8 +118,11 @@ AC_DEFUN([_PMIX_LIBEVENT_EXTERNAL],[
AS_IF([test "$pmix_event_defaults" = "no"], AS_IF([test "$pmix_event_defaults" = "no"],
[PMIX_FLAGS_APPEND_UNIQ(CPPFLAGS, $pmix_libevent_CPPFLAGS) [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_FLAGS_APPEND_UNIQ(LIBS, $pmix_libevent_LIBS)
PMIX_WRAPPER_FLAGS_ADD(LIBS, $pmix_libevent_LIBS)
if test $pmix_libevent_support -eq 1; then if test $pmix_libevent_support -eq 1; then
# Ensure that this libevent has the symbol # Ensure that this libevent has the symbol

Просмотреть файл

@ -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_ENABLE_SHARED
AM_DISABLE_STATIC AM_DISABLE_STATIC
PMIX_SETUP_WRAPPER_INIT
# This did not exist pre AM 1.11.x (where x is somewhere >0 and <3), # 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. # 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) 2010-2011 Oak Ridge National Labs. All rights reserved.
# Copyright (c) 2013-2016 Los Alamos National Security, Inc. All rights # Copyright (c) 2013-2016 Los Alamos National Security, Inc. All rights
# reserved. # reserved.
# Copyright (c) 2013-2016 Intel, Inc. All rights reserved. # Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
# $COPYRIGHT$ # $COPYRIGHT$
# #
# Additional copyrights may follow # Additional copyrights may follow
@ -30,7 +30,8 @@ EXTRA_DIST = \
pmix-release.sh \ pmix-release.sh \
pmix.spec \ pmix.spec \
update-my-copyright.pl \ update-my-copyright.pl \
whitespace-purge.sh whitespace-purge.sh \
make_manpage.pl
include perf_tools/Makefile.include include perf_tools/Makefile.include

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) 2006-2016 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2013 Mellanox Technologies, Inc. # Copyright (c) 2013 Mellanox Technologies, Inc.
# All rights reserved. # 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 # Copyright (c) 2015 Research Organization for Information Science
# and Technology (RIST). All rights reserved. # and Technology (RIST). All rights reserved.
# $COPYRIGHT$ # $COPYRIGHT$
@ -192,7 +192,7 @@
Summary: An extended/exascale implementation of PMI Summary: An extended/exascale implementation of PMI
Name: %{?_name:%{_name}}%{!?_name:pmix} Name: %{?_name:%{_name}}%{!?_name:pmix}
Version: 4.0.0 Version: 4.0.0a1
Release: 1%{?dist} Release: 1%{?dist}
License: BSD License: BSD
Group: Development/Libraries Group: Development/Libraries

Просмотреть файл

@ -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);
}

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше