80 column rule.
[oota-llvm.git] / docs / GettingStarted.html
index 874dc37874f141b9c9f60fb393b8f766516522d2..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 llvm-gcc4.0 (or llvm-gcc4.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++:
     <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>
-      <ul><li>If the binary extension is ".bz" use bunzip2 instead of gunzip.</li>
-      </ul>
+      <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,14 +498,15 @@ 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 
@@ -533,6 +521,10 @@ the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
    builds with "make ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O2 ..."</p>
 <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>
@@ -1279,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>
 
 <!-- ======================================================================= -->
@@ -1376,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
@@ -1402,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>
@@ -1607,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
@@ -1627,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>