80 column rule.
[oota-llvm.git] / docs / GettingStarted.html
index 143c7a34c6ec7119a8797f3506c2e75c9548f424..93b169352a15c7190c92a82a38ef1145ba8025e1 100644 (file)
   <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>
@@ -114,13 +114,12 @@ and performance.
   <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-gcc-4.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><tt>gunzip --stdout llvm-gcc-4.2-<i>version</i>-<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>
+      <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>
     </ol></li>
 
@@ -236,7 +235,7 @@ software you will need.</p>
   <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>
 
@@ -253,7 +252,7 @@ software you will need.</p>
 </tr>
 <tr>
   <td>Linux</td>
-  <td>amd64<sup><a href="#pf_3">3</a></sup></td>
+  <td>amd64</td>
   <td>GCC</td>
 </tr>
 </table>
@@ -269,7 +268,7 @@ software you will need.</p>
 <tr>
   <td>Windows</td>
   <td>x86<sup><a href="#pf_1">1</a></sup></td>
-  <td>Visual Studio .NET<sup><a href="#pf_4">4</a>,<a href="#pf_5">5</a></sup></td>
+  <td>Visual Studio 2005 SP1 or higher<sup><a href="#pf_4">4</a>,<a href="#pf_5">5</a></sup></td>
 <tr>
   <td>AIX<sup><a href="#pf_3">3</a>,<a href="#pf_4">4</a></sup></td>
   <td>PowerPC</td>
@@ -306,13 +305,9 @@ software you will need.</p>
 up</a></li>
 <li><a name="pf_2">Code generation supported for 32-bit ABI only</a></li>
 <li><a name="pf_3">No native code generation</a></li>
-<li><a name="pf_4">Build is not complete: one or more tools don't link</a></li>
+<li><a name="pf_4">Build is not complete: one or more tools do not link or function</a></li>
 <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>
-<a href="http://www.mingw.org/MinGWiki/">Download</a> and install 
-bison (excl. M4.exe) and flex in that order. Build binutils-2.15 from source,
-if necessary. Bison &amp; flex can be also grabbed from GNUWin32 sf.net 
-project.</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
@@ -320,6 +315,11 @@ project.</li>
     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</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).
+    Add <i>OPTIMIZE_OPTION="-O0"</i> to the build command line
+    if compiling for LLVM Release or bootstrapping the LLVM toolchain.</li>
 </ol>
 </div>
 
@@ -338,7 +338,7 @@ on your platform.</p>
 
 <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>
 
@@ -371,18 +371,6 @@ href="CFEBuildInstrs.html">try to compile it</a> on your platform.</p>
       <td>For building the CFE</td>
     </tr>
 
-    <tr>
-      <td><a href="http://www.gnu.org/software/flex">Flex</a></td>
-      <td>2.5.4</td>
-      <td>LEX compiler</td>
-    </tr>
-
-    <tr>
-      <td><a href="http://www.gnu.org/software/bison/bison.html">Bison</a></td>
-      <td>1.28, 1.35, 1.75, 1.875d, 2.0, or 2.1<br>(not 1.85 or 1.875)</td>
-      <td>YACC compiler</td>
-    </tr>
-
     <tr>
       <td><a href="http://subversion.tigris.org/project_packages.html">SVN</a></td>
       <td>&ge;1.3</td>
@@ -469,7 +457,6 @@ href="CFEBuildInstrs.html">try to compile it</a> on your platform.</p>
     <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>
@@ -511,28 +498,33 @@ of GCC you are using.
 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
@@ -547,6 +539,12 @@ the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
    portions of its testsuite.</p>
 <p><b>GCC 4.1.2 on OpenSUSE</b>: Seg faults during libstdc++ build and on x86_64
 platforms compiling md5.c gets a mangled constant.</p>
+<p><b>GCC 4.1.2 (20061115 (prerelease) (Debian 4.1.1-21)) on Debian</b>: Appears
+to miscompile parts of LLVM 2.4. One symptom is ValueSymbolTable complaining
+about symbols remaining in the table on destruction.</p>
+<p><b>GCC 4.1.2 20071124 (Red Hat 4.1.2-42)</b>: Suffers from the same symptoms
+as the previous one. It appears to work with ENABLE_OPTIMIZED=0 (the default).</p>
+
 <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
