1
1

A few cleanups to the wrapper compiler build system / man pages:

- Only install opal{cc,c++} and orte{cc,c++} if configured with
     --with-devel-headers.  Right now, they are always installed, but 
    there are no header files installed for either project, so there's
    really not much way for a user to actually compile an OPAL / ORTE
    application.

  - Drop support for opalCC and orteCC.  It's a pain to setup all the 
    symlinks (indeed, they are currently done wrong for opalCC) and 
    there's no history like there is for mpiCC.

  - Change what is currently opalcc.1 to opal_wrapper.1 and add some
    macros that get sed'ed so that the man pages appear to be 
    customized for the given command.  

  - Install the wrapper data files even if we compiled with 
    --disable-binaries.  This is for the use case of doing multi-lib
    builds, where one word size will only have the library built, but 
    we need both set of wrapper data files to piece together to 
    activate the multi-lib support in the wrapper compilers.

This commit was SVN r12192.
Этот коммит содержится в:
Brian Barrett 2006-10-19 18:34:17 +00:00
родитель 3eb2f90ceb
Коммит 581a4b0a4e
8 изменённых файлов: 330 добавлений и 360 удалений

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

@ -16,6 +16,8 @@
# $HEADER$ # $HEADER$
# #
if OMPI_INSTALL_BINARIES
dist_pkgdata_DATA = dist_pkgdata_DATA =
man_MANS = mpirun.1 \ man_MANS = mpirun.1 \
@ -49,3 +51,5 @@ ompi-clean.1: $(top_srcdir)/orte/tools/orte-clean/orte-clean.1
distclean-local: distclean-local:
rm -f mpirun.1 mpiexec.1 ompi-ps.1 ompi-clean.1 rm -f mpirun.1 mpiexec.1 ompi-ps.1 ompi-clean.1
endif # OMPI_INSTALL_BINARIES

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

