(source_tree_layout)=
At the top-level, LLVM-libc source tree is organized in to the following directories:
+ libc
- benchmarks
- cmake
- config
- docs
- examples
- fuzzing
- hdr
- include
- lib
- src
- startup
- test
- utils
Each of these directories is explained briefly below.
benchmarks directoryThe benchmarks directory contains LLVM-libc's benchmarking utilities. These are mostly used for the memory functions.
config directoryThe config directory contains the default configurations for the targets LLVM-libc supports. These are files in the config/<platform>/<architecture>/ subdirectory called entrypoints.txt, exclude.txt, headers.txt, and config.json. These tell cmake which entrypoints are available, which entrypoints to exclude, which headers to generate, and what options to set for the current target respectively. There are also other platform specific files in the config/<platform>/ subdirectory.
cmake directoryThe cmake directory contains the implementations of LLVM-libc's CMake build rules.
docs directoryThe docs directory contains design docs and also informative documents like this document on source layout.
fuzzing directoryThis directory contains fuzzing tests for the various components of LLVM-libc. The directory structure within this directory mirrors the directory structure of the top-level libc directory itself. For more details, see {doc}fuzzing.
hdr directoryThis directory contains proxy headers which are included from the files in the src directory. These proxy headers either include our internal type or macro definitions, or the system's type or macro definitions, depending on if we are in fullbuild or overlay mode.
include directoryThe include directory contains:
*.h.def files - These files are used to construct the generated public header files.llvm-libc-macros and llvm-libc-types subdirectories.lib directoryThis directory contains a CMakeLists.txt file listing the targets for the public libraries libc.a, libm.a etc.
src directoryThis directory contains the implementations of the llvm-libc entrypoints. For more details on what an entrypoint is and how it is implemented, see the {ref}entrypoints documentation. It is further organized as follows:
src directory. The name of the directory is same as the base name of the header file. For example, the directory corresponding to the public math.h header file is named math. The implementation standard document explains more about the header directories.startup directoryThis directory contains the implementations of the application startup objects like crt1.o etc.
test directoryThis directory contains tests for the various components of LLVM-libc. The directory structure within this directory mirrors the directory structure of the toplevel libc directory itself. A test for, say the mmap function, lives in the directory test/src/sys/mman/ as implementation of mmap lives in src/sys/mman.
utils directoryThis directory contains utilities used by other parts of the LLVM-libc system. See the README files in the subdirectories within this directory to learn about the various utilities.