From d30bbc2ef9a366c1dede269b9018c4e966946d08 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Thu, 22 Mar 2012 11:30:57 +0000 Subject: [PATCH] Fix an old issue: enable hwloc PCI detection except on SuSE 10 64 bit. Worked with Oracle to verify that hwloc PCI detection is correctly disabled on the Suse 10/64 bit platform and is enabled by default on all other platforms. The --[en|dis]able-hwloc-pci switch is also available for manual override of the configure decision about hwloc PCI support. This commit was SVN r26175. --- README | 20 +++++++++++++- opal/mca/hwloc/configure.m4 | 39 ++++++++++++++++++++++++++++ opal/mca/hwloc/hwloc132/configure.m4 | 10 +------ 3 files changed, 59 insertions(+), 10 deletions(-) diff --git a/README b/README index 19f8ab909b..b1718d1c31 100644 --- a/README +++ b/README @@ -894,12 +894,30 @@ MISCELLANEOUS SUPPORT LIBRARIES affinity information for NUMA platforms. --with-hwloc-libdir= - Look in directory for the hwloc libraries. This option is only usable when building Open MPI against an external hwloc installation. Just like other --with-FOO-libdir configure options, this option is only needed for special configurations. +--disable-hwloc-pci + Disable building hwloc's PCI device-sensing capabilities. On some + platforms (e.g., SusE 10 SP1, x86-64), the libpci support library is + broken. Open MPI's configure script should usually detect when + libpci is not usable due to such brokenness and turn off PCI + support, but there may be cases when configure mistakenly enables + PCI support in the presence of a broken libpci. These cases may + result in "make" failing with warnings about relocation symbols in + libpci. The --disable-hwloc-pci switch can be used to force Open + MPI to not build hwloc's PCI device-sensing capabilities in these + cases. + + Similarly, if Open MPI incorrectly decides that libpci is broken, + you can force Open MPI to build hwloc's PCI device-sensing + capabilities by using --enable-hwloc-pci. + + hwloc can discover PCI devices and locality, which can be useful for + Open MPI in assigning message passing resources to MPI processes. + --with-libltdl[=VALUE] This option specifies where to find the GNU Libtool libltdl support library. The following VALUEs are permitted: diff --git a/opal/mca/hwloc/configure.m4 b/opal/mca/hwloc/configure.m4 index 887c593d4d..746f5d7bdb 100644 --- a/opal/mca/hwloc/configure.m4 +++ b/opal/mca/hwloc/configure.m4 @@ -63,6 +63,42 @@ AC_DEFUN([MCA_opal_hwloc_CONFIG_REQUIRE],[ AC_HELP_STRING([--with-hwloc(=DIR)], [Build hwloc support. DIR can take one of three values: "internal", "external", or a valid directory name. "internal" (or no DIR value) forces Open MPI to use its internal copy of hwloc. "external" forces Open MPI to use an external installation of hwloc. Supplying a valid directory name also forces Open MPI to use an external installation of hwloc, and adds DIR/include, DIR/lib, and DIR/lib64 to the search path for headers and libraries.])) + # Whether to enable or disable PCI support in embedded hwloc + # support. + AC_ARG_ENABLE([hwloc-pci], + AC_HELP_STRING([When building the embedded hwloc, whether to enable or disable PCI device support. Some operating system distros (e.g., SuSE 10) have a broken libpci.a that will cause Open MPI to fail to build due to relocation errors. Normally, Open MPI's configure script will automatically choose whether to enable or disable PCI device support in hwloc, but this option can be used to override Open MPI's default decision.])) + + # This is terrible. :-( Suse 10.1 has only libpci.a (no + # libpci.so) for 64 bit, and it apparently isn't compiled with + # -fPIC (their 32 bit version is fine). Hence, if we try to build + # mca_hwloc_hwloc132.so and link against -lpci, the suse linker + # will choke because libpci wasn't built with -fPIC. But it gets + # worse: we can't reliably test for linking against libpci here + # because only libtool knows how to build DSOs, and we haven't + # setup libtool yet. So we can't actually test for this bad + # behavior. :-( + # + # As a terrible, terrible workaround, we're just going to test for + # Suse 10. If you're on suse 10, we're going to assume libpci is + # broken, and will disable it by default. I hate making tests + # based on specific version numbers, but I'm out of ideas here. + # :-( + AC_MSG_CHECKING([whether to enable hwloc PCI device support]) + AS_IF([test "$enable_hwloc_pci" = "yes"], + [AC_MSG_RESULT([yes (--enable-hwloc-pci specified)]) + enable_pci=yes], + [AS_IF([test "$enable_hwloc_pci" = "no"], + [AC_MSG_RESULT([no (--disable-hwloc-pci specified)]) + enable_pci=no], + [hwloc_base_pci=`grep "SUSE Linux Enterprise Server 10 SP1" /etc/issue` + AS_IF([test "$hwloc_base_pci" != "" -a "$ac_cv_sizeof_void_p" = "8"], + [AC_MSG_RESULT([no (SuSE 10/64 bit)]) + enable_pci=no], + [AC_MSG_RESULT([yes (default)]) + enable_pci=yes]) + ]) + ]) + # set defaults of not having any support opal_hwloc_base_enable_xml=0 OPAL_HAVE_HWLOC=0 @@ -74,6 +110,9 @@ AC_DEFUN([MCA_opal_hwloc_CONFIG_REQUIRE],[ # REQUIRE. MCA_CONFIGURE_FRAMEWORK([opal], [hwloc], 1) + # Restore the --enable-pci flag + enable_pci=$opal_hwloc_hwloc132_save_enable_pci + # Strip any leading/trailing spaces opal_hwloc_winner=`echo $MCA_opal_hwloc_STATIC_COMPONENTS | sed -e 's/^[ ]+//' | sed -e 's/[ ]+$//'` diff --git a/opal/mca/hwloc/hwloc132/configure.m4 b/opal/mca/hwloc/hwloc132/configure.m4 index 4c37540162..369912fdef 100644 --- a/opal/mca/hwloc/hwloc132/configure.m4 +++ b/opal/mca/hwloc/hwloc132/configure.m4 @@ -42,7 +42,7 @@ AC_DEFUN([MCA_opal_hwloc_hwloc132_POST_CONFIG],[ AC_DEFUN([MCA_opal_hwloc_hwloc132_CONFIG],[ AC_CONFIG_FILES([opal/mca/hwloc/hwloc132/Makefile]) - OPAL_VAR_SCOPE_PUSH([HWLOC_VERSION opal_hwloc_hwloc132_save_CPPFLAGS opal_hwloc_hwloc132_save_LDFLAGS opal_hwloc_hwloc132_save_LIBS opal_hwloc_hwloc132_save_cairo opal_hwloc_hwloc132_save_xml opal_hwloc_hwloc132_basedir opal_hwloc_hwloc132_file opal_hwloc_hwloc132_save_enable_pci opal_hwloc_hwloc132_save_cflags]) + OPAL_VAR_SCOPE_PUSH([HWLOC_VERSION opal_hwloc_hwloc132_save_CPPFLAGS opal_hwloc_hwloc132_save_LDFLAGS opal_hwloc_hwloc132_save_LIBS opal_hwloc_hwloc132_save_cairo opal_hwloc_hwloc132_save_xml opal_hwloc_hwloc132_basedir opal_hwloc_hwloc132_file opal_hwloc_hwloc132_save_cflags]) # default to this component not providing support opal_hwloc_hwloc132_basedir=opal/mca/hwloc/hwloc132 @@ -53,13 +53,6 @@ AC_DEFUN([MCA_opal_hwloc_hwloc132_CONFIG],[ opal_hwloc_hwloc132_save_LDFLAGS=$LDFLAGS opal_hwloc_hwloc132_save_LIBS=$LIBS - # Disable PCI support for now, until we can get a proper fix - # for Oralce's builds on older SuSE machines that only have - # libpci.a (and support Oracle's weird dual-bitness build - # mojo). - opal_hwloc_hwloc132_save_enable_pci=$enable_pci - enable_pci=no - # Run the hwloc configuration - set the prefix to minimize # the chance that someone will use the internal symbols HWLOC_SET_SYMBOL_PREFIX([opal_hwloc132_]) @@ -100,7 +93,6 @@ AC_DEFUN([MCA_opal_hwloc_hwloc132_CONFIG],[ AS_IF([test -n "$opal_hwloc_hwloc132_save_xml"], [enable_xml=$opal_hwloc_hwloc132_save_xml]) - enable_pci=$opal_hwloc_hwloc132_save_enable_pci CPPFLAGS=$opal_hwloc_hwloc132_save_CPPFLAGS LDFLAGS=$opal_hwloc_hwloc132_save_LDFLAGS LIBS=$opal_hwloc_hwloc132_save_LIBS