[libcxx-dev] Clarifying the supported ways to build libc++, libc++abi and libunwind

Louis Dionne via libcxx-dev libcxx-dev at lists.llvm.org
Thu Jun 18 11:25:12 PDT 2020


Folks,

I just wanted to reply to this thread since I never had the chance to do so before. I did take all of the input in the thread into consideration and learned a lot about all of your respective use cases. This has been very useful, thanks for taking the time to share your use cases with me.

The basic conclusion I come out of this with is that it doesn't make sense to build the runtimes as part of the rest of LLVM, and I agree with this. I think the runtimes should always be built "standalone", however I also believe they should be built against each other, i.e. we should be able to build (at least) libc++/libc++abi/libunwind with a single CMake invocation, outside of the rest of LLVM. That would basically be a standalone build, except for all the runtimes you decide to build at once. That just reduces the build system complexity and removes the possibility for subtle mismatches between runtime projects.

I've created a RFC explaining this and the reasons for it, and sent it to llvm-dev: http://lists.llvm.org/pipermail/llvm-dev/2020-June/142384.html <http://lists.llvm.org/pipermail/llvm-dev/2020-June/142384.html>. Please chime in if you'd like to add something to the discussion.

Thanks again,
Louis


> On Apr 8, 2020, at 11:46, Louis Dionne via libcxx-dev <libcxx-dev at lists.llvm.org> wrote:
> 
> [Cross-post to llvm-dev to make sure everybody relevant sees this]
> 
> Hi,
> 
> I'm currently trying to simplify the libc++/libc++abi/libunwind build systems and testing setup. In doing so, I am encountering issues related to "unusual" ways of building them. By unusual, I just mean "not the usual monorepo build with LLVM_ENABLE_PROJECTS". I would like to pin down what the set of supported use cases for building the runtime libraries are. In particular, the world I would like to live in is one where the only way to build libc++/libc++abi/libunwind is:
> 
>     $ mkdir build
>     $ cd build
>     $ cmake <monorepo-root>/llvm -DLLVM_ENABLE_PROJECTS=libcxx;libcxxabi;libunwind <options>
>     $ ninja -C build install-{cxx,cxxabi,unwind}
> 
> The "runtimes" build would be built on top of this -- it would be just a driver for building these libraries using documented options against the just-built Clang. I think it already does so in essence, however if I'm not mistaken it uses the "Standalone build" and it definitely sets some magic and undocumented CMake variables (like HAVE_LIBCXXABI) that we have to be really careful not to break.
> 
> So, to better understand what people use today, I have some questions. I know the answer to some of those, but I want to see what others have to say:
> 
> 1. What is a "Standalone build"? What does it enable that a normal monorepo build can't?
> 2. What is the "Runtimes" build? How does it work, what is it used for, and what does it expect from libc++/libc++abi/libunwind?
> 3. Are there other "hidden" ways to build the runtime libraries?
> 
> Cheers,
> Louis
> 
> _______________________________________________
> libcxx-dev mailing list
> libcxx-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/libcxx-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/libcxx-dev/attachments/20200618/c142f0a0/attachment-0001.html>


More information about the libcxx-dev mailing list