Home | History | Annotate | Download | only in docs
      1 ===============
      2 LLVMBuild Guide
      3 ===============
      4 
      5 .. contents::
      6    :local:
      7 
      8 Introduction
      9 ============
     10 
     11 This document describes the ``LLVMBuild`` organization and files which
     12 we use to describe parts of the LLVM ecosystem. For description of
     13 specific LLVMBuild related tools, please see the command guide.
     14 
     15 LLVM is designed to be a modular set of libraries which can be flexibly
     16 mixed together in order to build a variety of tools, like compilers,
     17 JITs, custom code generators, optimization passes, interpreters, and so
     18 on. Related projects in the LLVM system like Clang and LLDB also tend to
     19 follow this philosophy.
     20 
     21 In order to support this usage style, LLVM has a fairly strict structure
     22 as to how the source code and various components are organized. The
     23 ``LLVMBuild.txt`` files are the explicit specification of that
     24 structure, and are used by the build systems and other tools in order to
     25 develop the LLVM project.
     26 
     27 Project Organization
     28 ====================
     29 
     30 The source code for LLVM projects using the LLVMBuild system (LLVM,
     31 Clang, and LLDB) is organized into *components*, which define the
     32 separate pieces of functionality that make up the project. These
     33 projects may consist of many libraries, associated tools, build tools,
     34 or other utility tools (for example, testing tools).
     35 
     36 For the most part, the project contents are organized around defining
     37 one main component per each subdirectory. Each such directory contains
     38 an ``LLVMBuild.txt`` which contains the component definitions.
     39 
     40 The component descriptions for the project as a whole are automatically
     41 gathered by the LLVMBuild tools. The tools automatically traverse the
     42 source directory structure to find all of the component description
     43 files. NOTE: For performance/sanity reasons, we only traverse into
     44 subdirectories when the parent itself contains an ``LLVMBuild.txt``
     45 description file.
     46 
     47 Build Integration
     48 =================
     49 
     50 The LLVMBuild files themselves are just a declarative way to describe
     51 the project structure. The actual building of the LLVM project is
     52 handled by another build system (currently we support both
     53 :doc:`Makefiles <MakefileGuide>` and :doc:`CMake <CMake>`).
     54 
     55 The build system implementation will load the relevant contents of the
     56 LLVMBuild files and use that to drive the actual project build.
     57 Typically, the build system will only need to load this information at
     58 "configure" time, and use it to generative native information. Build
     59 systems will also handle automatically reconfiguring their information
     60 when the contents of the ``LLVMBuild.txt`` files change.
     61 
     62 Developers generally are not expected to need to be aware of the details
     63 of how the LLVMBuild system is integrated into their build. Ideally,
     64 LLVM developers who are not working on the build system would only ever
     65 need to modify the contents of the ``LLVMBuild.txt`` description files
     66 (although we have not reached this goal yet).
     67 
     68 For more information on the utility tool we provide to help interfacing
     69 with the build system, please see the :doc:`llvm-build
     70 <CommandGuide/llvm-build>` documentation.
     71 
     72 Component Overview
     73 ==================
     74 
     75 As mentioned earlier, LLVM projects are organized into logical
     76 *components*. Every component is typically grouped into its own
     77 subdirectory. Generally, a component is organized around a coherent
     78 group of sources which have some kind of clear API separation from other
     79 parts of the code.
     80 
     81 LLVM primarily uses the following types of components:
     82 
     83 - *Libraries* - Library components define a distinct API which can be
     84   independently linked into LLVM client applications. Libraries typically
     85   have private and public header files, and may specify a link of required
     86   libraries that they build on top of.
     87 - *Build Tools* - Build tools are applications which are designed to be run
     88   as part of the build process (typically to generate other source files).
     89   Currently, LLVM uses one main build tool called :doc:`TableGen
     90   <TableGenFundamentals>` to generate a variety of source files.
     91 - *Tools* - Command line applications which are built using the LLVM
     92   component libraries. Most LLVM tools are small and are primarily
     93   frontends to the library interfaces.
     94 
     95 Components are described using ``LLVMBuild.txt`` files in the directories
     96 that define the component. See the `LLVMBuild Format Reference`_ section
     97 for information on the exact format of these files.
     98 
     99 LLVMBuild Format Reference
    100 ==========================
    101 
    102 LLVMBuild files are written in a simple variant of the INI or configuration
    103 file format (`Wikipedia entry`_). The format defines a list of sections
    104 each of which may contain some number of properties. A simple example of
    105 the file format is below:
    106 
    107 .. _Wikipedia entry: http://en.wikipedia.org/wiki/INI_file
    108 
    109 .. code-block:: ini
    110 
    111    ; Comments start with a semi-colon.
    112 
    113    ; Sections are declared using square brackets.
    114    [component_0]
    115 
    116    ; Properties are declared using '=' and are contained in the previous section.
    117    ;
    118    ; We support simple string and boolean scalar values and list values, where
    119    ; items are separated by spaces. There is no support for quoting, and so
    120    ; property values may not contain spaces.
    121    property_name = property_value
    122    list_property_name = value_1 value_2 ... value_n
    123    boolean_property_name = 1 (or 0)
    124 
    125 LLVMBuild files are expected to define a strict set of sections and
    126 properties. A typical component description file for a library
    127 component would look like the following example:
    128 
    129 .. code-block:: ini
    130 
    131    [component_0]
    132    type = Library
    133    name = Linker
    134    parent = Libraries
    135    required_libraries = Archive BitReader Core Support TransformUtils
    136 
    137 A full description of the exact sections and properties which are
    138 allowed follows.
    139 
    140 Each file may define exactly one common component, named ``common``. The
    141 common component may define the following properties:
    142 
    143 -  ``subdirectories`` **[optional]**
    144 
    145    If given, a list of the names of the subdirectories from the current
    146    subpath to search for additional LLVMBuild files.
    147 
    148 Each file may define multiple components. Each component is described by a
    149 section who name starts with ``component``. The remainder of the section
    150 name is ignored, but each section name must be unique. Typically components
    151 are just number in order for files with multiple components
    152 (``component_0``, ``component_1``, and so on).
    153 
    154 .. warning::
    155 
    156    Section names not matching this format (or the ``common`` section) are
    157    currently unused and are disallowed.
    158 
    159 Every component is defined by the properties in the section. The exact
    160 list of properties that are allowed depends on the component type.
    161 Components **may not** define any properties other than those expected
    162 by the component type.
    163 
    164 Every component must define the following properties:
    165 
    166 -  ``type`` **[required]**
    167 
    168    The type of the component. Supported component types are detailed
    169    below. Most components will define additional properties which may be
    170    required or optional.
    171 
    172 -  ``name`` **[required]**
    173 
    174    The name of the component. Names are required to be unique across the
    175    entire project.
    176 
    177 -  ``parent`` **[required]**
    178 
    179    The name of the logical parent of the component. Components are
    180    organized into a logical tree to make it easier to navigate and
    181    organize groups of components. The parents have no semantics as far
    182    as the project build is concerned, however. Typically, the parent
    183    will be the main component of the parent directory.
    184 
    185    Components may reference the root pseudo component using ``$ROOT`` to
    186    indicate they should logically be grouped at the top-level.
    187 
    188 Components may define the following properties:
    189 
    190 -  ``dependencies`` **[optional]**
    191 
    192    If specified, a list of names of components which *must* be built
    193    prior to this one. This should only be exactly those components which
    194    produce some tool or source code required for building the component.
    195 
    196    .. note::
    197 
    198       ``Group`` and ``LibraryGroup`` components have no semantics for the
    199       actual build, and are not allowed to specify dependencies.
    200 
    201 The following section lists the available component types, as well as
    202 the properties which are associated with that component.
    203 
    204 -  ``type = Group``
    205 
    206    Group components exist purely to allow additional arbitrary structuring
    207    of the logical components tree. For example, one might define a
    208    ``Libraries`` group to hold all of the root library components.
    209 
    210    ``Group`` components have no additionally properties.
    211 
    212 -  ``type = Library``
    213 
    214    Library components define an individual library which should be built
    215    from the source code in the component directory.
    216 
    217    Components with this type use the following properties:
    218 
    219    -  ``library_name`` **[optional]**
    220 
    221       If given, the name to use for the actual library file on disk. If
    222       not given, the name is derived from the component name itself.
    223 
    224    -  ``required_libraries`` **[optional]**
    225 
    226       If given, a list of the names of ``Library`` or ``LibraryGroup``
    227       components which must also be linked in whenever this library is
    228       used. That is, the link time dependencies for this component. When
    229       tools are built, the build system will include the transitive closure
    230       of all ``required_libraries`` for the components the tool needs.
    231 
    232    -  ``add_to_library_groups`` **[optional]**
    233 
    234       If given, a list of the names of ``LibraryGroup`` components which
    235       this component is also part of. This allows nesting groups of
    236       components.  For example, the ``X86`` target might define a library
    237       group for all of the ``X86`` components. That library group might
    238       then be included in the ``all-targets`` library group.
    239 
    240    -  ``installed`` **[optional]** **[boolean]**
    241 
    242       Whether this library is installed. Libraries that are not installed
    243       are only reported by ``llvm-config`` when it is run as part of a
    244       development directory.
    245 
    246 -  ``type = LibraryGroup``
    247 
    248    ``LibraryGroup`` components are a mechanism to allow easy definition of
    249    useful sets of related components. In particular, we use them to easily
    250    specify things like "all targets", or "all assembly printers".
    251 
    252    Components with this type use the following properties:
    253 
    254    -  ``required_libraries`` **[optional]**
    255 
    256       See the ``Library`` type for a description of this property.
    257 
    258    -  ``add_to_library_groups`` **[optional]**
    259 
    260       See the ``Library`` type for a description of this property.
    261 
    262 -  ``type = TargetGroup``
    263 
    264    ``TargetGroup`` components are an extension of ``LibraryGroup``\s,
    265    specifically for defining LLVM targets (which are handled specially in a
    266    few places).
    267 
    268    The name of the component should always be the name of the target.
    269 
    270    Components with this type use the ``LibraryGroup`` properties in
    271    addition to:
    272 
    273    -  ``has_asmparser`` **[optional]** **[boolean]**
    274 
    275       Whether this target defines an assembly parser.
    276 
    277    -  ``has_asmprinter`` **[optional]** **[boolean]**
    278 
    279       Whether this target defines an assembly printer.
    280 
    281    -  ``has_disassembler`` **[optional]** **[boolean]**
    282 
    283       Whether this target defines a disassembler.
    284 
    285    -  ``has_jit`` **[optional]** **[boolean]**
    286 
    287       Whether this target supports JIT compilation.
    288 
    289 -  ``type = Tool``
    290 
    291    ``Tool`` components define standalone command line tools which should be
    292    built from the source code in the component directory and linked.
    293 
    294    Components with this type use the following properties:
    295 
    296    -  ``required_libraries`` **[optional]**
    297 
    298       If given, a list of the names of ``Library`` or ``LibraryGroup``
    299       components which this tool is required to be linked with.
    300 
    301       .. note::
    302 
    303          The values should be the component names, which may not always
    304          match up with the actual library names on disk.
    305 
    306       Build systems are expected to properly include all of the libraries
    307       required by the linked components (i.e., the transitive closure of
    308       ``required_libraries``).
    309 
    310       Build systems are also expected to understand that those library
    311       components must be built prior to linking -- they do not also need
    312       to be listed under ``dependencies``.
    313 
    314 -  ``type = BuildTool``
    315 
    316    ``BuildTool`` components are like ``Tool`` components, except that the
    317    tool is supposed to be built for the platform where the build is running
    318    (instead of that platform being targetted). Build systems are expected
    319    to handle the fact that required libraries may need to be built for
    320    multiple platforms in order to be able to link this tool.
    321 
    322    ``BuildTool`` components currently use the exact same properties as
    323    ``Tool`` components, the type distinction is only used to differentiate
    324    what the tool is built for.
    325 
    326