blob: 06f674b8b5db0c25c87ad89bcdfef34a5c03bbff [file] [log] [blame]
Building libc using the runtimes build setup
============================================
The runtimes build of the LLVM toolchain first builds clang and then builds the
various runtimes (like ``libc++`` and ``compiler-rt``) and LLVM binutils (like
``llvm-objcopy`` and ``llvm-readelf``) using the freshly built clang. One can
build libc also as in the same manner. As of this writing, only the ABI agnostic
parts of the libc are included when built in that manner. This allows interested
users to continue using their system libc's headers while linking to LLVM libc's
implementations when they are available. To build libc using the runtimes build
setup, one needs to include the ``libc`` project in the list of the enabled
runtimes when configuring the build:
.. code-block:: shell
$> cmake ../llvm -GNinja -DLLVM_ENABLE_PROJECTS="llvm;clang" \
-DLLVM_ENABLE_RUNTIMES=libc
Note that Ninja is used as the generator in the above CMake command. Hence, to
actually build the libc, one has to build the Ninja target named ``llvmlibc``:
.. code-block:: shell
$> ninja llvmlibc
If a different generator is used, then the build command should be suitably
adapted to build the target ``llvmlibc``. Building that target will produce a
static archive which includes all ABI agnostic functions available in LLVM libc.
Future direction
----------------
We plan to enhance the runtimes build of LLVM libc to include ABI sensitive
parts and to also generate the public headers. Likewise, we would like to
provide an option to build other runtimes like ``libc++`` and ``compiler-rt``
against LLVM libc.