1*692c77f2SNick DesaulniersGetting Started 2*692c77f2SNick Desaulniers=============== 3*692c77f2SNick Desaulniers 4*692c77f2SNick DesaulniersLet's fetch the llvm-libc sources and build them. 5*692c77f2SNick Desaulniers 6*692c77f2SNick DesaulniersInstall dependencies first: 7*692c77f2SNick Desaulniers 8*692c77f2SNick Desaulniers.. code-block:: sh 9*692c77f2SNick Desaulniers 10*692c77f2SNick Desaulniers $ sudo apt update 11*692c77f2SNick Desaulniers $ sudo apt install git cmake ninja-build clang gcc-multilib 12*692c77f2SNick Desaulniers 13*692c77f2SNick Desaulniers.. code-block:: sh 14*692c77f2SNick Desaulniers 15*692c77f2SNick Desaulniers $ git clone --depth=1 git@github.com:llvm/llvm-project.git /tmp/llvm-project 16*692c77f2SNick Desaulniers $ mkdir /tmp/llvm-project/build 17*692c77f2SNick Desaulniers $ cd /tmp/llvm-project/build 18*692c77f2SNick Desaulniers $ cmake ../runtimes -GNinja \ 19*692c77f2SNick Desaulniers -DLLVM_ENABLE_RUNTIMES="libc;compiler-rt" \ 20*692c77f2SNick Desaulniers -DCMAKE_BUILD_TYPE=Debug \ 21*692c77f2SNick Desaulniers -DCMAKE_CXX_COMPILER=clang++ \ 22*692c77f2SNick Desaulniers -DCMAKE_C_COMPILER=clang \ 23*692c77f2SNick Desaulniers -DLLVM_LIBC_FULL_BUILD=ON \ 24*692c77f2SNick Desaulniers -DLLVM_LIBC_INCLUDE_SCUDO=ON \ 25*692c77f2SNick Desaulniers -DCOMPILER_RT_BUILD_SCUDO_STANDALONE_WITH_LLVM_LIBC=ON \ 26*692c77f2SNick Desaulniers -DCOMPILER_RT_BUILD_GWP_ASAN=OFF \ 27*692c77f2SNick Desaulniers -DCOMPILER_RT_SCUDO_STANDALONE_BUILD_SHARED=OFF 28*692c77f2SNick Desaulniers $ ninja libc libm 29*692c77f2SNick Desaulniers 30*692c77f2SNick DesaulniersThis will produce the following artifacts: 31*692c77f2SNick Desaulniers 32*692c77f2SNick Desaulniers.. code-block:: 33*692c77f2SNick Desaulniers 34*692c77f2SNick Desaulniers llvm-project/build/libc/lib/libc.a 35*692c77f2SNick Desaulniers llvm-project/build/libc/lib/libm.a 36*692c77f2SNick Desaulniers llvm-project/build/libc/startup/linux/crt1.o 37*692c77f2SNick Desaulniers llvm-project/build/libc/include/**.h 38*692c77f2SNick Desaulniers 39*692c77f2SNick DesaulniersWe can then compile and run hello world via: 40*692c77f2SNick Desaulniers 41*692c77f2SNick Desaulniers.. code-block:: c++ 42*692c77f2SNick Desaulniers 43*692c77f2SNick Desaulniers // hello.c 44*692c77f2SNick Desaulniers #include <stdio.h> 45*692c77f2SNick Desaulniers int main () { puts("hello world"); } 46*692c77f2SNick Desaulniers 47*692c77f2SNick Desaulniers.. code-block:: sh 48*692c77f2SNick Desaulniers 49*692c77f2SNick Desaulniers $ clang -nostdinc -nostdlib hello.c -I libc/include \ 50*692c77f2SNick Desaulniers -I $(clang -print-resource-dir)/include libc/startup/linux/crt1.o \ 51*692c77f2SNick Desaulniers libc/lib/libc.a 52*692c77f2SNick Desaulniers $ ./a.out 53*692c77f2SNick Desaulniers hello world 54*692c77f2SNick Desaulniers 55*692c77f2SNick DesaulniersThis was what we call a "full build" of llvm-libc. From here, you can visit 56*692c77f2SNick Desaulniers:ref:`full_host_build` for more info, :ref:`full_cross_build` for cross 57*692c77f2SNick Desaulnierscompiling, :ref:`overlay_mode` for mixing llvm-libc with another libc, or 58*692c77f2SNick Desaulniers:ref:`libc_gpu` for targeting GPUs. 59