<li><a href="#quickstart">Getting Started Quickly (A Summary)</a>
<li><a href="#requirements">Requirements</a>
<ol>
- <li><a href="#hardware">Hardware</a>
- <li><a href="#software">Software</a>
- <li><a href="#brokengcc">Broken versions of GCC and other tools</a>
+ <li><a href="#hardware">Hardware</a></li>
+ <li><a href="#software">Software</a></li>
+ <li><a href="#brokengcc">Broken versions of GCC and other tools</a></li>
</ol></li>
<li><a href="#starting">Getting Started with LLVM</a>
<ol>
- <li><a href="#terminology">Terminology and Notation</a>
- <li><a href="#environment">Setting Up Your Environment</a>
- <li><a href="#unpack">Unpacking the LLVM Archives</a>
- <li><a href="#checkout">Checkout LLVM from Subversion</a>
- <li><a href="#installcf">Install the GCC Front End</a>
- <li><a href="#config">Local LLVM Configuration</a>
- <li><a href="#compile">Compiling the LLVM Suite Source Code</a>
- <li><a href="#cross-compile">Cross-Compiling LLVM</a>
- <li><a href="#objfiles">The Location of LLVM Object Files</a>
- <li><a href="#optionalconfig">Optional Configuration Items</a>
+ <li><a href="#terminology">Terminology and Notation</a></li>
+ <li><a href="#environment">Setting Up Your Environment</a></li>
+ <li><a href="#unpack">Unpacking the LLVM Archives</a></li>
+ <li><a href="#checkout">Checkout LLVM from Subversion</a></li>
+ <li><a href="#installcf">Install the GCC Front End</a></li>
+ <li><a href="#config">Local LLVM Configuration</a></li>
+ <li><a href="#compile">Compiling the LLVM Suite Source Code</a></li>
+ <li><a href="#cross-compile">Cross-Compiling LLVM</a></li>
+ <li><a href="#objfiles">The Location of LLVM Object Files</a></li>
+ <li><a href="#optionalconfig">Optional Configuration Items</a></li>
</ol></li>
<li><a href="#layout">Program layout</a>
<ol>
- <li><a href="#examples"><tt>llvm/examples</tt></a>
- <li><a href="#include"><tt>llvm/include</tt></a>
- <li><a href="#lib"><tt>llvm/lib</tt></a>
- <li><a href="#projects"><tt>llvm/projects</tt></a>
- <li><a href="#runtime"><tt>llvm/runtime</tt></a>
- <li><a href="#test"><tt>llvm/test</tt></a>
- <li><a href="#llvmtest"><tt>llvm-test</tt></a>
- <li><a href="#tools"><tt>llvm/tools</tt></a>
- <li><a href="#utils"><tt>llvm/utils</tt></a>
- <li><a href="#win32"><tt>llvm/win32</tt></a>
+ <li><a href="#examples"><tt>llvm/examples</tt></a></li>
+ <li><a href="#include"><tt>llvm/include</tt></a></li>
+ <li><a href="#lib"><tt>llvm/lib</tt></a></li>
+ <li><a href="#projects"><tt>llvm/projects</tt></a></li>
+ <li><a href="#runtime"><tt>llvm/runtime</tt></a></li>
+ <li><a href="#test"><tt>llvm/test</tt></a></li>
+ <li><a href="#llvmtest"><tt>llvm-test</tt></a></li>
+ <li><a href="#tools"><tt>llvm/tools</tt></a></li>
+ <li><a href="#utils"><tt>llvm/utils</tt></a></li>
+ <li><a href="#win32"><tt>llvm/win32</tt></a></li>
</ol></li>
<li><a href="#tutorial">An Example Using the LLVM Tool Chain</a>
<li>Read the documentation.</li>
<li>Read the documentation.</li>
<li>Remember that you were warned twice about reading the documentation.</li>
- <li>Install the GCC front end if you intend to compile C or C++:
+ <li>Install the llvm-gcc4.2 front end if you intend to compile C or C++:
<ol>
<li><tt>cd <i>where-you-want-the-C-front-end-to-live</i></tt></li>
<li><tt>gunzip --stdout llvm-gcc.<i>platform</i>.tar.gz | tar -xvf -</tt>
</li>
- <li><tt>cd llvm-gcc3.4/<i>platform</i> (llvm-gcc3.4 only)<br>
- ./fixheaders</tt></li>
+ <ul><li>If the binary extension is ".bz" use bunzip2 instead of gunzip.</li>
+ </ul>
<li>Add llvm-gcc's "bin" directory to your PATH variable.</li>
</ol></li>
<td>GCC</td>
</tr>
<tr>
- <td>MacOS X<sup><a href="#pf_2">2</a></sup></td>
+ <td>MacOS X<sup><a href="#pf_2">2</a>,<a href="#pf_9">9</a></sup></td>
<td>x86</td>
<td>GCC</td>
future. We highly recommend that you rebuild your current binutils with the
patch from <a href="http://sourceware.org/bugzilla/show_bug.cgi?id=2659">
Binutils bugzilla</a>, if it wasn't already applied.</li>
+<li><a name="pf_9">XCode 2.5 and gcc 4.0.1 (Apple Build 5370) will trip
+ internal LLVM assert messages when compiled for Release at optimization
+ levels greater than 0 (i.e., <i>“-O1”</i> and higher).
+ Add <i>OPTIMIZE_OPTION="-O0"</i> to the build command line
+ if compiling for LLVM Release or bootstrapping the LLVM toolchain.</li>
</ol>
</div>
<p>The GCC front end is not very portable at the moment. If you want to get it
to work on another platform, you can download a copy of the source and <a
-href="CFEBuildInstrs.html">try to compile it</a> on your platform.</p>
+href="GCCFEBuildInstrs.html">try to compile it</a> on your platform.</p>
</div>
<li><b>date</b> - print the current date/time </li>
<li><b>echo</b> - print to standard output</li>
<li><b>egrep</b> - extended regular expression search utility</li>
- <li><b>etags</b> - C/C++ tag file creator for vim/emacs</li>
<li><b>find</b> - find files/dirs in a file system</li>
<li><b>grep</b> - regular expression search utility</li>
<li><b>gzip*</b> - gzip command for distribution generation</li>
problems in the STL that effectively prevent it from compiling LLVM.
</p>
-<p><b>GCC 3.2.2</b>: This version of GCC fails to compile LLVM.</p>
+<p><b>GCC 3.2.2 and 3.2.3</b>: These versions of GCC fails to compile LLVM with
+a bogus template error. This was fixed in later GCCs.</p>
<p><b>GCC 3.3.2</b>: This version of GCC suffered from a <a
href="http://gcc.gnu.org/PR13392">serious bug</a> which causes it to crash in
the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
<p><b>Cygwin GCC 3.3.3</b>: The version of GCC 3.3.3 commonly shipped with
- Cygwin does not work. Please <a href="CFEBuildInstrs.html#cygwin">upgrade
+ Cygwin does not work. Please <a href="GCCFEBuildInstrs.html#cygwin">upgrade
to a newer version</a> if possible.</p>
<p><b>SuSE GCC 3.3.3</b>: The version of GCC 3.3.3 shipped with SuSE 9.1 (and
possibly others) does not compile LLVM correctly (it appears that exception
handling is broken in some cases). Please download the FSF 3.3.3 or upgrade
to a newer version of GCC.</p>
-<p><b>GCC 3.4.0</b> on linux/x86 (32-bit)</b>: GCC miscompiles portions of the
+<p><b>GCC 3.4.0 on linux/x86 (32-bit)</b>: GCC miscompiles portions of the
code generator, causing an infinite loop in the llvm-gcc build when built
with optimizations enabled (i.e. a release build).</p>
-<p><b>GCC 3.4.2</b> on linux/x86 (32-bit)</b>: GCC miscompiles portions of the
+<p><b>GCC 3.4.2 on linux/x86 (32-bit)</b>: GCC miscompiles portions of the
code generator at -O3, as with 3.4.0. However gcc 3.4.2 (unlike 3.4.0)
correctly compiles LLVM at -O2. A work around is to build release LLVM
builds with "make ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O2 ..."</p>
-<p><b>GCC 3.4.x</b> on X86-64/amd64</b>: GCC <a href="http://llvm.org/PR1056">
+<p><b>GCC 3.4.x on X86-64/amd64</b>: GCC <a href="http://llvm.org/PR1056">
miscompiles portions of LLVM</a>.</p>
+<p><b>GCC 3.4.4 (CodeSourcery ARM 2005q3-2)</b>: this compiler miscompiles LLVM
+ when building with optimizations enabled. It appears to work with
+ "<tt>make ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O1</tt>" or build a debug
+ build.</p>
<p><b>IA-64 GCC 4.0.0</b>: The IA-64 version of GCC 4.0.0 is known to
miscompile LLVM.</p>
<p><b>Apple Xcode 2.3</b>: GCC crashes when compiling LLVM at -O3 (which is the
</dl>
-<p>It is also possible to download the sources of the llvm-gcc4 front end from a
-read-only subversion mirror at
-svn://anonsvn.opensource.apple.com/svn/llvm/trunk. </p>
-
</div>
<!-- ======================================================================= -->
subdirectories of the '<tt>tags</tt>' directory:</p>
<ul>
+<li>Release 2.3: <b>RELEASE_23</b></li>
+<li>Release 2.2: <b>RELEASE_22</b></li>
+<li>Release 2.1: <b>RELEASE_21</b></li>
<li>Release 2.0: <b>RELEASE_20</b></li>
<li>Release 1.9: <b>RELEASE_19</b></li>
<li>Release 1.8: <b>RELEASE_18</b></li>
you run <tt>svn update</tt>.</p>
<p>If you would like to get the GCC front end source code, you can also get it
-and build it yourself. Please follow <a href="CFEBuildInstrs.html">these
+and build it yourself. Please follow <a href="GCCFEBuildInstrs.html">these
instructions</a> to successfully get and build the LLVM GCC front-end.</p>
</div>
<p>Before configuring and compiling the LLVM suite, you can optionally extract the
LLVM GCC front end from the binary distribution. It is used for running the
llvm-test testsuite and for compiling C/C++ programs. Note that you can optionally
-<a href="CFEBuildInstrs.html">build llvm-gcc yourself</a> after building the
+<a href="GCCFEBuildInstrs.html">build llvm-gcc yourself</a> after building the
main LLVM repository.</p>
<p>To install the GCC front end, do the following:</p>
linked with libraries not available on your system.</p>
<p>In cases like these, you may want to try <a
-href="CFEBuildInstrs.html">building the GCC front end from source.</a> This is
+href="GCCFEBuildInstrs.html">building the GCC front end from source.</a> This is
much easier now than it was in the past.</p>
</div>
will fail as these libraries require llvm-gcc and llvm-g++. See
<a href="#installcf">Install the GCC Front End</a> for details on installing
the C/C++ Front End. See
- <a href="CFEBuildInstrs.html">Bootstrapping the LLVM C/C++ Front-End</a>
+ <a href="GCCFEBuildInstrs.html">Bootstrapping the LLVM C/C++ Front-End</a>
for details on building the C/C++ Front End.</dd>
<dt><i>--with-tclinclude</i></dt>
<dd>Path to the tcl include directory under which <tt>tclsh</tt> can be
<p>
If you're running on a Linux system that supports the "<a
- href="http://www.tat.physik.uni-tuebingen.de/~rguenth/linux/binfmt_misc.html">
- binfmt_misc</a>"
+href="http://www.tat.physik.uni-tuebingen.de/~rguenth/linux/binfmt_misc.html">binfmt_misc</a>"
module, and you have root access on the system, you can set your system up to
-execute LLVM bitcode files directly. To do this, use commands like this (the
+execute LLVM bitcode files directly. To do this, use commands like this (the
first command may not be required if you are already using the module):</p>
<div class="doc_code">
<p>This directory contains projects that are not strictly part of LLVM but are
shipped with LLVM. This is also the directory where you should create your own
LLVM-based projects. See <tt>llvm/projects/sample</tt> for an example of how
- to set up your own project. See <tt>llvm/projects/Stacker</tt> for a fully
- functional example of a compiler front end.</p>
+ to set up your own project.</p>
</div>
<!-- ======================================================================= -->
<dt><tt><b>lli</b></tt></dt>
<dd><tt>lli</tt> is the LLVM interpreter, which
- can directly execute LLVM bitcode (although very slowly...). In addition
- to a simple interpreter, <tt>lli</tt> also has a tracing mode (entered by
- specifying <tt>-trace</tt> on the command line). Finally, for
- architectures that support it (currently x86, Sparc, and PowerPC), by default,
- <tt>lli</tt> will function as a Just-In-Time compiler (if the
- functionality was compiled in), and will execute the code <i>much</i>
- faster than the interpreter.</dd>
+ can directly execute LLVM bitcode (although very slowly...). For architectures
+ that support it (currently x86, Sparc, and PowerPC), by default, <tt>lli</tt>
+ will function as a Just-In-Time compiler (if the functionality was compiled
+ in), and will execute the code <i>much</i> faster than the interpreter.</dd>
<dt><tt><b>llc</b></tt></dt>
<dd> <tt>llc</tt> is the LLVM backend compiler, which
<div class="doc_text">
-<p>This document is just an <b>introduction</b> to how to use LLVM to do
+<p>This document is just an <b>introduction</b> on how to use LLVM to do
some simple things... there are many more interesting and complicated things
that you can do that aren't documented here (but we'll gladly accept a patch
if you want to write something up!). For more information about LLVM, check