[Openmp-commits] [PATCH] D118493: Set rpath on openmp executables

Fangrui Song via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Tue Jan 24 14:54:04 PST 2023

MaskRay added a comment.

In D118493#4075970 <https://reviews.llvm.org/D118493#4075970>, @JonChesterfield wrote:

> That works if you have one toolchain installed globally or you are happy to cobble together a working system using environment variables. If you have multiple toolchains, they can't all sit in the global directory. If you don't have root, you can't install them there.
> Previously we required people to set LD_LIBRARY_PATH to use openmp at all. That's an inherently poor UX and interacted especially poorly with module setup systems found in HPC.
> We could make this opt-in, at the cost of new users seeing that openmp just doesn't work out of the box and other ones having to modify build scripts. In exchange we get - consistency with other tools that fail to work without global installation or extra user burden.

Well, if you have a toolchain at a non-standard location (I do this a lot myself), you can go an extra mile by specifying `-Wl,-rpath=... in a Clang configuration file.
Gentoo has a nice summary of the feature https://blogs.gentoo.org/mgorny/2022/10/07/clang-in-gentoo-now-sets-default-runtimes-via-config-file/
libc++, libc++abi, libunwind, and compiler-rt don't add the extra DT_RUNPATH. Some build systems want to handle DT_RUNPATH themselves (e.g. `CMAKE_INSTALL_RPATH`).
I don't think it is a good idea for openmp to diverge and introduce an opt-out `-fno-openmp-implicit-rpath`.

> In my opinion dynamically linking language runtimes is a bad default. It wins us an awful lot of failure modes. I've also argued against being able to swap out individual components via environment variables as way too error prone for a user facing interface. This is what the community consensus went for. The combination of dynamically substitutable and requiring LD_LIBRARY_PATH was especially sharp.

Well, some distributions have policies against DT_RUNPATH and this change is causing trouble. While a patch like D142174 <https://reviews.llvm.org/D142174> can mitigate the problem, the hard-coded paths are ugly and may not work for another Linux distribution or another ELF-based operating system.

You don't necessarily use `LD_LIBRARY_PATH`. You can use `-Wl,-rpath=...`

  rG LLVM Github Monorepo



More information about the Openmp-commits mailing list