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

Petr Hosek via cfe-dev cfe-dev at lists.llvm.org
Mon Feb 25 02:17:01 PST 2019


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. We
should also update openmp to stop using the custom Android-specific runtime
layout.

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
<https://github.com/llvm/llvm-project/blob/master/libunwind/CMakeLists.txt#L189>,
libc++abi
<https://github.com/llvm/llvm-project/blob/master/libcxxabi/CMakeLists.txt#L179>
and libc++
<https://github.com/llvm/llvm-project/blob/master/libcxx/CMakeLists.txt#L419>)
and Clang driver in one place
<https://github.com/llvm/llvm-project/blob/master/clang/lib/Driver/ToolChain.cpp#L79>.
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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190225/d9214fd6/attachment.html>


More information about the cfe-dev mailing list