@ -17,82 +17,79 @@
# $HEADER$ # $HEADER$
# #
if OMPI_INSTALL_BINARIES
dist_pkgdata_DATA = mpicc-wrapper-data.txt \ dist_pkgdata_DATA = mpicc-wrapper-data.txt \
mpic++-wrapper-data.txt \ mpic++-wrapper-data.txt \
mpif77-wrapper-data.txt \ mpif77-wrapper-data.txt \
mpif90-wrapper-data.txt mpif90-wrapper-data.txt
if CASE_SENSITIVE_FS if OMPI_INSTALL_BINARIES
install-exec-hook:
(cd $(DESTDIR)$(bindir); rm -f mpiCC$(EXEEXT); $(LN_S) mpic++ mpiCC)
(cd $(DESTDIR)$(bindir); rm -f mpicxx$(EXEEXT); $(LN_S) mpic++ mpicxx)
man_MANS = \
mpicc.1 \
mpic++.1 \
mpicxx.1 \
mpif77.1 \
mpif90.1
EXTRA_DIST = $(man_MANS)
install-exec-hook-always:
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
(cd $(DESTDIR)$(bindir); rm -f mpicc$(EXEEXT); $(LN_S) opal_wrapper mpicc) (cd $(DESTDIR)$(bindir); rm -f mpicc$(EXEEXT); $(LN_S) opal_wrapper mpicc)
(cd $(DESTDIR)$(bindir); rm -f mpic++$(EXEEXT); $(LN_S) opal_wrapper mpic++) (cd $(DESTDIR)$(bindir); rm -f mpic++$(EXEEXT); $(LN_S) opal_wrapper mpic++)
(cd $(DESTDIR)$(bindir); rm -f mpicxx$(EXEEXT); $(LN_S) opal_wrapper mpicxx)
(cd $(DESTDIR)$(bindir); rm -f mpif77$(EXEEXT); $(LN_S) opal_wrapper mpif77)
(cd $(DESTDIR)$(bindir); rm -f mpif90$(EXEEXT); $(LN_S) opal_wrapper mpif90)
install-data-hook-always:
(cd $(DESTDIR)$(pkgdatadir); rm -f mpicxx-wrapper-data.txt; $(LN_S) mpic++-wrapper-data.txt mpicxx-wrapper-data.txt)
uninstall-local-always:
rm -f $(DESTDIR)$(bindir)/mpicc$(EXEEXT) \
$(DESTDIR)$(bindir)/mpic++$(EXEEXT) \
$(DESTDIR)$(bindir)/mpicxx$(EXEEXT) \
$(DESTDIR)$(bindir)/mpif77$(EXEEXT) \
$(DESTDIR)$(bindir)/mpif90$(EXEEXT) \
$(DESTDIR)$(pkgdatadir)/mpicxx-wrapper-data.txt
if CASE_SENSITIVE_FS
install-exec-hook: install-exec-hook-always
(cd $(DESTDIR)$(bindir); rm -f mpiCC$(EXEEXT); $(LN_S) opal_wrapper mpiCC) (cd $(DESTDIR)$(bindir); rm -f mpiCC$(EXEEXT); $(LN_S) opal_wrapper mpiCC)
(cd $(DESTDIR)$(bindir); rm -f mpicxx$(EXEEXT); $(LN_S) opal_wrapper mpicxx)
(cd $(DESTDIR)$(bindir); rm -f mpif77$(EXEEXT); $(LN_S) opal_wrapper mpif77) install-data-hook: install-data-hook-always
(cd $(DESTDIR)$(bindir); rm -f mpif90$(EXEEXT); $(LN_S) opal_wrapper mpif90)
(cd $(DESTDIR)$(pkgdatadir); rm -f mpiCC-wrapper-data.txt; $(LN_S) mpic++-wrapper-data.txt mpiCC-wrapper-data.txt) (cd $(DESTDIR)$(pkgdatadir); rm -f mpiCC-wrapper-data.txt; $(LN_S) mpic++-wrapper-data.txt mpiCC-wrapper-data.txt)
(cd $(DESTDIR)$(pkgdatadir); rm -f mpicxx-wrapper-data.txt; $(LN_S) mpic++-wrapper-data.txt mpicxx-wrapper-data.txt) (cd $(DESTDIR)$(mandir)/man1; rm -f mpiCC.1; $(LN_S) mpic++.1 mpiCC.1)
install-data-hook: uninstall-local: uninstall-local-always
(cd $(DESTDIR)$(mandir)/man1; rm -f mpicc.1; $(LN_S) opalcc.1 mpicc.1)
(cd $(DESTDIR)$(mandir)/man1; rm -f mpic++.1; $(LN_S) opalcc.1 mpic++.1)
(cd $(DESTDIR)$(mandir)/man1; rm -f mpiCC.1; $(LN_S) opalcc.1 mpiCC.1)
(cd $(DESTDIR)$(mandir)/man1; rm -f mpif77.1; $(LN_S) opalcc.1 mpif77.1)
(cd $(DESTDIR)$(mandir)/man1; rm -f mpif90.1; $(LN_S) opalcc.1 mpif90.1)
else
install-exec-hook:
(cd $(DESTDIR)$(bindir); rm -f mpicxx$(EXEEXT); $(LN_S) mpic++ mpicxx)
(cd $(DESTDIR)$(bindir); rm -f mpicc$(EXEEXT); $(LN_S) opal_wrapper mpicc)
(cd $(DESTDIR)$(bindir); rm -f mpic++$(EXEEXT); $(LN_S) opal_wrapper mpic++)
(cd $(DESTDIR)$(bindir); rm -f mpicxx$(EXEEXT); $(LN_S) opal_wrapper mpicxx)
(cd $(DESTDIR)$(bindir); rm -f mpif77$(EXEEXT); $(LN_S) opal_wrapper mpif77)
(cd $(DESTDIR)$(bindir); rm -f mpif90$(EXEEXT); $(LN_S) opal_wrapper mpif90)
(cd $(DESTDIR)$(pkgdatadir); rm -f mpicxx-wrapper-data.txt; $(LN_S) mpic++-wrapper-data.txt mpicxx-wrapper-data.txt)
install-data-hook:
(cd $(DESTDIR)$(mandir)/man1; rm -f mpicc.1; $(LN_S) opalcc.1 mpicc.1)
(cd $(DESTDIR)$(mandir)/man1; rm -f mpic++.1; $(LN_S) opalcc.1 mpic++.1)
(cd $(DESTDIR)$(mandir)/man1; rm -f mpif77.1; $(LN_S) opalcc.1 mpif77.1)
(cd $(DESTDIR)$(mandir)/man1; rm -f mpif90.1; $(LN_S) opalcc.1 mpif90.1)
endif
if CASE_SENSITIVE_FS
uninstall-local:
rm -f $(DESTDIR)$(bindir)/mpiCC$(EXEEXT) \ rm -f $(DESTDIR)$(bindir)/mpiCC$(EXEEXT) \
$(DESTDIR)$(bindir)/mpicxx$(EXEEXT) \
$(DESTDIR)$(bindir)/mpicc$(EXEEXT) \
$(DESTDIR)$(bindir)/mpic++$(EXEEXT) \
$(DESTDIR)$(bindir)/mpiCC$(EXEEXT) \
$(DESTDIR)$(bindir)/mpicxx$(EXEEXT) \
$(DESTDIR)$(bindir)/mpif77$(EXEEXT) \
$(DESTDIR)$(bindir)/mpif90$(EXEEXT) \
$(DESTDIR)$(mandir)/man1/mpicc.1 \
$(DESTDIR)$(mandir)/man1/mpic++.1 \
$(DESTDIR)$(mandir)/man1/mpiCC.1 \ $(DESTDIR)$(mandir)/man1/mpiCC.1 \
$(DESTDIR)$(mandir)/man1/mpif77.1 \ $(DESTDIR)$(pkgdatadir)/mpiCC-wrapper-data.txt
$(DESTDIR)$(mandir)/man1/mpif90.1 \
$(DESTDIR)$(pkgdatadir)/mpiCC-wrapper-data.txt \
$(DESTDIR)$(pkgdatadir)/mpicxx-wrapper-data.txt
else else # CASE_SENSITIVE_FS
uninstall-local: install-exec-hook: install-exec-hook-always
rm -f $(DESTDIR)$(bindir)/mpicxx$(EXEEXT) \ install-data-hook: install-data-hook-always
$(DESTDIR)$(bindir)/mpicc$(EXEEXT) \ uninstall-local: uninstall-local-always
$(DESTDIR)$(bindir)/mpic++$(EXEEXT) \
$(DESTDIR)$(bindir)/mpicxx$(EXEEXT) \
$(DESTDIR)$(bindir)/mpif77$(EXEEXT) \
$(DESTDIR)$(bindir)/mpif90$(EXEEXT) \
$(DESTDIR)$(mandir)/man1/mpicc.1 \
$(DESTDIR)$(mandir)/man1/mpic++.1 \
$(DESTDIR)$(mandir)/man1/mpif77.1 \
$(DESTDIR)$(mandir)/man1/mpif90.1 \
$(DESTDIR)$(pkgdatadir)/mpicxx-wrapper-data.txt
endif
endif endif # CASE_SENSITIVE_FS
endif # OMPI_INSTALL_BINARIES
mpicc.1: $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1
rm -f mpicc.1
sed -e 's/@COMMAND@/mpicc/g' -e 's/@PROJECT@/Open MPI/g' -e 's/@PROJECT_SHORT@/OMPI/g' -e 's/@LANGUAGE@/C/g' < $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1 > mpicc.1
mpic++.1: $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1
rm -f mpic++.1
sed -e 's/@COMMAND@/mpic++/g' -e 's/@PROJECT@/Open MPI/g' -e 's/@PROJECT_SHORT@/OMPI/g' -e 's/@LANGUAGE@/C++/g' < $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1 > mpic++.1
mpicxx.1: $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1
rm -f mpicxx.1
sed -e 's/@COMMAND@/mpicxx/g' -e 's/@PROJECT@/Open MPI/g' -e 's/@PROJECT_SHORT@/OMPI/g' -e 's/@LANGUAGE@/C++/g' < $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1 > mpicxx.1
mpif77.1: $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1
rm -f mpif77.1
sed -e 's/@COMMAND@/mpif77/g' -e 's/@PROJECT@/Open MPI/g' -e 's/@PROJECT_SHORT@/OMPI/g' -e 's/@LANGUAGE@/Fortran 77/g' < $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1 > mpif77.1
mpif90.1: $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1
rm -f mpif90.1
sed -e 's/@COMMAND@/mpif90/g' -e 's/@PROJECT@/Open MPI/g' -e 's/@PROJECT_SHORT@/OMPI/g' -e 's/@LANGUAGE@/Fortran 90/g' < $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1 > mpif90.1

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

