[clang] Avoid linking libdl unless needed
[llvm-project.git] / libc / docs / source_layout.rst
bloba299a4d78a953f0a6bc1e6118409528961281d56
1 LLVM-libc Source Tree Layout
2 ============================
4 At the top-level, LLVM-libc source tree is organized in to the following
5 directories::
7    + libc
8         - cmake
9         - docs
10         - fuzzing
11         - include
12         - lib
13         - loader
14         - src
15         - test
16         - utils
17         - www
19 Each of these directories is explained in detail below.
21 The ``cmake`` directory
22 -----------------------
24 The ``cmake`` directory contains the implementations of LLVM-libc's CMake build
25 rules.
27 The ``docs`` directory
28 ----------------------
30 The ``docs`` directory contains design docs and also informative documents like
31 this document on source layout.
33 The ``fuzzing`` directory
34 ----------------------
36 This directory contains fuzzing tests for the various components of llvm-libc. The
37 directory structure within this directory mirrors the directory structure of the
38 top-level ``libc`` directory itself. For more details, see :doc:`fuzzing`.
40 The ``include`` directory
41 -------------------------
43 The ``include`` directory contains:
45 1. Self contained public header files - These are header files which are
46    already in the form that get installed when LLVM-libc is installed on a user's
47    computer.
48 2. ``*.h.def`` and ``*.h.in`` files - These files are used to construct the
49    generated public header files.
50 3. A ``CMakeLists.txt`` file - This file lists the targets for the self
51    contained and generated public header files.
53 The ``lib`` directory
54 ---------------------
56 This directory contains a ``CMakeLists.txt`` file listing the targets for the
57 public libraries ``libc.a``, ``libm.a`` etc.
59 The ``loader`` directory
60 ------------------------
62 This directory contains the implementations of the application loaders like
63 ``crt1.o`` etc.
65 The ``src`` directory
66 ---------------------
68 This directory contains the implementations of the llvm-libc entrypoints. It is
69 further organized as follows:
71 1. There is a top-level CMakeLists.txt file.
72 2. For every public header file provided by llvm-libc, there exists a
73    corresponding directory in the ``src`` directory. The name of the directory
74    is same as the base name of the header file. For example, the directory
75    corresponding to the public ``math.h`` header file is named ``math``. The
76    implementation standard document explains more about the *header*
77    directories.
79 The ``test`` directory
80 ----------------------
82 This directory contains tests for the various components of llvm-libc. The
83 directory structure within this directory mirrors the directory structure of the
84 toplevel ``libc`` directory itself. A test for, say the ``mmap`` function, lives
85 in the directory ``test/src/sys/mman/`` as implementation of ``mmap`` lives in
86 ``src/sys/mman``.
88 The `utils` directory
89 ---------------------
91 This directory contains utilities used by other parts of the llvm-libc system.
92 See the `README` files, in the sub-directories within this directory, to learn
93 about the various utilities.
95 The ``www`` directory
96 ---------------------
98 The ``www`` directory contains the HTML content of libc.llvm.org