Skip to content

Commit 9a23583

Browse files
authored
Merge pull request #4159 from ggouaillardet/topic/v3.0.x/oshCC
oshmem: add C++ wrappers
2 parents 264de53 + 062b086 commit 9a23583

File tree

6 files changed

+163
-12
lines changed

6 files changed

+163
-12
lines changed

config/oshmem_config_files.m4

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
#
33
# Copyright (c) 2013 Mellanox Technologies, Inc.
44
# All rights reserved.
5-
# Copyright (c) 2013 Cisco Systems, Inc. All rights reserved.
5+
# Copyright (c) 2013 Cisco Systems, Inc. All rights reserved.
6+
# Copyright (c) 2017 Research Organization for Information Science
7+
# and Technology (RIST). All rights reserved.
68
# $COPYRIGHT$
79
#
810
# Additional copyrights may follow
@@ -23,6 +25,7 @@ AC_DEFUN([OSHMEM_CONFIG_FILES],[
2325
oshmem/tools/oshmem_info/Makefile
2426
oshmem/tools/wrappers/Makefile
2527
oshmem/tools/wrappers/shmemcc-wrapper-data.txt
28+
oshmem/tools/wrappers/shmemc++-wrapper-data.txt
2629
oshmem/tools/wrappers/shmemfort-wrapper-data.txt
2730
])
2831
])

examples/Makefile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
# Copyright (c) 2011-2016 Cisco Systems, Inc. All rights reserved.
1414
# Copyright (c) 2012 Los Alamos National Security, Inc. All rights reserved.
1515
# Copyright (c) 2013 Mellanox Technologies, Inc. All rights reserved.
16+
# Copyright (c) 2017 Research Organization for Information Science
17+
# and Technology (RIST). All rights reserved.
1618
# $COPYRIGHT$
1719
#
1820
# Additional copyrights may follow
@@ -30,6 +32,7 @@ CCC = mpic++
3032
FC = mpifort
3133
JAVAC = mpijavac
3234
SHMEMCC = shmemcc
35+
SHMEMCXX = shmemc++
3336
SHMEMFC = shmemfort
3437

3538
# Using -g is not necessary, but it is helpful for example programs,
@@ -51,6 +54,7 @@ EXAMPLES = \
5154
hello_usempi \
5255
hello_usempif08 \
5356
hello_oshmem \
57+
hello_oshmemcxx \
5458
hello_oshmemfh \
5559
Hello.class \
5660
ring_c \
@@ -105,6 +109,7 @@ mpi:
105109
oshmem:
106110
@ if oshmem_info --parsable | grep oshmem:bindings:c:yes >/dev/null; then \
107111
$(MAKE) hello_oshmem; \
112+
$(MAKE) hello_oshmemcxx; \
108113
$(MAKE) ring_oshmem; \
109114
$(MAKE) oshmem_shmalloc; \
110115
$(MAKE) oshmem_circular_shift; \
@@ -146,6 +151,8 @@ Ring.class: Ring.java
146151

147152
hello_oshmem: hello_oshmem_c.c
148153
$(SHMEMCC) $(CFLAGS) $? -o $@
154+
hello_oshmemcxx: hello_oshmem_cxx.cc
155+
$(SHMEMCXX) $(CXXFLAGS) $? -o $@
149156
hello_oshmemfh: hello_oshmemfh.f90
150157
$(SHMEMFC) $(FCFLAGS) $? -o $@
151158

examples/Makefile.include

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
# Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
1515
# Copyright (c) 2012 Los Alamos National Security, Inc. All rights reserved.
1616
# Copyright (c) 2013 Mellanox Technologies, Inc. All rights reserved.
17+
# Copyright (c) 2017 Research Organization for Information Science
18+
# and Technology (RIST). All rights reserved.
1719
# $COPYRIGHT$
1820
#
1921
# Additional copyrights may follow
@@ -39,6 +41,7 @@ EXTRA_DIST += \
3941
examples/hello_usempi.f90 \
4042
examples/hello_usempif08.f90 \
4143
examples/hello_oshmem_c.c \
44+
examples/hello_oshmem_cxx.cc \
4245
examples/hello_oshmemfh.f90 \
4346
examples/ring_c.c \
4447
examples/ring_cxx.cc \

