these facilities, a Makefile from a project must do the following things:</p>
<ol>
-<li>Set environment variables.There are several environment variables that a
-Makefile needs to set to use the LLVM build system:
-
-<ul>
- <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>BUILD_SRC_ROOT</tt> - The root of the project's source tree.</li>
- <li><tt>BUILD_OBJ_ROOT</tt> - The root of the project's object tree.</li>
- <li><tt>BUILD_SRC_DIR</tt> - The directory containing the current source to be
- compiled.</li>
- <li><tt>BUILD_OBJ_DIR</tt> - The directory where the current source will place
- the new object files. This should always be the current directory.</li>
- <li><tt>LEVEL</tt> - The relative path from the current directory to the root
- of the object tree.</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>
+ <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>
+ <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 off of the LLVM sample
+<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>
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 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.</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>
- % autoconf -o ../configure</tt></p>
+ % ./AutoRegen.sh</tt></p>
</div>
-<p>You must be using Autoconf version 2.57 or higher.</p></li>
+<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=<directory></tt>
- <dd>
- Tell your project where the LLVM source tree is located.
- <p>
- <dt><tt>--with-llvmobj=<directory></tt>
- <dd>
- Tell your project where the LLVM object tree is located.
+ <dt><tt>--with-llvmsrc=<directory></tt></dt>
+ <dd>Tell your project where the LLVM source tree is located.</dd>
+ <dt><br><tt>--with-llvmobj=<directory></tt></dt>
+ <dd>Tell your project where the LLVM object tree is located.</dd>
+ <dt><br><tt>--prefix=<directory></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> in the root of
-your object directory, and your project should build.</p>
+<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>
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.</li>
-
- <p>
-
+ 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>
- The LLVM source tree provides benchmarks and programs which are
- known to compile with the LLVM GCC front ends. You can use these
+ 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. These
- programs are found in the <tt>llvm/test/Programs</tt> directory.
- <p>
- Currently, there is no way to hook your tests directly into the
- <tt>llvm/test/Programs</tt> testing harness. You will simply
+ 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>
<dt>Libraries
<dd>
All libraries (static and dynamic) will be stored in
- <tt>BUILD_OBJ_ROOT/lib/<type></tt>, where type is <tt>Debug</tt>,
+ <tt>PROJ_OBJ_ROOT/<type>/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>BUILD_OBJ_ROOT/tools/<type></tt>, where type is <tt>Debug</tt>,
+ <tt>PROJ_OBJ_ROOT/<type>/bin</tt>, where type is <tt>Debug</tt>,
<tt>Release</tt>, or <tt>Profile</tt> for a debug, optimized, or profiled
build, respectively.
</dl>
<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>
+ 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" alt="Valid HTML 4.01!" /></a>
+ 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.cs.uiuc.edu">The LLVM Compiler Infrastructure</a>
+ <a href="http://llvm.org">The LLVM Compiler Infrastructure</a>
<br>
Last modified: $Date$
</address>