<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <title>Creating an LLVM Project</title>
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>

<div class="doc_title">Creating an LLVM Project</div>

<ol>
<li><a href="#overview">Overview</a></li>
<li><a href="#create">Create a project from the Sample Project</a></li>
<li><a href="#source">Source tree layout</a></li>
<li><a href="#makefiles">Writing LLVM-style Makefiles</a>
  <ol>
  <li><a href="#reqVars">Required Variables</a></li>
  <li><a href="#varsBuildDir">Variables for Building Subdirectories</a></li>
  <li><a href="#varsBuildLib">Variables for Building Libraries</a></li>
  <li><a href="#varsBuildProg">Variables for Building Programs</a></li>
  <li><a href="#miscVars">Miscellaneous Variables</a></li>
  </ol></li>
<li><a href="#objcode">Placement of object code</a></li>
<li><a href="#help">Further help</a></li>
</ol>

<div class="doc_author">
  <p>Written by John Criswell</p>
</div>

<!-- *********************************************************************** -->
<div class="doc_section"><a name="overview">Overview</a></div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The LLVM build system is designed to facilitate the building of third party
projects that use LLVM header files, libraries, and tools.  In order to use
these facilities, a Makefile from a project must do the following things:</p>

<ol>
  <li>Set <tt>make</tt> variables. There are several variables that a Makefile
  needs to set to use the LLVM build system:
  <ul>
    <li><tt>PROJECT_NAME</tt> - The name by which your project is known.</li>
    <li><tt>LLVM_SRC_ROOT</tt> - The root of the LLVM source tree.</li>
    <li><tt>LLVM_OBJ_ROOT</tt> - The root of the LLVM object tree.</li>
    <li><tt>PROJ_SRC_ROOT</tt> - The root of the project's source tree.</li>
    <li><tt>PROJ_OBJ_ROOT</tt> - The root of the project's object tree.</li>
    <li><tt>PROJ_INSTALL_ROOT</tt> - The root installation directory.</li>
    <li><tt>LEVEL</tt> - The relative path from the current directory to the 
    project's root ($PROJ_OBJ_ROOT).</li>
  </ul></li>
  <li>Include <tt>Makefile.config</tt> from <tt>$(LLVM_OBJ_ROOT)</tt>.</li>
  <li>Include <tt>Makefile.rules</tt> from <tt>$(LLVM_SRC_ROOT)</tt>.</li>
</ol>

<p>There are two ways that you can set all of these variables:</p>
<ol>
  <li>You can write your own Makefiles which hard-code these values.</li>
  <li>You can use the pre-made LLVM sample project. This sample project 
  includes Makefiles, a configure script that can be used to configure the 
  location of LLVM, and the ability to support multiple object directories 
  from a single source directory.</li>
</ol>

<p>This document assumes that you will base your project on the LLVM sample
project found in <tt>llvm/projects/sample</tt>.  If you want to devise your own
build system, studying the sample project and LLVM Makefiles will probably
provide enough information on how to write your own Makefiles.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="create">Create a Project from the Sample Project</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>Follow these simple steps to start your project:</p>

<ol>
<li>Copy the <tt>llvm/projects/sample</tt> directory to any place of your
choosing.  You can place it anywhere you like.  Rename the directory to match
the name of your project.</li>

<li>
If you downloaded LLVM using CVS, remove all the directories named CVS (and all
the files therein) from your project's new source tree.  This will keep CVS
from thinking that your project is inside <tt>llvm/projects/sample</tt>.
</li>

<li>Add your source code and Makefiles to your source tree.</li>

<li>If you want your project to be configured with the <tt>configure</tt> script
then you need to edit <tt>autoconf/configure.ac</tt> as follows:
  <ul>
    <li><b>AC_INIT</b>. Place the name of your project, its version number and
    a contact email address for your project as the arguments to this macro</li>
    <li><b>AC_CONFIG_AUX_DIR</b>. If your project isn't in the
    <tt>llvm/projects</tt> directory then you might need to adjust this so that
    it specifies a relative path to the <tt>llvm/autoconf</tt> directory.</li>
    <li><b>LLVM_CONFIG_PROJECT</b>. Just leave this alone.</li>
    <li><b>AC_CONFIG_SRCDIR</b>. Specify a path to a file name that identifies
    your project; or just leave it at <tt>Makefile.common.in</tt></li>
    <li><b>AC_CONFIG_FILES</b>. Do not change.</li>
    <li><b>AC_CONFIG_MAKEFILE</b>. Use one of these macros for each Makefile
    that your project uses. This macro arranges for your makefiles to be copied
    from the source directory, unmodified, to the build directory.</li>
  </ul>