examples/hello_oshmem_cxx.cc

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright (c) 2014 Mellanox Technologies, Inc.
3+
* All rights reserved.
4+
* Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
5+
* Copyright (c) 2017 Research Organization for Information Science
6+
* and Technology (RIST). All rights reserved.
7+
* $COPYRIGHT$
8+
*
9+
* Additional copyrights may follow
10+
*
11+
* $HEADER$
12+
*/
13+
14+
#include <iostream>
15+
#include "shmem.h"
16+
17+
#if !defined(OSHMEM_SPEC_VERSION) || OSHMEM_SPEC_VERSION < 10200
18+
#error This application uses API 1.2 and up
19+
#endif
20+
21+
int main(int argc, char* argv[])
22+
{
23+
int proc, nproc;
24+
char name[SHMEM_MAX_NAME_LEN];
25+
int major, minor;
26+
27+
shmem_init();
28+
nproc = shmem_n_pes();
29+
proc = shmem_my_pe();
30+
shmem_info_get_name(name);
31+
shmem_info_get_version(&major, &minor);
32+
33+
std::cout << "Hello, world, I am " << proc << " of " << nproc << ": " << name
34+
<< " (version: " << major << "." << minor << ")" << std::endl;
35+
36+
shmem_finalize();
37+
38+
return 0;
39+
}

oshmem/tools/wrappers/Makefile.am

Lines changed: 73 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# All rights reserved.
33
# Copyright (c) 2013-2014 Cisco Systems, Inc. All rights reserved.
44
# Copyright (c) 2014 Intel, Inc. All rights reserved.
5-
# Copyright (c) 2014 Research Organization for Information Science
5+
# Copyright (c) 2014-2017 Research Organization for Information Science
66
# and Technology (RIST). All rights reserved.
77
# $COPYRIGHT$
88
#
@@ -12,49 +12,95 @@
1212

1313
include $(top_srcdir)/Makefile.ompi-rules
1414

15-
man_pages = oshcc.1 shmemcc.1 oshfort.1 shmemfort.1 oshrun.1 shmemrun.1
15+
man_pages = oshcc.1 shmemcc.1 oshc++.1 shmemc++.1 oshcxx.1 shmemcxx.1 oshfort.1 shmemfort.1 oshrun.1 shmemrun.1
1616

1717
if PROJECT_OSHMEM
1818
man_MANS = $(man_pages)
1919

2020
nodist_oshmemdata_DATA = \
2121
shmemcc-wrapper-data.txt \
22+
shmemc++-wrapper-data.txt \
2223
shmemfort-wrapper-data.txt
2324

