[libc] Add document for a recipe to do a full standalone cross-build. Reviewed By: jeffbailey Differential Revision: https://reviews.llvm.org/D141037
diff --git a/libc/docs/full_cross_build.rst b/libc/docs/full_cross_build.rst new file mode 100644 index 0000000..2f95f5b --- /dev/null +++ b/libc/docs/full_cross_build.rst
@@ -0,0 +1,64 @@ +.. _full_cross_build: + +================ +Full Cross Build +================ + +.. contents:: Table of Contents + :depth: 1 + :local: + +In this document, we will present a recipe to cross build a full libc. When we +say *cross build* a full libc, we mean that we will build the libc for a target +system which is not the same as the system on which the libc is being built. +For example, you could be building for a bare metal aarch64 *target* on a Linux +x86_64 *host*. + +Configure the full cross build of the libc +========================================== + +Below is a simple recipe to configure the libc for a cross build. + +.. code-block:: sh + + $> cd llvm-project # The llvm-project checkout + $> mkdir build + $> cd build + $> cmake ../llvm \ + -G Ninja \ # Generator + -DLLVM_ENABLE_PROJECTS=libc \ # Enable the libc project + -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \ + -DLLVM_LIBC_FULL_BUILD=ON \ # We are building the full libc + -DLIBC_TARGET_TRIPLE=<Your target triple> + +We will go over the special options passed to the ``cmake`` command above. + +* **Enabled Projects** - Since we want to build the libc project, we list + ``libc`` as the enabled project. +* **The full build option** - Since we want to build the full libc, we pass + ``-DLLVM_LIBC_FULL_BUILD=ON``. +* **The target triple** - This is the target triple of the target for which + we are building the libc. For example, for a Linux 32-bit Arm target, + one can specify it as ``arm-linux-eabi``. + +Build and install +================= + +After configuring the build with the above ``cmake`` command, one can build the +the libc for the target with the following command: + +.. code-block:: sh + + $> ninja libc + +The above ``ninja`` command will build the ``libc.a`` static archive for the +target specified with ``-DLIBC_TARGET_TRIPLE`` to the ``cmake`` command. + +Building for bare metal +======================= + +To build for bare metal, all one has to do is to specify the +`system <https://clang.llvm.org/docs/CrossCompilation.html#target-triple>`_ +component of the target triple as ``none``. For example, to build for a +32-bit arm target on bare metal, one can use a target triple like +``arm-none-eabi``.