| (source_tree_layout)= | |
| # LLVM-libc 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. | |
| ## The `benchmarks` directory | |
| The `benchmarks` directory contains LLVM-libc's benchmarking utilities. These | |
| are mostly used for the memory functions. | |
| ## The `config` directory | |
| The `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. | |
| ## The `cmake` directory | |
| The `cmake` directory contains the implementations of LLVM-libc's CMake build | |
| rules. | |
| ## The `docs` directory | |
| The `docs` directory contains design docs and also informative documents like | |
| this document on source layout. | |
| ## The `fuzzing` directory | |
| This 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`. | |
| ## The `hdr` directory | |
| This 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. | |
| ## The `include` directory | |
| The `include` directory contains: | |
| 1. `*.h.def` files - These files are used to construct the generated public | |
| header files. | |
| 2. Self contained public header files - These are header files which are | |
| already in the form that get installed when LLVM-libc is installed on a | |
| user's computer. These are mostly in the `llvm-libc-macros` and | |
| `llvm-libc-types` subdirectories. | |
| ## The `lib` directory | |
| This directory contains a `CMakeLists.txt` file listing the targets for the | |
| public libraries `libc.a`, `libm.a` etc. | |
| ## The `src` directory | |
| This 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: | |
| 1. There is a top-level CMakeLists.txt file. | |
| 2. For every public header file provided by llvm-libc, there exists a | |
| corresponding directory in the `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. | |
| ## The `startup` directory | |
| This directory contains the implementations of the application startup objects | |
| like `crt1.o` etc. | |
| ## The `test` directory | |
| This 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`. | |
| ## The `utils` directory | |
| This 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. |