2425
# Only install / uninstall if we're building oshmem
25-
install-exec-hook:
26+
install-exec-hook-always:
2627
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
2728
(cd $(DESTDIR)$(bindir); rm -f shmemrun$(EXEEXT); $(LN_S) mpirun$(EXEEXT) shmemrun$(EXEEXT))
2829
(cd $(DESTDIR)$(bindir); rm -f oshrun$(EXEEXT); $(LN_S) mpirun$(EXEEXT) oshrun$(EXEEXT))
29-
(cd $(DESTDIR)$(bindir); rm -f shmemcc$(EXEEXT); $(LN_S) mpicc$(EXEEXT) shmemcc$(EXEEXT))
30-
(cd $(DESTDIR)$(bindir); rm -f oshcc$(EXEEXT); $(LN_S) mpicc$(EXEEXT) oshcc$(EXEEXT))
31-
(cd $(DESTDIR)$(bindir); rm -f shmemfort$(EXEEXT); $(LN_S) mpifort$(EXEEXT) shmemfort$(EXEEXT))
32-
(cd $(DESTDIR)$(bindir); rm -f oshfort$(EXEEXT); $(LN_S) mpifort$(EXEEXT) oshfort$(EXEEXT))
33-
34-
install-data-hook:
30+
(cd $(DESTDIR)$(bindir); rm -f shmemcc$(EXEEXT); $(LN_S) opal_wrapper$(EXEEXT) shmemcc$(EXEEXT))
31+
(cd $(DESTDIR)$(bindir); rm -f oshcc$(EXEEXT); $(LN_S) opal_wrapper$(EXEEXT) oshcc$(EXEEXT))
32+
(cd $(DESTDIR)$(bindir); rm -f shmemc++$(EXEEXT); $(LN_S) opal_wrapper$(EXEEXT) shmemc++$(EXEEXT))
33+
(cd $(DESTDIR)$(bindir); rm -f shmemcxx$(EXEEXT); $(LN_S) opal_wrapper$(EXEEXT) shmemcxx$(EXEEXT))
34+
(cd $(DESTDIR)$(bindir); rm -f oshc++$(EXEEXT); $(LN_S) opal_wrapper$(EXEEXT) oshc++$(EXEEXT))
35+
(cd $(DESTDIR)$(bindir); rm -f oshcxx$(EXEEXT); $(LN_S) opal_wrapper$(EXEEXT) oshcxx$(EXEEXT))
36+
(cd $(DESTDIR)$(bindir); rm -f shmemfort$(EXEEXT); $(LN_S) opal_wrapper$(EXEEXT) shmemfort$(EXEEXT))
37+
(cd $(DESTDIR)$(bindir); rm -f oshfort$(EXEEXT); $(LN_S) opal_wrapper$(EXEEXT) oshfort$(EXEEXT))
38+
39+
install-data-hook-always:
3540
(cd $(DESTDIR)$(pkgdatadir); rm -f oshcc-wrapper-data.txt; $(LN_S) shmemcc-wrapper-data.txt oshcc-wrapper-data.txt)
41+
(cd $(DESTDIR)$(pkgdatadir); rm -f shmemcxx-wrapper-data.txt; $(LN_S) shmemc++-wrapper-data.txt shmemcxx-wrapper-data.txt)
42+
(cd $(DESTDIR)$(pkgdatadir); rm -f oshc++-wrapper-data.txt; $(LN_S) shmemc++-wrapper-data.txt oshc++-wrapper-data.txt)
43+
(cd $(DESTDIR)$(pkgdatadir); rm -f oshcxx-wrapper-data.txt; $(LN_S) shmemc++-wrapper-data.txt oshcxx-wrapper-data.txt)
3644
(cd $(DESTDIR)$(pkgdatadir); rm -f oshfort-wrapper-data.txt; $(LN_S) shmemfort-wrapper-data.txt oshfort-wrapper-data.txt)
3745

38-
uninstall-local:
46+
uninstall-local-always:
3947
rm -f $(DESTDIR)$(bindir)/shmemrun$(EXEEXT) \
4048
$(DESTDIR)$(bindir)/oshrun$(EXEEXT) \
4149
$(DESTDIR)$(bindir)/shmemcc$(EXEEXT) \
4250
$(DESTDIR)$(bindir)/oshcc$(EXEEXT) \
51+
$(DESTDIR)$(bindir)/shmemcxx$(EXEEXT) \
52+
$(DESTDIR)$(bindir)/oshcxx$(EXEEXT) \
4353
$(DESTDIR)$(bindir)/shmemfort$(EXEEXT) \
4454
$(DESTDIR)$(bindir)/oshfort$(EXEEXT) \
4555
$(DESTDIR)$(pkgdatadir)/shmemcc-wrapper-data.txt \
4656
$(DESTDIR)$(pkgdatadir)/oshcc-wrapper-data.txt \
57+
$(DESTDIR)$(pkgdatadir)/shmemcxx-wrapper-data.txt \
58+
$(DESTDIR)$(pkgdatadir)/oshcxx-wrapper-data.txt \
4759
$(DESTDIR)$(pkgdatadir)/shmemfort-wrapper-data.txt \
4860
$(DESTDIR)$(pkgdatadir)/oshfort-wrapper-data.txt
4961

5062

