Open MPI logo

Hardware Locality Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Hardware Locality Development mailing list

Subject: Re: [hwloc-devel] [hwloc-svn] svn:hwloc r4815 - branches/components/src
From: Jeff Squyres (jsquyres_at_[hidden])
Date: 2012-09-05 09:58:10


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-mailer_at_[hidden]> 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-svn_at_[hidden]
>> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-svn
>
>
> --
> Jeff Squyres
> jsquyres_at_[hidden]
> For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/
>
>
> _______________________________________________
> hwloc-devel mailing list
> hwloc-devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-devel

-- 
Jeff Squyres
jsquyres_at_[hidden]
For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/