Brian and I talked higher bandwidth to figure this out.

The issue is that if the user has to specify -static to their linker, they 
*also* have to specify --ompi:static, or Bad Things will happen.  Or, if they 
don't specify -static but *only* specify --ompi:static, Bad Things will happen. 
 In short: it seems like adding yet another wrapper-compiler-specific flag to 
the MPI ecosystem will cause confusion, fear, and possibly the death of some 
cats.

The alternate proposal is to have one-big-honkin' libmpi that slurps in all of 
libopen-rte and libopen-pal.  We'll still install libopen-rte and libopen-pal 
because the tools (like orterun and friends) will need them.  But MPI apps will 
only -lmpi, regardless of whether they are static or shared.  There will never 
be a need to -lopen-rte and -lopen-pal for MPI apps.

Analogous things will happen for ORTE: libopen-rte will slurp in libopen-pal.  
And ORTE apps will only -lopen-rte.  Birds will sing.  Children will play.  The 
world will be content.

--> NOTE: The ABI break will still occur between 1.4 and 1.5 because we'll be 
.so versioning libopen-pal and libopen-rte.  The only issue Brian was concerned 
about was the modification of the wrapper compilers.

If we do this, is there anyone who will still want the old 3-library behavior?  
Specifically:

a) the libraries are not slurped into each other, and
b) the MPI wrapper compilers still list all 3 libraries / ORTE wrapper 
compilers still list 2 libs

If so, we can add a --with-wrappers-linking-all-libs configure switch (or 
something with a better name) to support the old behavior, but I'd argue that 
it should not be the default.



On Feb 17, 2010, at 1:31 PM, Barrett, Brian W wrote:

> On Feb 17, 2010, at 11:23 AM, Jeff Squyres wrote:
> > Here's my proposal on how to change the wrapper compilers to understand the 
> > difference between static and dynamic linking:
> >
> > *** FIRST: give the wrapper the ability to link one library or all libraries
> > - wrapper data text files grow a new option: libs_private (a la 
> > pkg-config(1) files)
> > - wrapper data text files list -l<top_lib> in libs, and everything else in 
> > libs_private.  For example, for mpicc:
> >  libs=-lmpi
> >  libs_private=-lopen-rte -lopen-pal
> >
> > *** NEXT: give the wrappers the ability to switch between just ${libs} or 
> > ${libs}+${libs_private}.  Pseudocode:
> > - wrapper always adds ${libs} to the argv
> > - wrapper examines each argv[x]:
> >  --ompi:shared) found_in_argv=1 ;;
> >  --ompi:static) add ${libs_private} ; found_in_argv=1 ;;
> > - if (!found_in_argv)
> >  - if default set via configure, add ${libs_private} (SEE BELOW)
> 
> This is horrible!  Users want to be able to specify -Bstatic or -static or 
> whatever and have the right things happen.  I have a better idea - since 
> there's basically no set of users which use OMPI's libopal and some other 
> libopal (and indeed, that's near impossible do to the horrible API exposed by 
> opal (data type sizes changing based on configure arguments, for example), 
> let's give up and just have libmpi.{so,a} and completely avoid this whole rat 
> hole of a problem?
> 
> There's simply no way your solution is workable for most users.  They'll just 
> end up wondering why when they do -Bstatic (or whatever the option is on 
> their compiler) they get missing symbol link errors.
> 
> Brian
> 
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel
> 


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

For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/


Reply via email to