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 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, or :ref:`libc_gpu` for targeting GPUs.