-
Notifications
You must be signed in to change notification settings - Fork 866
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RFC: Embed libltdl in opal/libltdl #390
Conversation
Refer to this link for build results (access rights to CI server needed): Build Log
Test FAILed. |
6ee6208
to
4c9b449
Compare
Refer to this link for build results (access rights to CI server needed): |
4c9b449
to
ec563f6
Compare
Refer to this link for build results (access rights to CI server needed): Build Log
Test FAILed. |
bot:retest |
Refer to this link for build results (access rights to CI server needed): Build Log
Test FAILed. |
Commit a copy of libltdl from Libtool 2.4.2 in the Open MPI source tree because later versions of Libtool broke the embed-libltdl functionality. To be clear, this is what I did: in another Open MPI tree (master open-mpi/ompi@22f1d29), with with AC 2.69, AM 1.13.3, LT 2.4.2. ```sh $ cd $other-ompi-tree $ autogen.pl $ cd $my-git-embed-libltdl-tree $ mv .gitignore TEMP-IGNORE-gitignore $ cd opeal $ rm -rf libltdl $ cp -r $other-ompi-tree/opal/libltdl . $ git add libltdl $ cd .. $ ./autogen.pl && ./configure $ cd opal/libltdl $ git rm --force (...files that changed...) $ git commit -m "libltdl from LT 2.4.2" ``` Also, I hand-edited two files: 1. opal/libltdl/configure.ac: change `AC_CONFIG_MACR_DIR([m4])` to `([config])` 2. opal/libltdl/Makefile.am: change `ACLOCAL_AMFLAGS = -I m4` to `-I config` This was all necessary because there's a complicated bootstrapping procedure in Libtool/libltdl. We cannot use the LTDL_* m4 macros to setup libltdl because they assume all the bootstrapping that the Libtool package does to embed itself. Instead, we simply invoke autogen/configure down in the opal/libltdl directory. More details coming in the next commit (which adjusts the rest of the tree to use this embedded libltdl).
This gives Open MPI better error messages when a DSO fails to open for some reason. See the lengthy comment in the commit explaining why.
Adjust .gitignore for files that we should and should not ignore in the embedded opal/libltdl (and friends). Also make changes to autogen.pl: * Remove some old kruft about the preopen error diff patch and FreeBSD shenanigans * Update some configure ordering of CUDA libltdl checking to ensure that it happens after libltdl is setup * Set all the LTDL macros that our build system expects (i.e., that LTDL_INIT/libtoolize used to do for us, such as LIBLTDL, LTDLDEPS, LTDLINCL). * Adjust all inclusions of `ltdl.h` to now use `#include <ltdl.h>` and simply set CPPFLAGS if we need it to point to the one embedded in the OMPI source tree. * Adjust autogen.pl to run "autoreconf" in the opal/libltdl tree. Critically, we need to NOT run `libtoolize`, though (there's complicated sequencing in the bootstrapping of the Libtool/libltdl packages that makes that magically work somehow -- but now we don't want that magic: we want libltdl to be just like any other embedded package that just needs a configure script and some Automake-ified Makefiles).
ec563f6
to
874333d
Compare
bot:retest |
Refer to this link for build results (access rights to CI server needed): |
Per 17 Feb 2015 Tuesday webex, we decided to go with this approach over #366. However, further testing after the call showed that this path... basically leads to madness. There are many more corner cases that have been exposed with more testing. In short: libltdl is not a normal Autotools-based package that we can embed in our source tree (e.g., like hwloc and libevent). Libltdl has some sophisticated bootstrapping that is inherently tied to the GNU Libtool package and the running of I have another approach that I'm trying. More details will be posted on #311 when I'm ready. |
Bring cuda mpiext over to 2.x. They are ready.
This PR fully embeds libltdl in the OMPI source tree -- i.e., it's committed in the git tree (as opposed of the GNU Autotools copying it into the OMPI source tree at
autogen.pl
time).This preserves the "build with dlopen / DSO support by default" behavior that Open MPI has had for a long time. It also works with Libtool 2.4.4 (and assumedly beyond).