| .. _build_concepts: |
| |
| ============== |
| Build Concepts |
| ============== |
| |
| Most people don't need to build their own C library — the one provided by their |
| system works well. However, LLVM-libc's **Overlay Mode** can provide key updates |
| like faster or more consistent math functions for projects that need them. |
| |
| For those who do need a full C library, LLVM-libc supports several build |
| configurations depending on your target environment and intended usage. |
| |
| The Five Build Scenarios |
| ======================== |
| |
| 1. Overlay Mode (Augmenting the System Libc) |
| -------------------------------------------- |
| |
| In Overlay Mode, LLVM-libc functions are compiled alongside the host's existing |
| system library (like ``glibc``). Only the functions explicitly implemented in |
| LLVM-libc are used; the rest "fall back" to the system library. This is the |
| preferred method for most contributors as it is the fastest to build and test. |
| |
| To configure for an overlay build, point CMake to the ``runtimes`` directory |
| and set ``LLVM_LIBC_FULL_BUILD=OFF`` (which is the default). This will build a |
| static archive named ``libllvmlibc.a``: |
| |
| .. code-block:: sh |
| |
| cmake -S runtimes -B build -DLLVM_ENABLE_RUNTIMES="libc" \ |
| -DLLVM_LIBC_FULL_BUILD=OFF ... |
| |
| 2. Full Build Mode (Standalone Library) |
| --------------------------------------- |
| |
| In Full Build Mode, LLVM-libc is a complete replacement for the system library. |
| This is used to build standalone ``libc.a`` and ``libm.a`` (with separate CMake |
| targets) for a new operating system or to generate a sysroot for a specific target. |
| |
| To configure for a full build, set ``LLVM_LIBC_FULL_BUILD=ON``: |
| |
| .. code-block:: sh |
| |
| cmake -S runtimes -B build -DLLVM_ENABLE_RUNTIMES="libc;compiler-rt" \ |
| -DLLVM_LIBC_FULL_BUILD=ON ... |
| |
| 3. Bootstrap Build |
| ------------------ |
| |
| A bootstrap build first builds the compiler (Clang) and other LLVM tools using |
| the host compiler, and then uses that newly-built Clang to build the libc. |
| This ensures you are using a matched toolchain where the compiler and |
| the library are built for each other. |
| |
| To configure a bootstrap build, you point CMake to the ``llvm`` directory: |
| |
| .. code-block:: sh |
| |
| cmake -S llvm -B build -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_ENABLE_RUNTIMES="libc;compiler-rt" ... |
| |
| 4. Cross-compiler Build (Targeting Other Architectures) |
| ------------------------------------------------------- |
| |
| Used when you want to build LLVM-libc for a different architecture than you are |
| currently running on (e.g., building on x86_64 for an aarch64 target). |
| This requires a cross-compiler or a toolchain file. |
| |
| 5. Bootstrap Cross-compiler (New Environment) |
| --------------------------------------------- |
| |
| For users who are starting from scratch (e.g., with only Linux kernel headers) |
| and want to generate a full C compiler and sysroot for their target. This is |
| the most common path for those building entire environments to tinker in. |
| |
| |