@@ -658,24 +656,20 @@ compressed with the gzip program.
 <p>The files are as follows, with <em>x.y</em> marking the version number:
 <dl>
   <dt><tt>llvm-x.y.tar.gz</tt></dt>
-  <dd>Source release for the LLVM libraries and tools.<br/></dd>
+  <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>
 
-  <dt><tt>llvm-gcc4-x.y.source.tar.gz</tt></dt>
-  <dd>Source release of the llvm-gcc4 front end.  See README.LLVM in the root
-      directory for build instructions.<br/></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
+      directory for build instructions.<br></dd>
 
-  <dt><tt>llvm-gcc4-x.y-platform.tar.gz</tt></dt>
-  <dd>Binary release of the llvm-gcc4 front end for a specific platform.<br/></dd>
+  <dt><tt>llvm-gcc-4.2-x.y-platform.tar.gz</tt></dt>
+  <dd>Binary release of the llvm-gcc-4.2 front end for a specific platform.<br></dd>
 
 </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>
 
 <!-- ======================================================================= -->
@@ -704,9 +698,13 @@ test directories, and local copies of documentation files.</p>
 <p>If you want to get a specific release (as opposed to the most recent
 revision), you can checkout it from the '<tt>tags</tt>' directory (instead of
 '<tt>trunk</tt>'). The following releases are located in the following
-  subdirectories of the '<tt>tags</tt>' directory:</p>
+subdirectories of the '<tt>tags</tt>' directory:</p>
 
 <ul>
+<li>Release 2.4: <b>RELEASE_24</b></li>
+<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>
@@ -735,7 +733,7 @@ configured by the LLVM configure script as well as automatically updated when
 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>
@@ -750,14 +748,14 @@ instructions</a> to successfully get and build the LLVM GCC front-end.</p>
 <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>
 
 <ol>
   <li><tt>cd <i>where-you-want-the-front-end-to-live</i></tt></li>
-  <li><tt>gunzip --stdout llvmgcc-<i>version</i>.<i>platform</i>.tar.gz | tar -xvf
+  <li><tt>gunzip --stdout llvm-gcc-4.2-<i>version</i>-<i>platform</i>.tar.gz | tar -xvf
       -</tt></li>
 </ol>
 
@@ -775,7 +773,7 @@ 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>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>
@@ -830,7 +828,7 @@ script to configure the build system:</p>
   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
@@ -868,7 +866,7 @@ script to configure the build system:</p>
   native compiler (no cross-compiler targets available). The "native" target is 
   selected as the target of the build host. You can also specify a comma 
   separated list of target names that you want available in llc. The target 
-  names use all lower case. The current set of targets is: <br/>
+  names use all lower case. The current set of targets is: <br>
   <tt>alpha, ia64, powerpc, skeleton, sparc, x86</tt>.
   <br><br></dd>
   <dt><i>--enable-doxygen</i></dt>
@@ -1140,10 +1138,9 @@ named after the build type:</p>
 
 <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">
@@ -1280,8 +1277,7 @@ different <a href="#tools">tools</a>.</p>
   <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>
 
 <!-- ======================================================================= -->
@@ -1377,13 +1373,10 @@ information is in the <a href="CommandGuide/index.html">Command Guide</a>.</p>
   
   <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
@@ -1403,7 +1396,7 @@ information is in the <a href="CommandGuide/index.html">Command Guide</a>.</p>
   <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 
-  get a list of the program transformations available in LLVM.<br/>
+  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 
   debugging analyses, or familiarizing yourself with what an analysis does.</dd>
@@ -1608,7 +1601,7 @@ Asked Questions</a> page.</p>
 
 <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
@@ -1628,9 +1621,9 @@ out:</p>
 <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:sabre@nondot.org">Chris Lattner</a><br>
   <a href="http://llvm.x10sys.com/rspencer/">Reid Spencer</a><br>