Add mention of Glasgow Haskell Compiler.
[oota-llvm.git] / docs / Projects.html
index f8aaad812e88f0119fd671ff2081e9e9c3d8784b..54f747eea96f38bfbdbab5e5edd4f7f0df86fad6 100644 (file)
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!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>
-       </head>
-
-       <body bgcolor=white>
-
-       <center><h1>Creating an LLVM Project<br></h1></center>
-
-       <!--===============================================================-->
-       <h2><a name="a">Overview</a><hr></h2>
-       <!--===============================================================-->
-
-       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:
-
-       <ol>
-               <li>Set environment variables.
-               <p>
-               There are several environment variables that a Makefile needs to set to
-               use the LLVM build system:
-               <dl compact>
-                       <dt>LLVM_SRC_ROOT
-                       <dd>
-                       The root of the LLVM source tree.
-                       <p>
-
-                       <dt>LLVM_OBJ_ROOT
-                       <dd>
-                       The root of the LLVM object tree.
-                       <p>
-
-                       <dt>BUILD_SRC_ROOT
-                       <dd>
-                       The root of the project's source tree.
-                       <p>
-
-                       <dt>BUILD_OBJ_ROOT
-                       <dd>
-                       The root of the project's object tree.
-                       <p>
-
-                       <dt>BUILD_SRC_DIR
-                       <dd>
-                       The directory containing the current source to be compiled.
-                       <p>
-
-                       <dt>BUILD_OBJ_DIR
-                       <dd>
-                       The directory where the current source will place the new object
-                       files.  This should always be the current directory.
-                       <p>
-
-                       <dt>LEVEL
-                       <dd>
-                       The relative path from the current directory to the root of the
-                       object tree.
-                       <p>
-               </dl>
-
-               <li>Include the LLVM Makefile.config from $(LLVM_OBJ_ROOT).
-               <p>
-
-               <li>Include the LLVM Makefile.rules from $(LLVM_SRC_ROOT).
-       </ol>
-
-       There are two ways that you can set all of these variables:
-       <ol>
-               <li>
-               You can write your own Makefiles which hard-code these values.
-
-               <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.
-       </ol>
-
-       This document assumes that you will base your project off of 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>
-
-       <!--===============================================================-->
-       <h2><a name="a">Create a Project from the Sample Project</a><hr></h2>
-       <!--===============================================================-->
-
-       Follow these simple steps to start your project:
-
-       <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.
-               <p>
-
-               <li>
-               Add your source code and Makefiles to your source tree.
-               <p>
-
-               <li>
-               If you want your Makefiles to be configured by the
-               <tt>configure</tt> script, or if you want to support multiple
-               object directories, add your Makefiles to the <tt>configure</tt>
-               script by adding them into the <tt>autoconf/configure.ac</tt> file.
-               The macro <tt>AC_CONFIG_MAKEFILE</tt> will copy a file, unmodified,
-               from the source directory to the object directory.
-
-               <p>
-               After updating <tt>autoconf/configure.ac</tt>, regenerate the
-               configure script with these commands:
-               <p>
-               <tt>
-               cd autoconf<br>
-               autoconf -o ../configure
-               </tt>
-
-               <p>
-
-               You must be using Autoconf version 2.57 or higher.
-               <p>
-
-               <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 compact>
-                       <dt><tt>--with-llvmsrc=&lt;directory&gt;</tt>
-                       <dd>
-                       Tell your project where the LLVM source tree is located.
-                       <p>
-                       <dt><tt>--with-llvmobj=&lt;directory&gt;</tt>
-                       <dd>
-                       Tell your project where the LLVM object tree is located.
-               </dl>
-       </ol>
-
-       That's it!  Now all you have to do is type <tt>gmake</tt> in the root of
-       your object directory, and your project should build.
-
-       <!--===============================================================-->
-       <h2><a name="Source Tree Layout">Source Tree Layout</a><hr></h2>
-       <!--===============================================================-->
-
-       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.
-
-       Underneath your top level directory, you should have the following
-       directories:
-
-       <dl compact>
-               <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.
-       </dl>
-
-       Typically, you will want to build your <b>lib</b> directory first
-       followed by your <b>tools</b> directory.
-
-       <!--===============================================================-->
-       <h2><a name="Makefile Variables">Writing LLVM Style Makefiles</a><hr></h2>
-       <!--===============================================================-->
-       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:
-
-       <h3> Required Variables </h3>
-       <dl compact>
-               <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 /tmp/src, then the Makefile in
-               /tmp/src/jump/high would set LEVEL to "../..".
-       </dl>
-
-       <h3> Variables for Building Subdirectories</h3>
-       <dl compact>
-               <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>
-
-       <h3> Variables for Building Libraries</h3>
-       <dl compact>
-               <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>
-
-       <h3> Variables for Building Programs</h3>
-       <dl compact>
-               <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>
-       </dl>
-
-       <h3> Miscellaneous Variables</h3>
-       <dl compact>
-               <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>
-
-       <!--===============================================================-->
-       <h2><a name="objcode">Placement of Object Code</a><hr></h2>
-       <!--===============================================================-->
-
-       The final location of built libraries and executables will depend upon
-       whether you do a Debug, Release, or Profile build.
-
-       <dl compact>
-               <dt>Libraries
-               <dd>
-               All libraries (static and dynamic) will be stored in
-               BUILD_OBJ_ROOT/lib/&lt;type&gt;, 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 BUILD_OBJ_ROOT/lib/&lt;type&gt;,
-               where type is <tt>Debug</tt>, <tt>Release</tt>, or <tt>Profile</tt> for
-               a debug, optimized, or profiled build, respectively.
-       </dl>
-
-       <!--===============================================================-->
-       <h2><a name="help">Further Help</a><hr></h2>
-       <!--===============================================================-->
-
-       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 LLVM Developers Mailing List (<a
-       href="mailto:llvmdev.cs.uiuc.edu">llvmdev@cs.uiuc.edu</a>).
-       
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <title>Creating an LLVM Project</title>
+  <link rel="stylesheet" href="_static/llvm.css" type="text/css">
+</head>
+<body>
+
+<h1>Creating an LLVM Project</h1>
+
+<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>
+
+<!-- *********************************************************************** -->
+<h2><a name="overview">Overview</a></h2>
+<!-- *********************************************************************** -->
+
+<div>
+
+<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>
+
+<!-- *********************************************************************** -->
+<h2>
+  <a name="create">Create a Project from the Sample Project</a>
+</h2>
+<!-- *********************************************************************** -->
+
+<div>
+
+<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 Subversion, remove all the directories named .svn
+(and all the files therein) from your project's new source tree.  This will
+keep Subversion from thinking that your project is inside
+<tt>llvm/trunk/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 be 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>
+
+<!-- *********************************************************************** -->
+<h2>
+  <a name="source">Source Tree Layout</a>
+</h2>
+<!-- *********************************************************************** -->
+
+<div>
+
+<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>
+
+<!-- *********************************************************************** -->
+<h2>
+  <a name="makefiles">Writing LLVM Style Makefiles</a>
+</h2>
+<!-- *********************************************************************** -->
+
+<div>
+
+<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>
+
+<!-- ======================================================================= -->
+<h3>
+  <a name="reqVars">Required Variables</a>
+</h3>
+
+<div>
+
+<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>
+
+<!-- ======================================================================= -->
+<h3>
+  <a name="varsBuildDir">Variables for Building Subdirectories</a>
+</h3>
+
+<div>
+
+<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>
+
+<!-- ======================================================================= -->
+<h3>
+  <a name="varsBuildLib">Variables for Building Libraries</a>
+</h3>
+
+<div>
+
+<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>
+
+<!-- ======================================================================= -->
+<h3>
+  <a name="varsBuildProg">Variables for Building Programs</a>
+</h3>
+
+<div>
+
+<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 be libraries that
+  come from your <b>lib</b> directory.  The libraries must be
+  specified without their "lib" prefix.  For example, to link
+  libsample.a, you would set USEDLIBS to
+  <tt>sample.a</tt>.
+  <p>
+  Note that this works only for statically linked libraries.
+  <p>
+
+  <dt>LLVMLIBS
+  <dd>
+  This variable holds a space separated list of libraries that should
+  be linked into the program.  These libraries must be LLVM libraries.
+  The libraries must be specified without their "lib" prefix.  For
+  example, to link with a driver that performs an IR transformation
+  you might set LLVMLIBS to this minimal set of libraries
+  <tt>LLVMSupport.a LLVMCore.a LLVMBitReader.a LLVMAsmParser.a LLVMAnalysis.a LLVMTransformUtils.a LLVMScalarOpts.a LLVMTarget.a</tt>.
+  <p>
+  Note that this works only for statically linked libraries. LLVM is
+  split into a large number of static libraries, and the list of libraries you
+  require may be much longer than the list above. To see a full list
+  of libraries use:
+  <tt>llvm-config --libs all</tt>.
+  Using LINK_COMPONENTS as described below, obviates the need to set LLVMLIBS.
+  <p>
+
+  <dt>LINK_COMPONENTS
+  <dd>This variable holds a space separated list of components that
+  the LLVM Makefiles pass to the <tt>llvm-config</tt> tool to generate
+  a link line for the program. For example, to link with all LLVM
+  libraries use
+  <tt>LINK_COMPONENTS = all</tt>.
+  <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>
+  <p>
+  Note that LIBS must occur in the Makefile after the inclusion of Makefile.common.
+  <p>
+</dl>
+
+</div>
+
+<!-- ======================================================================= -->
+<h3>
+  <a name="miscVars">Miscellaneous Variables</a>
+</h3>
+
+<div>
+
+<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>
+
+<!-- *********************************************************************** -->
+<h2>
+  <a name="objcode">Placement of Object Code</a>
+</h2>
+<!-- *********************************************************************** -->
+
+<div>
+
+<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>
+
+<!-- *********************************************************************** -->
+<h2>
+  <a name="help">Further Help</a>
+</h2>
+<!-- *********************************************************************** -->
+
+<div>
+
+<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>
-Written by <a href="mailto:criswell@uiuc.edu">John Criswell</a>.
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" 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>