From 581a4b0a4ebb9ce8d9732bfb17b5c94d42e71601 Mon Sep 17 00:00:00 2001 From: Brian Barrett Date: Thu, 19 Oct 2006 18:34:17 +0000 Subject: [PATCH] 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. --- ompi/tools/ortetools/Makefile.am | 4 + ompi/tools/wrappers/Makefile.am | 125 ++++++++-------- opal/tools/wrappers/Makefile.am | 70 ++++----- opal/tools/wrappers/opal_wrapper.1 | 208 ++++++++++++++++++++++++++ opal/tools/wrappers/opalcc.1 | 226 ----------------------------- orte/tools/orte-clean/Makefile.am | 3 + orte/tools/orte-ps/Makefile.am | 3 + orte/tools/wrappers/Makefile.am | 51 +++---- 8 files changed, 330 insertions(+), 360 deletions(-) create mode 100644 opal/tools/wrappers/opal_wrapper.1 delete mode 100644 opal/tools/wrappers/opalcc.1 diff --git a/ompi/tools/ortetools/Makefile.am b/ompi/tools/ortetools/Makefile.am index 6c28930e7f..dae4fe1a88 100644 --- a/ompi/tools/ortetools/Makefile.am +++ b/ompi/tools/ortetools/Makefile.am @@ -16,6 +16,8 @@ # $HEADER$ # +if OMPI_INSTALL_BINARIES + dist_pkgdata_DATA = man_MANS = mpirun.1 \ @@ -49,3 +51,5 @@ ompi-clean.1: $(top_srcdir)/orte/tools/orte-clean/orte-clean.1 distclean-local: rm -f mpirun.1 mpiexec.1 ompi-ps.1 ompi-clean.1 + +endif # OMPI_INSTALL_BINARIES diff --git a/ompi/tools/wrappers/Makefile.am b/ompi/tools/wrappers/Makefile.am index a83ff86c9c..c8c221e2ef 100644 --- a/ompi/tools/wrappers/Makefile.am +++ b/ompi/tools/wrappers/Makefile.am @@ -17,82 +17,79 @@ # $HEADER$ # -if OMPI_INSTALL_BINARIES - dist_pkgdata_DATA = mpicc-wrapper-data.txt \ mpic++-wrapper-data.txt \ mpif77-wrapper-data.txt \ mpif90-wrapper-data.txt -if CASE_SENSITIVE_FS -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) +if OMPI_INSTALL_BINARIES +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 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 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: install-data-hook-always (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: - (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: +uninstall-local: uninstall-local-always 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/mpif77.1 \ - $(DESTDIR)$(mandir)/man1/mpif90.1 \ - $(DESTDIR)$(pkgdatadir)/mpiCC-wrapper-data.txt \ - $(DESTDIR)$(pkgdatadir)/mpicxx-wrapper-data.txt + $(DESTDIR)$(pkgdatadir)/mpiCC-wrapper-data.txt -else -uninstall-local: - rm -f $(DESTDIR)$(bindir)/mpicxx$(EXEEXT) \ - $(DESTDIR)$(bindir)/mpicc$(EXEEXT) \ - $(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 +else # CASE_SENSITIVE_FS +install-exec-hook: install-exec-hook-always +install-data-hook: install-data-hook-always +uninstall-local: uninstall-local-always -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 diff --git a/opal/tools/wrappers/Makefile.am b/opal/tools/wrappers/Makefile.am index 730a47856a..2eb3d55ef6 100644 --- a/opal/tools/wrappers/Makefile.am +++ b/opal/tools/wrappers/Makefile.am @@ -17,71 +17,63 @@ # $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.c opal_wrapper_LDADD = $(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 -# multi-lib installations). If this was not given, we do not build / -# install anything in this directory. +endif # OMPI_INSTALL_BINARIES -if OMPI_INSTALL_BINARIES +if WANT_INSTALL_HEADERS nodist_pkgdata_DATA = \ opalcc-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 = \ help-opal-wrapper.txt -bin_PROGRAMS = opal_wrapper - # 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: (cd $(DESTDIR)$(bindir); rm -f opalcc$(EXEEXT); $(LN_S) opal_wrapper opalcc) (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: rm -f $(DESTDIR)$(bindir)/opalcc$(EXEEXT) \ - $(DESTDIR)$(bindir)/opalc++$(EXEEXT) \ - $(DESTDIR)$(mandir)/man1/opalc++.1 + $(DESTDIR)$(bindir)/opalc++$(EXEEXT) -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 diff --git a/opal/tools/wrappers/opal_wrapper.1 b/opal/tools/wrappers/opal_wrapper.1 new file mode 100644 index 0000000000..e6df7acba8 --- /dev/null +++ b/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 diff --git a/opal/tools/wrappers/opalcc.1 b/opal/tools/wrappers/opalcc.1 deleted file mode 100644 index 1cda582703..0000000000 --- a/opal/tools/wrappers/opalcc.1 +++ /dev/null @@ -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-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\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 diff --git a/orte/tools/orte-clean/Makefile.am b/orte/tools/orte-clean/Makefile.am index 2b1513f78f..ab70269e63 100644 --- a/orte/tools/orte-clean/Makefile.am +++ b/orte/tools/orte-clean/Makefile.am @@ -16,6 +16,8 @@ # $HEADER$ # +if OMPI_INSTALL_BINARIES + nodist_pkgdata_DATA = dist_pkgdata_DATA = \ help-orte-clean.txt @@ -32,3 +34,4 @@ EXTRA_DIST = orte-clean.1 orte_clean_LDADD = $(top_builddir)/orte/liborte.la orte_clean_DEPENDENCIES = $(top_builddir)/orte/liborte.la +endif # OMPI_INSTALL_BINARIES diff --git a/orte/tools/orte-ps/Makefile.am b/orte/tools/orte-ps/Makefile.am index d6995329a7..e60424ab6e 100644 --- a/orte/tools/orte-ps/Makefile.am +++ b/orte/tools/orte-ps/Makefile.am @@ -16,6 +16,8 @@ # $HEADER$ # +if OMPI_INSTALL_BINARIES + nodist_pkgdata_DATA = dist_pkgdata_DATA = \ help-orte-ps.txt @@ -32,3 +34,4 @@ EXTRA_DIST = orte-ps.1 orte_ps_LDADD = $(top_builddir)/orte/liborte.la orte_ps_DEPENDENCIES = $(top_builddir)/orte/liborte.la +endif # OMPI_INSTALL_BINARIES diff --git a/orte/tools/wrappers/Makefile.am b/orte/tools/wrappers/Makefile.am index aaef61d3e4..01a5efb7b0 100644 --- a/orte/tools/wrappers/Makefile.am +++ b/orte/tools/wrappers/Makefile.am @@ -17,48 +17,37 @@ # $HEADER$ # -if OMPI_INSTALL_BINARIES +if WANT_INSTALL_HEADERS nodist_pkgdata_DATA = \ ortecc-wrapper-data.txt \ ortec++-wrapper-data.txt -if CASE_SENSITIVE_FS -install-exec-hook: - (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 orteCC$(EXEEXT); $(LN_S) opal_wrapper orteCC) - (cd $(DESTDIR)$(pkgdatadir); rm -f orteCC-wrapper-data.txt; $(LN_S) ortec++-wrapper-data.txt orteCC-wrapper-data.txt) - -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 +if OMPI_INSTALL_BINARIES + +man_MANS = \ + ortecc.1 \ + ortec++.1 + +EXTRA_DIST = $(man_MANS) + 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 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: rm -f $(DESTDIR)$(bindir)/ortecc$(EXEEXT) \ - $(DESTDIR)$(mandir)/man1/ortecc.1 \ - $(DESTDIR)$(mandir)/man1/ortec++.1 \ $(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