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

Tom Stellard via llvm-dev llvm-dev at lists.llvm.org
Wed Apr 8 11:22:57 PDT 2020

On 04/08/2020 08:46 AM, Louis Dionne via llvm-dev 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?

We use stand-alone builds in Fedora.  How we build is essentially like this:

$ mkdir build
$ cd build
$ cmake <monorepo-root>/libcxx <options>
$ ninja -C build
$ ninja -C build install

The main advantages of building this way is that you don't need the full
source tarball, just the libcxx source, and also it ensures that the
default targets only build the parts that we need.

For reference, the spec files we use for building these projects can be found here:


> 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
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

More information about the llvm-dev mailing list