126 lines
4.1 KiB
ReStructuredText
126 lines
4.1 KiB
ReStructuredText
|
.. _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
|
||
|
- include
|
||
|
- lib
|
||
|
- spec
|
||
|
- src
|
||
|
- startup
|
||
|
- test
|
||
|
- utils
|
||
|
|
||
|
Each of these directories is explained breifly below.
|
||
|
|
||
|
The ``benchmarks`` directory
|
||
|
----------------------------
|
||
|
|
||
|
The ``benchmarks`` directory contains LLVM-libc's benchmarking utilities. These
|
||
|
are mostly used for the memory functions. This also includes the automemcpy
|
||
|
subdirectory for automatic generation of optimized 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 ``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 ``spec`` directory
|
||
|
----------------------
|
||
|
|
||
|
This directory contains the specifications for the types, macros, and entrypoint
|
||
|
functions. These definitions come from the various standards and extensions
|
||
|
LLVM-libc supports, and they are used along with the ``*.h.def`` files and the
|
||
|
config files to generate the headers for fullbuild mode.
|
||
|
|
||
|
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.
|