@ -17,71 +17,63 @@
# $HEADER$ # $HEADER$
# #
DEFS="-DEXEEXT=\"$(EXEEXT)\""
if OMPI_INSTALL_BINARIES
# install even if we don't want the headers / opalcc, as we need it
# for the MPI layer
opal_wrapper_SOURCES = \ opal_wrapper_SOURCES = \
opal_wrapper.c opal_wrapper.c
opal_wrapper_LDADD = $(top_builddir)/opal/libopal.la opal_wrapper_LDADD = $(top_builddir)/opal/libopal.la
opal_wrapper_DEPENDENCIES = $(top_builddir)/opal/libopal.la opal_wrapper_DEPENDENCIES = $(top_builddir)/opal/libopal.la
DEFS="-DEXEEXT=\"$(EXEEXT)\"" bin_PROGRAMS = opal_wrapper
# Whether or not --enable-binaries was given to configure (useful for endif # OMPI_INSTALL_BINARIES
# multi-lib installations). If this was not given, we do not build /
# install anything in this directory.
if OMPI_INSTALL_BINARIES if WANT_INSTALL_HEADERS
nodist_pkgdata_DATA = \ nodist_pkgdata_DATA = \
opalcc-wrapper-data.txt \ opalcc-wrapper-data.txt \
opalc++-wrapper-data.txt opalc++-wrapper-data.txt
# Whether or not --enable-binaries was given to configure (useful for
# multi-lib installations). If this was not given, we do not build /
# install the applications / man pages
if OMPI_INSTALL_BINARIES
dist_pkgdata_DATA = \ dist_pkgdata_DATA = \
help-opal-wrapper.txt help-opal-wrapper.txt
bin_PROGRAMS = opal_wrapper
# List all man pages that will be installed # List all man pages that will be installed
man_MANS = opalcc.1 man_MANS = \
opalcc.1 \
opalc++.1
# MANS are not automatically distributed EXTRA_DIST = \
opal_wrapper.1 \
$(man_MANS)
EXTRA_DIST = $(man_MANS)
if CASE_SENSITIVE_FS
install-exec-hook:
(cd $(DESTDIR)$(bindir); rm -f opalcc$(EXEEXT); $(LN_S) opal_wrapper opalcc)
(cd $(DESTDIR)$(bindir); rm -f opalc++$(EXEEXT); $(LN_S) opal_wrapper opalc++)
(cd $(DESTDIR)$(bindir); rm -f opalCC$(EXEEXT); $(LN_S) opal_wrapper opalCC)
(cd $(DESTDIR)$(pkgdatadir); rm -f opalCC-wrapper-data.txt; $(LN_S) opalc++-wrapper-data.txt opalCC-wrapper-data.txt)
install-data-hook:
(cd $(DESTDIR)$(mandir)/man1; rm -f opalc++.1; $(LN_S) opalcc.1 opalc++.1)
(cd $(DESTDIR)$(mandir)/man1; rm -f opalCC.1; $(LN_S) opalcc.1 opalCC.1)
uninstall-local:
rm -f $(DESTDIR)$(bindir)/opalcc$(EXEEXT) \
$(DESTDIR)$(bindir)/opalc++$(EXEEXT) \
$(DESTDIR)$(bindir)/opalCC$(EXEEXT) \
$(DESTDIR)$(mandir)/man1/opalc++.1 \
$(DESTDIR)$(mandir)/man1/opalCC.1 \
$(DESTDIR)$(pkgdatadir)/opalCC-wrapper-data.txt
else
install-exec-hook: install-exec-hook:
(cd $(DESTDIR)$(bindir); rm -f opalcc$(EXEEXT); $(LN_S) opal_wrapper opalcc) (cd $(DESTDIR)$(bindir); rm -f opalcc$(EXEEXT); $(LN_S) opal_wrapper opalcc)
(cd $(DESTDIR)$(bindir); rm -f opalc++$(EXEEXT); $(LN_S) opal_wrapper opalc++) (cd $(DESTDIR)$(bindir); rm -f opalc++$(EXEEXT); $(LN_S) opal_wrapper opalc++)
install-data-hook:
(cd $(DESTDIR)$(mandir)/man1; rm -f opalc++.1; $(LN_S) opalcc.1 opalc++.1)
uninstall-local: uninstall-local:
rm -f $(DESTDIR)$(bindir)/opalcc$(EXEEXT) \ rm -f $(DESTDIR)$(bindir)/opalcc$(EXEEXT) \
$(DESTDIR)$(bindir)/opalc++$(EXEEXT) \ $(DESTDIR)$(bindir)/opalc++$(EXEEXT)
$(DESTDIR)$(mandir)/man1/opalc++.1
endif endif # OPAL_INSTALL_BINARIES
else endif # WANT_INSTALL_HEADERS
endif opalcc.1: opal_wrapper.1
rm -f opalcc.1
sed -e 's/@COMMAND@/opalcc/g' -e 's/@PROJECT@/Open PAL/g' -e 's/@PROJECT_SHORT@/OPAL/g' -e 's/@LANGUAGE@/C/g' < $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1 > opalcc.1
opalc++.1: opal_wrapper.1
rm -f opalc++.1
sed -e 's/@COMMAND@/opalc++/g' -e 's/@PROJECT@/Open PAL/g' -e 's/@PROJECT_SHORT@/OPAL/g' -e 's/@LANGUAGE@/C++/g' < $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1 > opalc++.1

