|  | .. _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. 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. |