<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="#test-suite"><tt>test-suite</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>
<p>Welcome to LLVM! In order to get started, you first need to know some
basic information.</p>
-<p>First, LLVM comes in two pieces. The first piece is the LLVM suite. This
-contains all of the tools, libraries, and header files needed to use the low
-level virtual machine. It contains an assembler, disassembler, bitcode
-analyzer and bitcode optimizer. It also contains a test suite that can be
-used to test the LLVM tools and the GCC front end.</p>
+<p>First, LLVM comes in three pieces. The first piece is the LLVM
+suite. This contains all of the tools, libraries, and header files
+needed to use the low level virtual machine. It contains an
+assembler, disassembler, bitcode analyzer and bitcode optimizer. It
+also contains basic regression tests that can be used to test the LLVM
+tools and the GCC front end.</p>
<p>The second piece is the GCC front end. This component provides a version of
GCC that compiles C and C++ code into LLVM bitcode. Currently, the GCC front
from the LLVM suite.</p>
<p>
-There is a third, optional piece called llvm-test. It is a suite of programs
+There is a third, optional piece called Test Suite. It is a suite of programs
with a testing harness that can be used to further test LLVM's functionality
and performance.
</p>
<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 llvm-gcc-4.2 front end if you intend to compile C or C++:
+ <li>Install the llvm-gcc-4.2 front end if you intend to compile C or C++
+ (see <a href="#installcf">Install the GCC Front End</a> for details):</li>
<ol>
<li><tt>cd <i>where-you-want-the-C-front-end-to-live</i></tt></li>
- <li><tt>gunzip --stdout llvm-gcc-4.2-<i>version</i>-<i>platform</i>.tar.gz | tar -xvf -</tt>
- </li>
- <li>Note: If the binary extension is ".bz" use bunzip2 instead of gunzip.</li>
- <li>Add llvm-gcc's "bin" directory to your PATH variable.</li>
+ <li><tt>gunzip --stdout llvm-gcc-4.2-<i>version</i>-<i>platform</i>.tar.gz | tar -xvf -</tt></li>
+ <li><tt><i>install-binutils-binary-from-MinGW</i></tt> (Windows only)</li>
+ <li>Note: If the binary extension is "<tt>.bz</tt>" use <tt>bunzip2</tt> instead of <tt>gunzip</tt>.</li>
+ <li>Note: On Windows, use <a href="http://www.7-zip.org">7-Zip</a> or a similar archiving tool.</li>
+ <li>Add <tt>llvm-gcc</tt>'s "<tt>bin</tt>" directory to your <tt>PATH</tt> environment variable.</li>
</ol></li>
<li>Get the LLVM Source Code
<li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
<li><tt>cd llvm/projects</tt>
<li><tt>gunzip --stdout llvm-test-<i>version</i>.tar.gz | tar -xvf -</tt>
+ <li><tt>mv llvm-test-<i>version</i> test-suite</tt>
</ol></li>
</ul></li>
<p>Optionally, specify for <i>directory</i> the full pathname of the
C/C++ front end installation to use with this LLVM configuration. If
not specified, the PATH will be searched. This is only needed if you
- want to run the testsuite or do some special kinds of LLVM builds.</p></li>
+ want to run test-suite or do some special kinds of LLVM builds.</p></li>
<li><tt>--enable-spec2000=<i>directory</i></tt>
<p>Enable the SPEC2000 benchmarks for testing. The SPEC2000
benchmarks should be available in
<td>x86<sup><a href="#pf_1">1</a></sup></td>
<td>GCC</td>
</tr>
+<tr>
+ <td>FreeBSD</td>
+ <td>amd64</td>
+ <td>GCC</td>
+</tr>
<tr>
<td>MacOS X<sup><a href="#pf_2">2</a></sup></td>
<td>PowerPC</td>
</tr>
<tr>
<td>Cygwin/Win32</td>
- <td>x86<sup><a href="#pf_1">1</a>,<a href="#pf_8">8</a></sup></td>
- <td>GCC 3.4.X, binutils 2.15</td>
+ <td>x86<sup><a href="#pf_1">1</a>,<a href="#pf_8">8</a>,
+ <a href="#pf_11">11</a></sup></td>
+ <td>GCC 3.4.X, binutils 2.20</td>
</tr>
<tr>
<td>MinGW/Win32</td>
<td>x86<sup><a href="#pf_1">1</a>,<a href="#pf_6">6</a>,
<a href="#pf_8">8</a>, <a href="#pf_10">10</a></sup></td>
- <td>GCC 3.4.X, binutils 2.15</td>
+ <td>GCC 3.4.X, binutils 2.20</td>
</tr>
</table>
<li><a name="pf_5">The GCC-based C/C++ frontend does not build</a></li>
<li><a name="pf_6">The port is done using the MSYS shell.</a></li>
<li><a name="pf_7">Native code generation exists but is not complete.</a></li>
-<li><a name="pf_8">Binutils</a> up to post-2.17 has bug in bfd/cofflink.c
- preventing LLVM from building correctly. Several workarounds have been
- introduced into LLVM build system, but the bug can occur anytime in the
- 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_8">Binutils 2.20 or later is required to build the assembler
+ generated by LLVM properly.</a></li>
<li><a name="pf_9">XCode 2.5 and gcc 4.0.1</a> (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).
before any Windows-based versions such as Strawberry Perl and
ActivePerl, as these have Windows-specifics that will cause the
build to fail.</a></li>
+<li><a name="pf_11">In general, LLVM modules requiring dynamic linking can
+ not be built on Windows. However, you can build LLVM tools using
+ <i>"make tools-only"</i>.</li>
</ol>
</div>
<tr>
<td><a href="http://www.gnu.org/software/autoconf">GNU Autoconf</a></td>
- <td>2.59</td>
+ <td>2.60</td>
<td>Configuration script builder<sup><a href="#sf4">4</a></sup></td>
</tr>
<tr>
<td><a href="http://www.gnu.org/software/automake">GNU Automake</a></td>
- <td>1.9.2</td>
+ <td>1.9.6</td>
<td>aclocal macro generator<sup><a href="#sf4">4</a></sup></td>
</tr>
<tr>
<td><a href="http://savannah.gnu.org/projects/libtool">libtool</a></td>
- <td>1.5.10</td>
+ <td>1.5.22</td>
<td>Shared library manager<sup><a href="#sf4">4</a></sup></td>
</tr>
<li><a name="sf3">Only needed if you want to run the automated test
suite in the <tt>llvm/test</tt> directory.</a></li>
<li><a name="sf4">If you want to make changes to the configure scripts,
- you will need GNU autoconf (2.59), and consequently, GNU M4 (version 1.4
- or higher). You will also need automake (1.9.2). We only use aclocal
+ you will need GNU autoconf (2.60), and consequently, GNU M4 (version 1.4
+ or higher). You will also need automake (1.9.6). We only use aclocal
from that package.</a></li>
</ol>
</div>
<p><b>GCC 4.3.3 (Debian 4.3.3-10) on ARM</b>: Miscompiles parts of LLVM 2.6
when optimizations are turned on. The symptom is an infinite loop in
FoldingSetImpl::RemoveNode while running the code generator.</p>
+<p><b>GCC 4.3.5 and GCC 4.4.5 on ARM</b>: These can miscompile <tt>value >>
+1</tt> even at -O0. A test failure in <tt>test/Assembler/alignstack.ll</tt> is
+one symptom of the problem.
<p><b>GNU ld 2.16.X</b>. Some 2.16.X versions of the ld linker will produce very
long warning messages complaining that some ".gnu.linkonce.t.*" symbol was
defined in a discarded section. You can safely ignore these messages as they are
<dd>Source release for the LLVM libraries and tools.<br></dd>
<dt><tt>llvm-test-x.y.tar.gz</tt></dt>
- <dd>Source release for the LLVM test suite.</dd>
+ <dd>Source release for the LLVM test-suite.</dd>
<dt><tt>llvm-gcc-4.2-x.y.source.tar.gz</tt></dt>
<dd>Source release of the llvm-gcc-4.2 front end. See README.LLVM in the root
subdirectories of the '<tt>tags</tt>' directory:</p>
<ul>
+<li>Release 2.8: <b>RELEASE_28</b></li>
+<li>Release 2.7: <b>RELEASE_27</b></li>
+<li>Release 2.6: <b>RELEASE_26</b></li>
<li>Release 2.5: <b>RELEASE_25</b></li>
<li>Release 2.4: <b>RELEASE_24</b></li>
<li>Release 2.3: <b>RELEASE_23</b></li>
<div class="doc_code">
<pre>
% cd llvm/projects
-% svn co http://llvm.org/svn/llvm-project/test-suite/trunk llvm-test
+% svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite
</pre>
</div>
<div class="doc_text">
-<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="GCCFEBuildInstrs.html">build llvm-gcc yourself</a> after building the
+<p>Before configuring and compiling the LLVM suite (or if you want to use just the LLVM
+GCC front end) you can optionally extract the front end from the binary distribution.
+It is used for running the LLVM test-suite and for compiling C/C++ programs. Note that
+you can optionally <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>
+<p>To install the GCC front end, do the following (on Windows, use an archival tool
+like <a href="http://www.7-zip.org">7-zip</a> that understands gzipped tars):</p>
<ol>
<li><tt>cd <i>where-you-want-the-front-end-to-live</i></tt></li>
-</tt></li>
</ol>
-<p>Once the binary is uncompressed, you should add a symlink for llvm-gcc and
-llvm-g++ to some directory in your path. When you configure LLVM, it will
-automatically detect llvm-gcc's presence (if it is in your path) enabling its
-use in llvm-test. Note that you can always build or install llvm-gcc at any
-pointer after building the main LLVM repository: just reconfigure llvm and
-llvm-test will pick it up.
+<p>Once the binary is uncompressed, if you're using a *nix-based system, add a symlink for
+<tt>llvm-gcc</tt> and <tt>llvm-g++</tt> to some directory in your path. If you're using a
+Windows-based system, add the <tt>bin</tt> subdirectory of your front end installation directory
+to your <tt>PATH</tt> environment variable. For example, if you uncompressed the binary to
+<tt>c:\llvm-gcc</tt>, add <tt>c:\llvm-gcc\bin</tt> to your <tt>PATH</tt>.</p>
+
+<p>If you now want to build LLVM from source, when you configure LLVM, it will
+automatically detect <tt>llvm-gcc</tt>'s presence (if it is in your path) enabling its
+use in test-suite. Note that you can always build or install <tt>llvm-gcc</tt> at any
+point after building the main LLVM repository: just reconfigure llvm and
+test-suite will pick it up.
</p>
-<p>The binary versions of the GCC front end may not suit all of your needs. For
-example, the binary distribution may include an old version of a system header
-file, not "fix" a header file that needs to be fixed for GCC, or it may be
-linked with libraries not available on your system.</p>
+<p>As a convenience for Windows users, the front end binaries for MinGW/x86 include
+versions of the required w32api and mingw-runtime binaries. The last remaining step for
+Windows users is to simply uncompress the binary binutils package from
+<a href="http://mingw.org/">MinGW</a> into your front end installation directory. While the
+front end installation steps are not quite the same as a typical manual MinGW installation,
+they should be similar enough to those who have previously installed MinGW on Windows systems.</p>
-<p>In cases like these, you may want to try <a
-href="GCCFEBuildInstrs.html">building the GCC front end from source.</a> This is
-much easier now than it was in the past.</p>
+<p>To install binutils on Windows:</p>
+
+<ol>
+ <li><tt><i>download GNU Binutils from <a href="http://sourceforge.net/projects/mingw/files/">MinGW Downloads</a></i></tt></li>
+ <li><tt>cd <i>where-you-uncompressed-the-front-end</i></tt></li>
+ <li><tt><i>uncompress archived binutils directories (not the tar file) into the current directory</i></tt></li>
+</ol>
+
+<p>The binary versions of the LLVM GCC front end may not suit all of your needs. For
+example, the binary distribution may include an old version of a system header
+file, not "fix" a header file that needs to be fixed for GCC, or it may be linked with
+libraries not available on your system. In cases like these, you may want to try
+<a href="GCCFEBuildInstrs.html">building the GCC front end from source</a>. Thankfully,
+this is much easier now than it was in the past.</p>
+
+<p>We also do not currently support updating of the GCC front end by manually overlaying
+newer versions of the w32api and mingw-runtime binary packages that may become available
+from MinGW. At this time, it's best to think of the MinGW LLVM GCC front end binary as
+a self-contained convenience package that requires Windows users to simply download and
+uncompress the GNU Binutils binary package from the MinGW project.</p>
+
+<p>Regardless of your platform, if you discover that installing the LLVM GCC front end
+binaries is not as easy as previously described, or you would like to suggest improvements,
+please let us know how you would like to see things improved by dropping us a note on our
+<a href="http://llvm.org/docs/#maillist">mailing list</a>.</p>
</div>
named after the build type:</p>
<dl>
- <dt>Debug Builds
+ <dt>Debug Builds with assertions enabled (the default)
<dd>
<dl>
<dt>Tools
- <dd><tt><i>OBJ_ROOT</i>/Debug/bin</tt>
+ <dd><tt><i>OBJ_ROOT</i>/Debug+Asserts/bin</tt>
<dt>Libraries
- <dd><tt><i>OBJ_ROOT</i>/Debug/lib</tt>
+ <dd><tt><i>OBJ_ROOT</i>/Debug+Asserts/lib</tt>
</dl>
<br><br>
<div class="doc_code">
<pre>
$ mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
-$ echo ':llvm:M::llvm::/path/to/lli:' > /proc/sys/fs/binfmt_misc/register
+$ echo ':llvm:M::BC::/path/to/lli:' > /proc/sys/fs/binfmt_misc/register
$ chmod u+x hello.bc (if needed)
$ ./hello.bc
</pre>
</div>
<p>
-This allows you to execute LLVM bitcode files directly. Thanks to Jack
-Cummings for pointing this out!
+This allows you to execute LLVM bitcode files directly. On Debian, you
+can also use this command instead of the 'echo' command above:</p>
</p>
+<div class="doc_code">
+<pre>
+$ sudo update-binfmts --install llvm /path/to/lli --magic 'BC'
+</pre>
</div>
+</div>
<!-- *********************************************************************** -->
<div class="doc_section">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="llvmtest"><tt>test-suite</tt></a></div>
+<div class="doc_subsection"><a name="test-suite"><tt>test-suite</tt></a></div>
<div class="doc_text">
<p>This is not a directory in the normal llvm module; it is a separate
Subversion
<p>The <b>tools</b> directory contains the executables built out of the
libraries above, which form the main part of the user interface. You can
-always get help for a tool by typing <tt>tool_name --help</tt>. The
+always get help for a tool by typing <tt>tool_name -help</tt>. The
following is a brief introduction to the most important tools. More detailed
information is in the <a href="CommandGuide/index.html">Command Guide</a>.</p>
<dt><tt><b>llvm-ld</b></tt></dt>
<dd><tt>llvm-ld</tt> is a general purpose and extensible linker for LLVM.
- This is the linker invoked by <tt>llvmc</tt>. It performsn standard link time
+ This is the linker invoked by <tt>llvmc</tt>. It performs standard link time
optimizations and allows optimization modules to be loaded and run so that
language specific optimizations can be applied at link time.</dd>
<dt><tt><b>opt</b></tt></dt>
<dd><tt>opt</tt> reads LLVM bitcode, applies a series of LLVM to LLVM
transformations (which are specified on the command line), and then outputs
- the resultant bitcode. The '<tt>opt --help</tt>' command is a good way to
+ the resultant bitcode. The '<tt>opt -help</tt>' command is a good way to
get a list of the program transformations available in LLVM.<br>
<dd><tt>opt</tt> can also be used to run a specific analysis on an input
LLVM bitcode file and print out the results. It is primarily useful for
</div>
-<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="win32"><tt>llvm/win32</tt></a></div>
-<div class="doc_text">
- <p>This directory contains build scripts and project files for use with
- Visual C++. This allows developers on Windows to build LLVM without the need
- for Cygwin. The contents of this directory should be considered experimental
- at this time.
- </p>
-</div>
<!-- *********************************************************************** -->
<div class="doc_section">
<a name="tutorial">An Example Using the LLVM Tool Chain</a>