208
opal/tools/wrappers/opal_wrapper.1 Обычный файл
Просмотреть файл

@ -0,0 +1,208 @@
.TH @COMMAND@ 1 "@PROJECT@" "@PROJECT_SHORT@" "@PROJECT@"
.
.SH NAME
@COMMAND@ -- @PROJECT@ @LANGUAGE@ wrapper compiler
.
.SH SYNTAX
@COMMAND@ [-showme|-showme:compile|-showme:link] ...
.
.SH OPTIONS
.TP
-showme
Do not invoke the underlying compiler. Instead, show the command line
that would be executed to compile the program. \fBNOTE:\fR If a
non-filename argument is passed on the command line, the \fI-showme\fR
option will \fInot\fR display any additional flags. For example, both
"@COMMAND@ --showme" and "@COMMAND@ --showme my_source.c" will show all the
wrapper-supplied flags. But "@COMMAND@ -showme -v" will only show the
underlying compiler name and "-v".
.TP
-showme:compile
Do not invoke the underlying @LANGUAGE@ compiler. Instead, show the
compiler flags that would be supplied to the @LANGUAGE@ compiler.
.TP
-showme:link
Do not invoke the underlying @LANGUAGE@ compiler. Instead, show the linker
flags that would be supplied to the @LANGUAGE@ compiler.
.PP
See the man page for your underlying compiler for other options that
can be passed through @COMMAND@
.
.
.SH DESCRIPTION
.PP
Conceptually, the role of these commands is quite simple:
transparently add relevant compiler and linker flags to the user's
command line that are necessary to compile / link @PROJECT@
programs, and then invoke the underlying compiler to actually perform
the command.
.
.PP
As such, these commands are frequently referred to as "wrapper"
compilers because they do not actually compile or link applications
themselves; they only add in command line flags and invoke the
back-end compiler.
.
.
.SS Background
Open MPI is comprised of three software layers: OPAL (Open Portable
Access Layer), ORTE (Open Run-Time Environment), and OMPI (Open MPI).
There are wrapper compilers for each layer; each layer's wrapper only
links in the libraries relevant for that layer. Specifically, each
layer provides the following wrapper compilers:
.
.TP 4
OPAL
\fIopalcc\fR and \fIopalc++\fR
.
.TP
ORTE
\fIortecc\fR and \fIortec++\fR
.
.TP
OMPI
\fImpicc\fR, \fImpic++\fR, \fImpicxx\fR, \fImpiCC\fR (only on systems with
case-senstive file systems), \fImpif77\fR, and \fImpif90\fR. Note
that \fImpic++\fR, \fImpicxx\fR, and \fImpiCC\fR all invoke the same
underlying C++ compiler with the same options. All are provided as
compatibility with other MPI implementations.
.
.PP
The Fortran wrapper compilers for MPI (\fImpif77\fR and \fImpif90\fR)
will be inoperative and will return an error on use if Fortran 77 /
Fortran 90 support was not built into the MPI layer.
.
.
.SS Overview
\fI@COMMAND@\fR is a convenience wrappers for the underlying
@LANGUAGE@ compiler. Translation of an @PROJECT@ program requires the
linkage of the @PROJECT@-specific libraries which may not reside in
one of the standard search directories of ld(1). It also often
requires the inclusion of header files what may also not be found in a
standard location.
.
.PP
\fI@COMMAND@\fR passes its arguments to the underlying @LANGUAGE@
compiler along with the -I, -L and -l options required by @PROJECT@
programs.
.
.PP
The @PROJECT@ Team \fIstrongly\fR encourages using the wrapper
compilers instead of attempting to link to the @PROJECT@ libraries
manually. This allows the specific implementation of @PROJECT@ to
change without forcing changes to linker directives in users'
Makefiles. Indeed, the specific set of flags and libraries used by
the wrapper compilers depends on how @PROJECT@ was configured and
built; the values can change between different installations of the
same version of @PROJECT@.
.
.PP
Indeed, since the wrappers are simply thin shells on top of an
underlying compiler, there are very, very few compelling reasons
\fInot\fR to use \fI@COMMAND@\fR. When it is not possible to use the
wrappers directly, the \fI-showme:compile\fR and \fI-showme:link\fR
options should be used to determine what flags the wrappers would have
used. For example:
.
.PP
shell$ cc -c file1.c `mpicc -showme:compile`
.
.PP
shell$ cc -c file2.c `mpicc -showme:compile`
.
.PP
shell$ cc file1.o file2.o `mpicc -showme:link` -o my_mpi_program
.
.
.SH NOTES
.PP
It is possible to make the wrapper compilers multi-lib aware. That
is, the libraries and includes specified may differ based on the
compiler flags specified (for example, with the GNU compilers on
Linux, a different library path may be used if -m32 is seen versus
-m64 being seen). This is not the default behavior in a standard
build, but can be activated (for example, in a binary package
providing both 32 and 64 bit support). More information can be found
at:
.PP
https://svn.open-mpi.org/trac/ompi/wiki/compilerwrapper3264
.
.
.SH FILES
.PP
The string that the wrapper compilers insert into the command line
before invoking the underlying compiler are stored in a text file
created by @PROJECT@ and installed to
\fI$pkgdata/@COMMAND@-wrapper-data.txt\fR, where \fI$pkgdata\fR
is typically \fI$prefix/share/openmpi\fR, and \fI$prefix\fR is the top
installation directory of @PROJECT@.
.
.PP
It is rarely necessary to edit this file, but it can be examined to
gain insight into what flags the wrappers are placing on the command
line.
.
.
.SH ENVIRONMENT VARIABLES
.PP
By default, the wrappers use the compilers that were selected when
@PROJECT@ was configured. These compilers were either found
automatically by Open MPI's "configure" script, or were selected by
the user in the CC, CXX, F77, and/or FC environment variables
before "configure" was invoked. Additionally, other arguments
specific to the compiler may have been selected by configure.
.
.PP
These values can be selectively overridden by either editing the text
files containing this configuration information (see the \fBFILES\fR
section), or by setting selected environment variables of the
form "@PROJECT_SHORT@_value".
.
.PP
Valid value names are:
.
.TP
CPPFLAGS
Flags added when invoking the preprocessor (C or C++)
.
.TP
LDFLAGS
Flags added when invoking the linker (C, C++, or Fortran)
.
.TP
LIBS
Libraries added when invoking the linker (C, C++, or Fortran)
.
.TP
CC
C compiler
.
.TP
CFLAGS
C compiler flags
.
.TP
CXX
C++ compiler
.
.TP
CXXFLAGS
C++ compiler flags
.
.
.TP
F77
Fortran 77 compiler
.
.TP
FFLAGS
Fortran 77 compiler flags
.
.
.TP
FC
Fortran 90 compiler
.
.TP
FCFLAGS
Fortran 90 compiler flags

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