63+
if CASE_SENSITIVE_FS
64+
man_MANS += oshCC.1 shmemCC.1
65+
66+
install-exec-hook: install-exec-hook-always
67+
(cd $(DESTDIR)$(bindir); rm -f shmemCC$(EXEEXT); $(LN_S) opal_wrapper$(EXEEXT) shmemCC$(EXEEXT))
68+
(cd $(DESTDIR)$(bindir); rm -f oshCC$(EXEEXT); $(LN_S) opal_wrapper$(EXEEXT) oshCC$(EXEEXT))
69+
70+
install-data-hook: install-data-hook-always
71+
(cd $(DESTDIR)$(pkgdatadir); rm -f shmemCC-wrapper-data.txt; $(LN_S) shmemcxx-wrapper-data.txt shmemCC-wrapper-data.txt)
72+
(cd $(DESTDIR)$(pkgdatadir); rm -f oshCC-wrapper-data.txt; $(LN_S) oshcxx-wrapper-data.txt oshCC-wrapper-data.txt)
73+
74+
uninstall-local: uninstall-local-always
75+
rm -f $(DESTDIR)$(bindir)/shmemCC$(EXEEXT) \
76+
$(DESTDIR)$(mandir)/man1/shmemCC.1 \
77+
$(DESTDIR)$(pkgdatadir)/shmemCC-wrapper-data.txt
78+
rm -f $(DESTDIR)$(bindir)/oshCC$(EXEEXT) \
79+
$(DESTDIR)$(mandir)/man1/oshCC.1 \
80+
$(DESTDIR)$(pkgdatadir)/oshCC-wrapper-data.txt
81+
82+
oshCC.1: $(top_builddir)/opal/tools/wrappers/generic_wrapper.1
83+
rm -f oshCC.1
84+
sed -e 's/#COMMAND#/oshCC/g' -e 's/#PROJECT#/Open SHMEM/g' -e 's/#PROJECT_SHORT#/OSHMEM/g' -e 's/#LANGUAGE#/C++/g' < $(top_builddir)/opal/tools/wrappers/generic_wrapper.1 > oshCC.1
85+
86+
shmemCC.1: $(top_builddir)/opal/tools/wrappers/generic_wrapper.1
87+
rm -f shmemCC.1
88+
sed -e 's/#COMMAND#/shmemCC/g' -e 's/#PROJECT#/Open SHMEM/g' -e 's/#PROJECT_SHORT#/OSHMEM/g' -e 's/#LANGUAGE#/C++/g' < $(top_builddir)/opal/tools/wrappers/generic_wrapper.1 > shmemCC.1
89+
90+
else # CASE_SENSITIVE_FS
91+
install-exec-hook: install-exec-hook-always
92+
install-data-hook: install-data-hook-always
93+
uninstall-local: uninstall-local-always
94+
95+
endif # CASE_SENSITIVE_FS
96+
5197
########################################################
5298
#
5399
# Man page generation / handling
54100
#
55101
########################################################
56102
distclean-local:
57-
rm -f $(man_pages)
103+
rm -f $(man_MANS)
58104

59105
$(top_builddir)/opal/tools/wrappers/generic_wrapper.1:
60106
(cd $(top_builddir)/opal/tools/wrappers && $(MAKE) $(AM_MAKEFLAGS) generic_wrapper.1)
@@ -67,6 +113,22 @@ shmemcc.1: $(top_builddir)/opal/tools/wrappers/generic_wrapper.1
67113
rm -f shmemcc.1
68114
sed -e 's/#COMMAND#/shmemcc/g' -e 's/#PROJECT#/Open SHMEM/g' -e 's/#PROJECT_SHORT#/OSHMEM/g' -e 's/#LANGUAGE#/C/g' < $(top_builddir)/opal/tools/wrappers/generic_wrapper.1 > shmemcc.1
69115

