[cfe-dev] RFC: Place libs in Clang-dedicated directories (affects openmp, libcxx, libunwind, compiler-rt)

Joel E. Denny via cfe-dev cfe-dev at lists.llvm.org
Tue Feb 26 15:08:28 PST 2019


Hi Petr,

On Mon, Feb 25, 2019 at 5:17 AM Petr Hosek <phosek at chromium.org> wrote:
>
> On Wed, Feb 20, 2019 at 6:14 PM Joel E. Denny <jdenny.ornl at gmail.com> wrote:
>>
>> My alternative to LLVM_ENABLE_PER_TARGET_RUNTIME_DIR is the preceding
>> bullets.  In other words, you wouldn't need to specify
>> LLVM_ENABLE_PER_TARGET_RUNTIME_DIR because it would effectively be
>> always on (except the directories might be different than now if the
>> version locking issue is important, as noted above).  Is that what
>> you're asking?
>
>
> That would be my preference. I always hoped that LLVM_ENABLE_PER_TARGET_RUNTIME_DIR would eventually become the default. It would be nice to finish the Darwin support so we can completely deprecate the old layout, but I don't know how far along beanz is in his effort.

In the meantime, would it be helpful to duplicate (or probably
symlink) libraries in both locations by default?  I mean (1) the
current default directory, usually lib, and (2) the directory
LLVM_ENABLE_PER_TARGET_RUNTIME_DIR selects.  That strategy seems like
it should support users of either layout, but I don't know Darwin
support well enough to be sure.

> We should also update openmp to stop using the custom Android-specific runtime layout.

How does one activate that layout?

Thanks.




Joel

> There's also the unresolved question of where should libc++ headers and libraries go. Currently, in LLVM_ENABLE_PER_TARGET_RUNTIME_DIR we use the resource dir, but some people expressed the opinion that we shouldn't be using these for libc++ et al. since they're not version-locked to Clang. This is different from what GCC does (e.g. GCC would use $prefix/lib/gcc/x86_64-linux-gnu/8/libstdc++.a) and it's one of the reasons why I used the resource dir for libc++ et al. when implementing LLVM_ENABLE_PER_TARGET_RUNTIME_DIR.
>
> So concretely, today LLVM_ENABLE_PER_TARGET_RUNTIME_DIR uses the following layout:
>
> headers: $prefix/lib/clang/$version/include(/$triple)(/c++/v1)
> libraries: $prefix/lib/clang/$version/$triple/lib/$name.$ext
>
> The alternative that doesn't use resource dir for libc++ would be the following:
>
> compiler-rt:
>   headers: $prefix/lib/clang/$version/include
>   libraries: $prefix/lib/clang/$version/$triple/lib/$name.$ext
>
> libc++, libc++abi, libunwind:
>   headers: $prefix/include/c++/v1
>   libraries: $prefix/lib/$triple/$name.$ext
>
> Making this change should be trivial, it's the matter of changing three CMakeLists.txt files (libunwind, libc++abi and libc++) and Clang driver in one place. However, if we're going to make that change, I'd like to get a broader consensus. It'd be also useful to get feedback from libc++ maintainers on this.



More information about the cfe-dev mailing list