@ -1,226 +0,0 @@
.TH opalcc 1 "OPEN MPI TOOLS" "OPEN MPI" "OPEN MPI TOOLS"
.
.SH NAME
This man page describes the wrapper compilers for the Open MPI (OMPI),
OpenRTE (ORTE), and Open Portable Access Layer (OPAL):
.
.PP
mpicc, mpiCC / mpic++, mpif77, mpif90
.
.PP
ortecc, orteCC / ortec++
.
.PP
opalcc, opalCC / opalc++
.
.
.SH SYNTAX
mpicc [-showme|-showme:compile|-showme:link] ...
.
.PP
The same syntax works for all the wrapper compilers; \fImpicc\fR is
shown above as a single example representing all the others.
.
.
.SH OPTIONS
.TP
-showme
Do not invoke the underlying compiler. Instead, show the command line
that would be executed to compile the program. \fBNOTE:\fR If a
non-filename argument is passed on the command line, the \fI-showme\fR
option will \fInot\fR display any additional flags. For example, both
"mpicc --showme" and "mpicc --showme my_source.c" will show all the
wrapper-supplied flags. But "mpicc -showme -v" will only show the
underlying compiler name and "-v".
.TP
-showme:compile
Do not invoke the underlying C/C++ compiler. Instead, show the
compiler flags that would be supplied to the C/C++ compiler.
.TP
-showme:link
Do not invoke the underlying C/C++ compiler. Instead, show the linker
flags that would be supplied to the C/C++ compiler.
.PP
See cc(1) and CC(1) (or whatever your underlying C/C++ compilers are)
for all other options.
.
.
.SH DESCRIPTION
.PP
Conceptually, the role of these commands is quite simple:
transparently add relevant compiler and linker flags to the user's
command line that are necessary to compile / link OPAL, ORTE, and OMPI
programs, and then invoke the underlying compiler to actually perform
the command.
.
.PP
As such, these commands are frequently referred to as "wrapper"
compilers because they do not actually compile or link applications
themselves; they only add in command line flags and invoke the
back-end compiler.
.
.
.SS Background
Open MPI is comprised of three software layers: OPAL (Open Portable
Access Layer), ORTE (Open Run-Time Environment), and OMPI (Open MPI).
There are wrapper compilers for each layer; each layer's wrapper only
links in the libraries relevant for that layer. Specifically, each
layer provides the following wrapper compilers:
.
.TP 4
OPAL
\fIopalcc\fR, \fIopalc++\fR, \fIopalCC\fR (only on systems with
case-sensitive filesystems)
.
.TP
ORTE
\fIortecc\fR, \fIortec++\fR, \fIorteCC\fR (only on systems with
case-senstive filesystems)
.
.TP
OMPI
\fImpicc\fR, \fImpic++\fR, \fImpiCC\fR (only on systems with
case-senstive file systems), \fImpif77\fR, \fImpif90\fR
.
.PP
Some systems may not have all the wrapper compilers listed above
depending on which back-end compilers are available. For example, if
a system does not have any Fortran compilers available, \fImpif77\fR
and \fImpif90\fR will not be available.
.PP
The descriptions below are use the names of the MPI wrapper compilers,
but generally apply to all wrapper compilers. Likewise, the name
\fImpiCC\fR is used in the descriptions below; it is only available on
systems with a C++ compiler and case-sensitive filesystems
(\fImpic++\fR is available on all systems with a C++ compiler).
.
.
.SS Overview
\fImpicc\fR and \fImpiCC\fR (\fImpic++\fR is a synonym for \fImpiCC\fR
provided for filenames that do not support case-sensitive filenames)
are convenience wrappers for the underlying C and C++ compilers.
Likewise, \fImpif77\fR and \fImpif90\fR are convenience wrappers for
the underlying F77 and F90 compilers. Translation of an Open MPI
program requires the linkage of the Open MPI-specific libraries which
may not reside in one of the standard search directories of ld(1). It
also often requires the inclusion of header files what may also not be
found in a standard location.
.
.PP
\fImpicc\fR passes its arguments to the underlying C compiler along
with the -I, -L and -l options required by Open MPI programs.
Likewise, \fImpiCC\fR (\fImpic++\fR), \fImpif77\FR, and \fImpif90\fR
are similar, but invoke the underlying C++, F77, and F90 compiler
instead, respectively.
.
.PP
The Open MPI Team \fIstrongly\fR encourages using the wrapper
compilers instead of attempting to link to the Open MPI libraries
manually. This allows the specific implementation of Open MPI to
change without forcing changes to linker directives in users'
Makefiles. Indeed, the specific set of flags and libraries used by
the wrapper compilers depends on how Open MPI was configured and
built; the values can change between different installations of the
same version of Open MPI.
.
.PP
Indeed, since the wrappers are simply thin shells on top of an
underlying compiler, there are very, very few compelling reasons
\fInot\fR to use \fImpicc\fR / \fImpiCC\fR. When it is not possible
to use the wrappers directly, the \fI-showme:compile\fR and
\fI-showme:link\fR options should be used to determine what flags the
wrappers would have used. For example:
.
.PP
shell$ cc -c file1.c `mpicc -showme:compile`
.
.PP
shell$ cc -c file2.c `mpicc -showme:compile`
.
.PP
shell$ cc file1.o file2.o `mpicc -showme:link` -o my_mpi_program
.
.
.SH NOTES
.PP
It is possible to make the wrapper compilers multi-lib aware. That
is, the libraries and includes specified may differ based on the
compiler flags specified (for example, with the GNU compilers on
Linux, a different library path may be used if -m32 is seen versus
-m64 being seen). This is not the default behavior in a standard
build, but can be activated (for example, in a binary package
providing both 32 and 64 bit support). More information can be found
at:
.PP
https://svn.open-mpi.org/trac/ompi/wiki/compilerwrapper3264
.
.
.SH FILES
.PP
The string that the wrapper compilers insert into the command line
before invoking the underlying compiler are stored in a text file
created by Open MPI and installed to
\fI$pkgdata/<wrapper_name>-wrapper-data.txt\fR, where \fI$pkgdata\fR
is typically \fI$prefix/share/openmpi\fR, and \fI$prefix\fR is the top
installation directory of Open MPI. \fI<wrapper_name>\fR is the
executable name of the wrapper compiler, such as \fImpicc\fR and
\fImpic++\fR.
.
.PP
It is rarely necessary to edit this file, but it can be examined to
gain insight into what flags the wrappers are placing on the command
line.
.
.
.SH ENVIRONMENT VARIABLES
.PP
By default, the wrappers use the compilers that were selected when
Open MPI was configured. These compilers were either found
automatically by Open MPI's "configure" script, or were selected by
the user in the CC, CXX, F77, and/or FC environment variables
before "configure" was invoked. Additionally, other arguments
specific to the compiler may have been selected by configure.
.
.PP
These values can be selectively overridden by either editing the text
files containing this configuration information (see the \fBFILES\fR
section), or by setting selected environment variables of the
form "project_value".
.
.PP
Valid project names are \fIOPAL\fR, \fIORTE\fR, and \fIOMPI\fR. Valid
value names are:
.
.TP
CC
C compiler
.
.TP
CFLAGS
C compiler flags
.
.TP
CXX
C++ compiler
.
.TP
CXXFLAGS
C++ compiler flags
.
.
.TP
F77
Fortran 77 compiler
.
.TP
FFLAGS
Fortran 77 compiler flags
.
.
.TP
FC
Fortran 90 compiler
.
.TP
FCFLAGS
Fortran 90 compiler flags

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

