I should clarify...

In OMPI, if we're building libmpi.so, we default to building plugins as DSOs.  
If we're building libmpi.a, then we slurp all the plugins into libmpi.a (i.e., 
don't build them as DSOs).  This avoids many of the issues in table 2.


On Sep 5, 2012, at 9:54 AM, Jeff Squyres wrote:

> This is a bad idea.
> 
> I'm trying to remember the reason why, but we explicitly *removed* such -l 
> statements (e.g., removed "-lmpi" from the plugins).  Hmm...  Oh, right.  
> Every time I think I understand linkers, I find out that I don't.  So last 
> time we had a Big Confusion Discussion About Linkers (BCDAL), I wrote it all 
> up:
> 
>    https://svn.open-mpi.org/trac/ompi/wiki/Linkers
> 
> The 4th column in these tables is labeled "OMPI DSO components depend on 
> libmpi.so?" (which is somewhat of a misnomer, because not all components are 
> at the MPI layer -- so consider it to mean "OMPI DSO components depend on 
> some OMPI library, such as libmpi.so?")
> 
> The problem cases are #9 and #12 in the first table: i.e., static linking.
> 
> Instead, we use lt_dladvise() to open hwloc plugins in the same scope as the 
> main application.
> 
> Of course, this has its own tradeoffs -- if hwloc itself, is opened as a 
> plugin in a private scope, then the plugins won't be able to find the symbols 
> it needs (i.e., cases #14, #15, #17, #18, #20, #21, #23, and #24 in the 2nd 
> table). 
> 
> Until POSIX effects hierarchical linker scopes (or at least something like 
> "please dlopen this plugin and put it in XYZ linker scope"), there's really 
> no good solution here.  :-(
> 
> 
> 
> On Sep 5, 2012, at 6:03 AM, <svn-commit-mai...@open-mpi.org> wrote:
> 
>> Author: bgoglin (Brice Goglin)
>> Date: 2012-09-05 06:03:52 EDT (Wed, 05 Sep 2012)
>> New Revision: 4815
>> URL: https://svn.open-mpi.org/trac/hwloc/changeset/4815
>> 
>> Log:
>> Pass -lhwloc to all plugins, at least Darwin wants it
>> (plugins use some hwloc functions)
>> 
>> Define a plugins_ldflags with all common stuff for plugins
>> (this somehow reverts r4811)
>> 
>> Text files modified: 
>>  branches/components/src/Makefile.am |    13 +++++++------                   
>>         
>>  1 files changed, 7 insertions(+), 6 deletions(-)
>> 
>> Modified: branches/components/src/Makefile.am
>> ==============================================================================
>> --- branches/components/src/Makefile.am      Wed Sep  5 06:03:36 2012        
>> (r4814)
>> +++ branches/components/src/Makefile.am      2012-09-05 06:03:52 EDT (Wed, 
>> 05 Sep 2012)      (r4815)
>> @@ -21,6 +21,7 @@
>> 
>> pluginsdir = $(libdir)/hwloc
>> plugins_LTLIBRARIES = 
>> +plugins_ldflags = -module -avoid-version -lhwloc
>> AM_CPPFLAGS += -DHWLOC_PLUGINS_DIR=\"$(pluginsdir)\"
>> 
>> # Sources and ldflags
>> @@ -40,7 +41,6 @@
>>        topology-xml.c \
>>        topology-xml-nolibxml.c
>> ldflags =
>> -common_ldflags = 
>> 
>> # Conditionally add to the sources and ldflags
>> 
>> @@ -52,7 +52,7 @@
>> xml_libxml_la_SOURCES = topology-xml-libxml.c
>> xml_libxml_la_CPPFLAGS = $(AM_CPPFLAGS) -DHWLOC_BUILD_PLUGIN
>> xml_libxml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_LIBXML2_CFLAGS)
>> -xml_libxml_la_LDFLAGS = $(common_ldflags) -module -avoid-version 
>> $(HWLOC_LIBXML2_LIBS)
>> +xml_libxml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_LIBXML2_LIBS)
>> endif
>> endif HWLOC_HAVE_LIBXML2
>> 
>> @@ -64,7 +64,7 @@
>> core_libpci_la_SOURCES = topology-libpci.c
>> core_libpci_la_CPPFLAGS = $(AM_CPPFLAGS) -DHWLOC_BUILD_PLUGIN
>> core_libpci_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_PCI_CFLAGS)
>> -core_libpci_la_LDFLAGS = $(common_ldflags) -module -avoid-version 
>> $(HWLOC_PCI_LIBS)
>> +core_libpci_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_PCI_LIBS)
>> endif
>> endif HWLOC_HAVE_LIBPCI
>> 
>> @@ -105,7 +105,8 @@
>> endif HWLOC_HAVE_FREEBSD
>> 
>> if HWLOC_HAVE_GCC
>> -common_ldflags += -no-undefined
>> +ldflags += -no-undefined
>> +plugins_ldflags += -no-undefined
>> endif HWLOC_HAVE_GCC
>> 
>> if HWLOC_HAVE_WINDOWS
>> @@ -136,7 +137,7 @@
>> # Installable library
>> 
>> libhwloc_la_SOURCES = $(sources)
>> -libhwloc_la_LDFLAGS = $(common_ldflags) $(ldflags) -version-info 
>> $(libhwloc_so_version) $(HWLOC_LIBS)
>> +libhwloc_la_LDFLAGS = $(ldflags) -version-info $(libhwloc_so_version) 
>> $(HWLOC_LIBS)
>> 
>> if HWLOC_HAVE_PLUGINS
>> AM_CPPFLAGS += $(LTDLINCL)
>> @@ -168,5 +169,5 @@
>> check_LTLIBRARIES = core_fake.la
>> core_fake_la_SOURCES = topology-fake.c
>> core_fake_la_CPPFLAGS = $(AM_CPPFLAGS) -DHWLOC_BUILD_PLUGIN
>> -core_fake_la_LDFLAGS = $(common_ldflags) -module -avoid-version -rpath 
>> /nowhere # force libtool to build a shared-library even it's check-only
>> +core_fake_la_LDFLAGS = $(plugins_ldflags) -rpath /nowhere # force libtool 
>> to build a shared-library even it's check-only
>> endif
>> _______________________________________________
>> hwloc-svn mailing list
>> hwloc-...@open-mpi.org
>> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-svn
> 
> 
> -- 
> Jeff Squyres
> jsquy...@cisco.com
> For corporate legal information go to: 
> http://www.cisco.com/web/about/doing_business/legal/cri/
> 
> 
> _______________________________________________
> hwloc-devel mailing list
> hwloc-de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-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