</li>

<li>After updating <tt>autoconf/configure.ac</tt>, regenerate the
configure script with these commands:

<div class="doc_code">
<p><tt>% cd autoconf<br>
       % AutoRegen.sh</tt></p>
</div>

<p>You must be using Autoconf version 2.59 or later and your aclocal version 
should 1.9 or later.</p></li>

<li>Run <tt>configure</tt> in the directory in which you want to place
object code.  Use the following options to tell your project where it
can find LLVM:

  <dl>
    <dt><tt>--with-llvmsrc=&lt;directory&gt;</tt></dt>
    <dd>Tell your project where the LLVM source tree is located.</dd>
    <dt><br/><tt>--with-llvmobj=&lt;directory&gt;</tt></dt>
    <dd>Tell your project where the LLVM object tree is located.</dd>
    <dt><br/><tt>--prefix=&lt;directory&gt;</tt></dt>
    <dd>Tell your project where it should get installed.</dd>
  </dl>
</ol>

<p>That's it!  Now all you have to do is type <tt>gmake</tt> (or <tt>make</tt>
if your on a GNU/Linux system) in the root of your object directory, and your 
project should build.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="source">Source Tree Layout</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>In order to use the LLVM build system, you will want to organize your
source code so that it can benefit from the build system's features.
Mainly, you want your source tree layout to look similar to the LLVM
source tree layout.  The best way to do this is to just copy the
project tree from <tt>llvm/projects/sample</tt> and modify it to meet
your needs, but you can certainly add to it if you want.</p>

<p>Underneath your top level directory, you should have the following
directories:</p>

<dl>
  <dt><b>lib</b>
  <dd>
  This subdirectory should contain all of your library source
  code.  For each library that you build, you will have one
  directory in <b>lib</b> that will contain that library's source
  code.

  <p>
  Libraries can be object files, archives, or dynamic libraries.
  The <b>lib</b> directory is just a convenient place for libraries
  as it places them all in a directory from which they can be linked
  later.

  <dt><b>include</b>
  <dd>
  This subdirectory should contain any header files that are
  global to your project.  By global, we mean that they are used
  by more than one library or executable of your project.
  <p>
  By placing your header files in <b>include</b>, they will be
  found automatically by the LLVM build system.  For example, if
  you have a file <b>include/jazz/note.h</b>, then your source
  files can include it simply with <b>#include "jazz/note.h"</b>.

  <dt><b>tools</b>
  <dd>
  This subdirectory should contain all of your source
  code for executables.  For each program that you build, you
  will have one directory in <b>tools</b> that will contain that
  program's source code.
  <p>

  <dt><b>test</b>
  <dd>
  This subdirectory should contain tests that verify that your code
  works correctly.  Automated tests are especially useful.
  <p>
  Currently, the LLVM build system provides basic support for tests.
  The LLVM system provides the following:
  <ul>
    <li>
    LLVM provides a tcl procedure that is used by Dejagnu to run
    tests.  It can be found in <tt>llvm/lib/llvm-dg.exp</tt>.  This
    test procedure uses RUN lines in the actual test case to determine
    how to run the test.  See the <a
    href="TestingGuide.html">TestingGuide</a> for more details. You
    can easily write Makefile support similar to the Makefiles in 
    <tt>llvm/test</tt> to use Dejagnu to run your project's tests.<br/></li>
    <li>
    LLVM contains an optional package called <tt>llvm-test</tt>
    which provides benchmarks and programs that are known to compile with the
    LLVM GCC front ends.  You can use these
    programs to test your code, gather statistics information, and
    compare it to the current LLVM performance statistics.
    <br/>Currently, there is no way to hook your tests directly into the
    <tt>llvm/test</tt> testing harness.  You will simply
    need to find a way to use the source provided within that directory
    on your own.
  </ul>
</dl>

<p>Typically, you will want to build your <b>lib</b> directory first followed by
your <b>tools</b> directory.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="makefiles">Writing LLVM Style Makefiles</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The LLVM build system provides a convenient way to build libraries and
executables.  Most of your project Makefiles will only need to define a few
variables.  Below is a list of the variables one can set and what they can
do:</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="reqVars">Required Variables</a>
</div>

<div class="doc_text">

<dl>
  <dt>LEVEL
  <dd>
  This variable is the relative path from this Makefile to the
  top directory of your project's source code.  For example, if
  your source code is in <tt>/tmp/src</tt>, then the Makefile in
  <tt>/tmp/src/jump/high</tt> would set <tt>LEVEL</tt> to <tt>"../.."</tt>.