@ -16,6 +16,8 @@
# $HEADER$ # $HEADER$
# #
if OMPI_INSTALL_BINARIES
nodist_pkgdata_DATA = nodist_pkgdata_DATA =
dist_pkgdata_DATA = \ dist_pkgdata_DATA = \
help-orte-clean.txt help-orte-clean.txt
@ -32,3 +34,4 @@ EXTRA_DIST = orte-clean.1
orte_clean_LDADD = $(top_builddir)/orte/liborte.la orte_clean_LDADD = $(top_builddir)/orte/liborte.la
orte_clean_DEPENDENCIES = $(top_builddir)/orte/liborte.la orte_clean_DEPENDENCIES = $(top_builddir)/orte/liborte.la
endif # OMPI_INSTALL_BINARIES

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

@ -16,6 +16,8 @@
# $HEADER$ # $HEADER$
# #
if OMPI_INSTALL_BINARIES
nodist_pkgdata_DATA = nodist_pkgdata_DATA =
dist_pkgdata_DATA = \ dist_pkgdata_DATA = \
help-orte-ps.txt help-orte-ps.txt
@ -32,3 +34,4 @@ EXTRA_DIST = orte-ps.1
orte_ps_LDADD = $(top_builddir)/orte/liborte.la orte_ps_LDADD = $(top_builddir)/orte/liborte.la
orte_ps_DEPENDENCIES = $(top_builddir)/orte/liborte.la orte_ps_DEPENDENCIES = $(top_builddir)/orte/liborte.la
endif # OMPI_INSTALL_BINARIES

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

