59 lines
1.6 KiB
ReStructuredText
59 lines
1.6 KiB
ReStructuredText
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.
|