</dl>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="varsBuildDir">Variables for Building Subdirectories</a>
</div>

<div class="doc_text">

<dl>
  <dt>DIRS
  <dd>
  This is a space separated list of subdirectories that should be
  built.  They will be built, one at a time, in the order
  specified.
  <p>

  <dt>PARALLEL_DIRS
  <dd>
  This is a list of directories that can be built in parallel.
  These will be built after the directories in DIRS have been
  built.
  <p>

  <dt>OPTIONAL_DIRS
  <dd>
  This is a list of directories that can be built if they exist,
  but will not cause an error if they do not exist.  They are
  built serially in the order in which they are listed.
</dl>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="varsBuildLib">Variables for Building Libraries</a>
</div>

<div class="doc_text">

<dl>
  <dt>LIBRARYNAME
  <dd>
  This variable contains the base name of the library that will
  be built.  For example, to build a library named
  <tt>libsample.a</tt>, LIBRARYNAME should be set to
  <tt>sample</tt>.
  <p>

  <dt>BUILD_ARCHIVE
  <dd>
  By default, a library is a <tt>.o</tt> file that is linked
  directly into a program.  To build an archive (also known as
  a static library), set the BUILD_ARCHIVE variable.
  <p>

  <dt>SHARED_LIBRARY
  <dd>
  If SHARED_LIBRARY is defined in your Makefile, a shared
  (or dynamic) library will be built.
</dl>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="varsBuildProg">Variables for Building Programs</a>
</div>

<div class="doc_text">

<dl>
  <dt>TOOLNAME
  <dd>
  This variable contains the name of the program that will
  be built.  For example, to build an executable named
  <tt>sample</tt>, TOOLNAME should be set to <tt>sample</tt>.
  <p>

  <dt>USEDLIBS
  <dd>
  This variable holds a space separated list of libraries that
  should be linked into the program.  These libraries must either
  be LLVM libraries or libraries that come from your <b>lib</b>
  directory.  The libraries must be specified by their base name.
  For example, to link libsample.a, you would set USEDLIBS to
  <tt>sample</tt>.
  <p>
  Note that this works only for statically linked libraries.
  <p>

  <dt>LIBS
  <dd>
  To link dynamic libraries, add <tt>-l&lt;library base name&gt;</tt> to
  the LIBS variable.  The LLVM build system will look in the same places
  for dynamic libraries as it does for static libraries.
  <p>
  For example, to link <tt>libsample.so</tt>, you would have the
  following line in your <tt>Makefile</tt>:
  <p>
  <tt>
  LIBS += -lsample
  </tt>
</dl>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="miscVars">Miscellaneous Variables</a>
</div>

<div class="doc_text">

<dl>
  <dt>ExtraSource
  <dd>
  This variable contains a space separated list of extra source
  files that need to be built.  It is useful for including the
  output of Lex and Yacc programs.
  <p>

  <dt>CFLAGS
  <dt>CPPFLAGS
  <dd>
  This variable can be used to add options to the C and C++
  compiler, respectively.  It is typically used to add options
  that tell the compiler the location of additional directories
  to search for header files.
  <p>
  It is highly suggested that you append to CFLAGS and CPPFLAGS as
  opposed to overwriting them.  The master Makefiles may already
  have useful options in them that you may not want to overwrite.
  <p>
</dl>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="objcode">Placement of Object Code</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The final location of built libraries and executables will depend upon
whether you do a Debug, Release, or Profile build.</p>

<dl>
  <dt>Libraries
  <dd>
  All libraries (static and dynamic) will be stored in
  <tt>PROJ_OBJ_ROOT/&lt;type&gt;/lib</tt>, where type is <tt>Debug</tt>,
  <tt>Release</tt>, or <tt>Profile</tt> for a debug, optimized, or
  profiled build, respectively.<p>

  <dt>Executables
  <dd>All executables will be stored in
  <tt>PROJ_OBJ_ROOT/&lt;type&gt;/bin</tt>, where type is <tt>Debug</tt>,
  <tt>Release</tt>, or <tt>Profile</tt> for a debug, optimized, or profiled
  build, respectively.
</dl>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="help">Further Help</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>If you have any questions or need any help creating an LLVM project,
the LLVM team would be more than happy to help.  You can always post your
questions to the <a
href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM Developers
Mailing List</a>.</p>

</div>
  
<!-- *********************************************************************** -->
<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>

  <a href="mailto:criswell@uiuc.edu">John Criswell</a><br>
  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a>
  <br>
  Last modified: $Date$
</address>

</body>
</html>
