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