@ -17,48 +17,37 @@
# $HEADER$ # $HEADER$
# #
if OMPI_INSTALL_BINARIES if WANT_INSTALL_HEADERS
nodist_pkgdata_DATA = \ nodist_pkgdata_DATA = \
ortecc-wrapper-data.txt \ ortecc-wrapper-data.txt \
ortec++-wrapper-data.txt ortec++-wrapper-data.txt
if CASE_SENSITIVE_FS if OMPI_INSTALL_BINARIES
install-exec-hook:
(cd $(DESTDIR)$(bindir); rm -f ortecc$(EXEEXT); $(LN_S) opal_wrapper ortecc) man_MANS = \
(cd $(DESTDIR)$(bindir); rm -f ortec++$(EXEEXT); $(LN_S) opal_wrapper ortec++) ortecc.1 \
(cd $(DESTDIR)$(bindir); rm -f orteCC$(EXEEXT); $(LN_S) opal_wrapper orteCC) ortec++.1
(cd $(DESTDIR)$(pkgdatadir); rm -f orteCC-wrapper-data.txt; $(LN_S) ortec++-wrapper-data.txt orteCC-wrapper-data.txt)
EXTRA_DIST = $(man_MANS)
install-data-hook:
(cd $(DESTDIR)$(mandir)/man1; rm -f ortecc.1; $(LN_S) opalcc.1 ortecc.1)
(cd $(DESTDIR)$(mandir)/man1; rm -f ortec++.1; $(LN_S) opalcc.1 ortec++.1)
(cd $(DESTDIR)$(mandir)/man1; rm -f orteCC.1; $(LN_S) opalcc.1 orteCC.1)
uninstall-local:
rm -f $(DESTDIR)$(bindir)/ortecc$(EXEEXT) \
$(DESTDIR)$(bindir)/ortec++$(EXEEXT) \
$(DESTDIR)$(bindir)/orteCC$(EXEEXT) \
$(DESTDIR)$(mandir)/man1/ortecc.1 \
$(DESTDIR)$(mandir)/man1/ortec++.1 \
$(DESTDIR)$(mandir)/man1/orteCC.1 \
$(DESTDIR)$(pkgdatadir)/orteCC-wrapper-data.txt
else
install-exec-hook: install-exec-hook:
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
(cd $(DESTDIR)$(bindir); rm -f ortecc$(EXEEXT); $(LN_S) opal_wrapper ortecc) (cd $(DESTDIR)$(bindir); rm -f ortecc$(EXEEXT); $(LN_S) opal_wrapper ortecc)
(cd $(DESTDIR)$(bindir); rm -f ortec++$(EXEEXT); $(LN_S) opal_wrapper ortec++) (cd $(DESTDIR)$(bindir); rm -f ortec++$(EXEEXT); $(LN_S) opal_wrapper ortec++)
install-data-hook:
(cd $(DESTDIR)$(mandir)/man1; rm -f ortecc.1; $(LN_S) opalcc.1 ortecc.1)
(cd $(DESTDIR)$(mandir)/man1; rm -f ortec++.1; $(LN_S) opalcc.1 ortec++.1)
uninstall-local: uninstall-local:
rm -f $(DESTDIR)$(bindir)/ortecc$(EXEEXT) \ rm -f $(DESTDIR)$(bindir)/ortecc$(EXEEXT) \
$(DESTDIR)$(mandir)/man1/ortecc.1 \
$(DESTDIR)$(mandir)/man1/ortec++.1 \
$(DESTDIR)$(bindir)/ortec++$(EXEEXT) $(DESTDIR)$(bindir)/ortec++$(EXEEXT)
endif endif # OMPI_INSTALL_BINARIES
endif endif # WANT_INSTALL_HEADERS
ortecc.1: $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1
rm -f ortecc.1
sed -e 's/@COMMAND@/ortecc/g' -e 's/@PROJECT@/OpenRTE/g' -e 's/@PROJECT_SHORT@/ORTE/g' -e 's/@LANGUAGE@/C/g' < $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1 > ortecc.1
ortec++.1: $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1
rm -f ortec++.1
sed -e 's/@COMMAND@/ortec++/g' -e 's/@PROJECT@/OpenRTE/g' -e 's/@PROJECT_SHORT@/ORTE/g' -e 's/@LANGUAGE@/C++/g' < $(top_srcdir)/opal/tools/wrappers/opal_wrapper.1 > ortec++.1