WHAT: Change OMPI's verbose build output to use Automake's new "silent" rules output (see below)

WHEN: For the 1.5 series (no particular release targeted)

WHY: Tidy up the output from "make all"; a nice side effect is that it becomes significantly easier to see compiler warnings

WHERE: configure.ac., ROMIO and VT's configure.in scripts (see patch below)

TIMEOUT: Tuesday teleconf, Nov 3 (next week).

=================================================================

Details:

In the hwloc project, Pavan from Argonne suggested using Automake 1.11's new "silent rules" option to significantly reduce the output during "make all". For example, our current output looks like this:

libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../../opal/include - I../../orte/include -I../../opal/mca/paffinity/linux/plpa/src/libplpa - I../.. -g -Wall -Wundef -Wno-long-long -Wsign-compare -Wmissing- prototypes -Wstrict-prototypes -Wcomment -pedantic -Werror-implicit- function-declaration -finline-functions -fno-strict-aliasing -pthread - fvisibility=hidden -MT opal_datatype_destroy.lo -MD -MP -MF .deps/ opal_datatype_destroy.Tpo -c opal_datatype_destroy.c -fPIC -DPIC - o .libs/opal_datatype_destroy.o libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../../opal/include - I../../orte/include -I../../opal/mca/paffinity/linux/plpa/src/libplpa - I../.. -g -Wall -Wundef -Wno-long-long -Wsign-compare -Wmissing- prototypes -Wstrict-prototypes -Wcomment -pedantic -Werror-implicit- function-declaration -finline-functions -fno-strict-aliasing -pthread - fvisibility=hidden -MT opal_datatype_create_contiguous.lo -MD -MP - MF .deps/opal_datatype_create_contiguous.Tpo -c opal_datatype_create_contiguous.c -fPIC -DPIC -o .libs/ opal_datatype_create_contiguous.o

With the new silent rules, the output looks like this:

  CC     opal_datatype_create_contiguous.lo
  CC     opal_datatype_destroy.lo

Basically, the compile command line is not echoed. Compiler stdout/ stderr, of course, is still output. A nice side-effect is that you can see compiler warnings MUCH easier. For example:

  CC     btl_sctp_component.lo
  CC     btl_sctp_frag.lo
btl_sctp_frag.c: In function `mca_btl_sctp_frag_large_send':
btl_sctp_frag.c:179: warning: int format, different type arg (arg 3)
btl_sctp_frag.c:179: warning: int format, different type arg (arg 5)
btl_sctp_frag.c: In function `mca_btl_sctp_frag_send':
btl_sctp_frag.c:303: warning: int format, different type arg (arg 3)
btl_sctp_frag.c:303: warning: int format, different type arg (arg 5)
  CC     btl_sctp_proc.lo
  CC     btl_sctp_recv_handler.lo

If you are using an Automake prior to v1.11, you won't see the new silent rules -- it will automatically default back to the "verbose" rules.

Note, too, that even with these changes, you can enable the verbose "make all" output in one of two ways:

1. Add "V=1" to your "make" command line

   shell$ make all V=1

2. Add "--disable-silent-rules" to your "configure" command line:

   shell$ ./configure --disable-silent-rules ...

FWIW, "verbose" produces about 20x the output as "silent" when building OMPI. Here's the size of outputs from two identical OMPI builds on my system -- one with "make -j 4" and one with "make -j 4 V=1":

 * Silent output: 109 KB <-- kilobytes
 * Verbose output: 2.2 MB <-- megabytes

The one down side of using the silent rules by default is that we'll get less diagnostic information when users send their build logs. I think we should update the web page to request that users send build logs of "make V=1", but I'm guessing that not everyone will do it.

The patch to do this is pretty small (adding 1 code line + 1 comment in various configure.ac/configure.in script); I included it below for review. Note that I did *not* silent-ize the libltdl build (which is a dozen or so files in the beginning of the build) because we wholly import libltdl at autogen time. I therefore didn't want to patch libltdl (further) after importing it a) to remain as forward- compatible as possible, and b) patching the imported libltdl build system might be tricky in terms of timestamps / dependencies. So those dozen-or-so files will still be "verbose", but the rest of the files in OMPI will be "silent".

Thoughts / comments?

--
Jeff Squyres
jsquy...@cisco.com

Index: configure.ac
===================================================================
--- configure.ac        (revision 22139)
+++ configure.ac        (working copy)
@@ -55,6 +55,9 @@

 m4_pattern_allow([m4_ifval])

+# If Automake supports silent rules, enable them.
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
# Make configure depend on the VERSION file, since it's used in AC_INIT
 AC_SUBST([CONFIGURE_DEPENDENCIES], ['$(top_srcdir)/VERSION'])

Index: ompi/mca/io/romio/romio/configure.in
===================================================================
--- ompi/mca/io/romio/romio/configure.in        (revision 22139)
+++ ompi/mca/io/romio/romio/configure.in        (working copy)
@@ -205,6 +205,9 @@
 # Open MPI: Init automake
 AM_INIT_AUTOMAKE(io-romio, 1.0.0, 'no')

+# Open MPI: If Automake supports silent rules, enable them.
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
 #
 # Check that an arch was set
 # If it wasn't set, try to guess using "util/tarch"
Index: ompi/contrib/vt/vt/configure.in
===================================================================
--- ompi/contrib/vt/vt/configure.in     (revision 22139)
+++ ompi/contrib/vt/vt/configure.in     (working copy)
@@ -6,6 +6,9 @@
 AM_INIT_AUTOMAKE(VampirTrace, 5.4.10)
 AM_CONFIG_HEADER(config.h)

+# Open MPI: If Automake supports silent rules, enable them.
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
 ACVT_CONF_INIT

 ACVT_CONF_TITLE([Initialization])
Index: ompi/contrib/vt/vt/extlib/otf/configure.in
===================================================================
--- ompi/contrib/vt/vt/extlib/otf/configure.in  (revision 22139)
+++ ompi/contrib/vt/vt/extlib/otf/configure.in  (working copy)
@@ -9,6 +9,9 @@
 AC_CONFIG_SRCDIR([config.h.in])
 AM_CONFIG_HEADER(config.h)

+# Open MPI: If Automake supports silent rules, enable them.
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
 # Checks for programs.
 AC_PROG_CXX
 AC_PROG_CC

Reply via email to