Getting Started
Let's fetch the llvm-libc sources and build them.
Install dependencies first:
.. code-block:: sh
$ sudo apt update $ sudo apt install git cmake ninja-build clang gcc-multilib
.. code-block:: sh
$ git clone --depth=1 git@github.com:llvm/llvm-project.git /tmp/llvm-project
$ mkdir /tmp/llvm-project/build
$ cd /tmp/llvm-project/build
$ cmake ../runtimes -GNinja
-DLLVM_ENABLE_RUNTIMES="libc;compiler-rt"
-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_CXX_COMPILER=clang++
-DCMAKE_C_COMPILER=clang
-DLLVM_LIBC_FULL_BUILD=ON
-DLLVM_LIBC_INCLUDE_SCUDO=ON
-DCOMPILER_RT_BUILD_SCUDO_STANDALONE_WITH_LLVM_LIBC=ON
-DCOMPILER_RT_BUILD_GWP_ASAN=OFF
-DCOMPILER_RT_SCUDO_STANDALONE_BUILD_SHARED=OFF
$ ninja libc libm
This will produce the following artifacts:
.. code-block::
llvm-project/build/libc/lib/libc.a llvm-project/build/libc/lib/libm.a llvm-project/build/libc/startup/linux/crt1.o llvm-project/build/libc/include/**.h
We can then compile and run hello world via:
.. code-block:: c++
// hello.c #include <stdio.h> int main () { puts("hello world"); }
.. code-block:: sh
$ clang -nostdinc -nostdlib hello.c -I libc/include
-I $(clang -print-resource-dir)/include libc/startup/linux/crt1.o
libc/lib/libc.a
$ ./a.out
hello world
This was what we call a "full build" of llvm-libc. From here, you can visit
:ref:full_host_build for more info, :ref:full_cross_build for cross
compiling, :ref:overlay_mode for mixing llvm-libc with another libc,
:ref:libc_gpu for targeting GPUs, or :ref:libc_uefi for targeting UEFI.