116+
oshc++.1: $(top_builddir)/opal/tools/wrappers/generic_wrapper.1
117+
rm -f oshc++.1
118+
sed -e 's/#COMMAND#/oshc++/g' -e 's/#PROJECT#/Open SHMEM/g' -e 's/#PROJECT_SHORT#/OSHMEM/g' -e 's/#LANGUAGE#/C++/g' < $(top_builddir)/opal/tools/wrappers/generic_wrapper.1 > oshc++.1
119+
120+
shmemc++.1: $(top_builddir)/opal/tools/wrappers/generic_wrapper.1
121+
rm -f shmemc++.1
122+
sed -e 's/#COMMAND#/shmemc++/g' -e 's/#PROJECT#/Open SHMEM/g' -e 's/#PROJECT_SHORT#/OSHMEM/g' -e 's/#LANGUAGE#/C++/g' < $(top_builddir)/opal/tools/wrappers/generic_wrapper.1 > shmemc++.1
123+
124+
oshcxx.1: $(top_builddir)/opal/tools/wrappers/generic_wrapper.1
125+
rm -f oshcxx.1
126+
sed -e 's/#COMMAND#/oshcxx/g' -e 's/#PROJECT#/Open SHMEM/g' -e 's/#PROJECT_SHORT#/OSHMEM/g' -e 's/#LANGUAGE#/C++/g' < $(top_builddir)/opal/tools/wrappers/generic_wrapper.1 > oshcxx.1
127+
128+
shmemcxx.1: $(top_builddir)/opal/tools/wrappers/generic_wrapper.1
129+
rm -f shmemcxx.1
130+
sed -e 's/#COMMAND#/shmemcxx/g' -e 's/#PROJECT#/Open SHMEM/g' -e 's/#PROJECT_SHORT#/OSHMEM/g' -e 's/#LANGUAGE#/C++/g' < $(top_builddir)/opal/tools/wrappers/generic_wrapper.1 > shmemcxx.1
131+
70132
oshfort.1: $(top_builddir)/opal/tools/wrappers/generic_wrapper.1
71133
rm -f oshfort.1
72134
sed -e 's/#COMMAND#/oshfort/g' -e 's/#PROJECT#/Open SHMEM/g' -e 's/#PROJECT_SHORT#/OSHMEM/g' -e 's/#LANGUAGE#/Fortran/g' < $(top_builddir)/opal/tools/wrappers/generic_wrapper.1 > oshfort.1
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Copyright (c) 2013 Mellanox Technologies, Inc.
2+
# All rights reserved.
3+
# Copyright (c) 2014-2015 Cisco Systems, Inc. All rights reserved.
4+
# $COPYRIGHT$
5+
#
6+
# Additional copyrights may follow
7+
#
8+
# $HEADER$
9+
#
10+
# There can be multiple blocks of configuration data, chosen by
11+
# compiler flags (using the compiler_args key to chose which block
12+
# should be activated. This can be useful for multilib builds. See the
13+
# multilib page at:
14+
# https://github.com/open-mpi/ompi/wiki/compilerwrapper3264
15+
# for more information.
16+
17+
project=Open SHMEM
18+
project_short=OSHMEM
19+
version=@OSHMEM_VERSION@
20+
language=C++
21+
compiler_env=CXX
22+
compiler_flags_env=CXXFLAGS
23+
compiler=@CXX@
24+
preprocessor_flags=@OMPI_WRAPPER_EXTRA_CPPFLAGS@
25+
compiler_flags=@OMPI_WRAPPER_EXTRA_CXXFLAGS@
26+
linker_flags=@OMPI_WRAPPER_EXTRA_LDFLAGS@
27+
# Note that per https://svn.open-mpi.org/trac/ompi/ticket/3422, we
28+
# intentionally only link in the SHMEM and MPI libraries (ORTE, OPAL,
29+
# etc. are pulled in implicitly) because we intend SHMEM/MPI
30+
# applications to only use the SHMEM and MPI APIs.
31+
libs=-loshmem -lmpi
32+
libs_static=-loshmem -lmpi -l@ORTE_LIB_PREFIX@open-rte -l@OPAL_LIB_PREFIX@open-pal @OMPI_WRAPPER_EXTRA_LIBS@
33+
dyn_lib_file=liboshmem.@OPAL_DYN_LIB_SUFFIX@
34+
static_lib_file=liboshmem.a
35+
required_file=
36+
includedir=${includedir}
37+
libdir=${libdir}

0 commit comments

Comments
 (0)