Fix missing includes of "llvm/Analysis/Passes.h" in the tutorials. Thanks
[oota-llvm.git] / docs / GettingStarted.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2                       "http://www.w3.org/TR/html4/strict.dtd">
3 <html>
4 <head>
5   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6   <title>Getting Started with LLVM System</title>
7   <link rel="stylesheet" href="llvm.css" type="text/css">
8 </head>
9 <body>
10
11 <div class="doc_title">
12   Getting Started with the LLVM System  
13 </div>
14
15 <ul>
16   <li><a href="#overview">Overview</a>
17   <li><a href="#quickstart">Getting Started Quickly (A Summary)</a>
18   <li><a href="#requirements">Requirements</a>
19     <ol>
20       <li><a href="#hardware">Hardware</a></li>
21       <li><a href="#software">Software</a></li>
22       <li><a href="#brokengcc">Broken versions of GCC and other tools</a></li>
23     </ol></li>
24
25   <li><a href="#starting">Getting Started with LLVM</a>
26     <ol>
27       <li><a href="#terminology">Terminology and Notation</a></li>
28       <li><a href="#environment">Setting Up Your Environment</a></li>
29       <li><a href="#unpack">Unpacking the LLVM Archives</a></li>
30       <li><a href="#checkout">Checkout LLVM from Subversion</a></li>
31       <li><a href="#installcf">Install the GCC Front End</a></li>
32       <li><a href="#config">Local LLVM Configuration</a></li>
33       <li><a href="#compile">Compiling the LLVM Suite Source Code</a></li>
34       <li><a href="#cross-compile">Cross-Compiling LLVM</a></li>
35       <li><a href="#objfiles">The Location of LLVM Object Files</a></li>
36       <li><a href="#optionalconfig">Optional Configuration Items</a></li>
37     </ol></li>
38
39   <li><a href="#layout">Program layout</a>
40     <ol>
41       <li><a href="#examples"><tt>llvm/examples</tt></a></li>
42       <li><a href="#include"><tt>llvm/include</tt></a></li>
43       <li><a href="#lib"><tt>llvm/lib</tt></a></li>
44       <li><a href="#projects"><tt>llvm/projects</tt></a></li>
45       <li><a href="#runtime"><tt>llvm/runtime</tt></a></li>
46       <li><a href="#test"><tt>llvm/test</tt></a></li>
47       <li><a href="#test-suite"><tt>test-suite</tt></a></li>
48       <li><a href="#tools"><tt>llvm/tools</tt></a></li>
49       <li><a href="#utils"><tt>llvm/utils</tt></a></li>
50     </ol></li>
51
52   <li><a href="#tutorial">An Example Using the LLVM Tool Chain</a>
53       <ol>
54          <li><a href="#tutorial4">Example with llvm-gcc4</a></li>
55       </ol>
56   <li><a href="#problems">Common Problems</a>
57   <li><a href="#links">Links</a>
58 </ul>
59
60 <div class="doc_author">
61   <p>Written by: 
62     <a href="mailto:criswell@uiuc.edu">John Criswell</a>, 
63     <a href="mailto:sabre@nondot.org">Chris Lattner</a>,
64     <a href="http://misha.brukman.net">Misha Brukman</a>, 
65     <a href="http://www.cs.uiuc.edu/~vadve">Vikram Adve</a>, and
66     <a href="mailto:gshi1@uiuc.edu">Guochun Shi</a>.
67   </p>
68 </div>
69
70
71 <!-- *********************************************************************** -->
72 <div class="doc_section">
73   <a name="overview"><b>Overview</b></a>
74 </div>
75 <!-- *********************************************************************** -->
76
77 <div class="doc_text">
78
79 <p>Welcome to LLVM! In order to get started, you first need to know some
80 basic information.</p>
81
82 <p>First, LLVM comes in three pieces. The first piece is the LLVM
83 suite. This contains all of the tools, libraries, and header files
84 needed to use the low level virtual machine.  It contains an
85 assembler, disassembler, bitcode analyzer and bitcode optimizer.  It
86 also contains basic regression tests that can be used to test the LLVM
87 tools and the GCC front end.</p>
88
89 <p>The second piece is the GCC front end.  This component provides a version of
90 GCC that compiles C and C++ code into LLVM bitcode.  Currently, the GCC front
91 end uses the GCC parser to convert code to LLVM.  Once
92 compiled into LLVM bitcode, a program can be manipulated with the LLVM tools
93 from the LLVM suite.</p>
94
95 <p>
96 There is a third, optional piece called Test Suite.  It is a suite of programs
97 with a testing harness that can be used to further test LLVM's functionality
98 and performance.
99 </p>
100
101 </div>
102
103 <!-- *********************************************************************** -->
104 <div class="doc_section">
105   <a name="quickstart"><b>Getting Started Quickly (A Summary)</b></a>
106 </div>
107 <!-- *********************************************************************** -->
108
109 <div class="doc_text">
110
111 <p>Here's the short story for getting up and running quickly with LLVM:</p>
112
113 <ol>
114   <li>Read the documentation.</li>
115   <li>Read the documentation.</li>
116   <li>Remember that you were warned twice about reading the documentation.</li>
117   <li>Install the llvm-gcc-4.2 front end if you intend to compile C or C++
118       (see <a href="#installcf">Install the GCC Front End</a> for details):</li>
119     <ol>
120       <li><tt>cd <i>where-you-want-the-C-front-end-to-live</i></tt></li>
121       <li><tt>gunzip --stdout llvm-gcc-4.2-<i>version</i>-<i>platform</i>.tar.gz | tar -xvf -</tt></li>
122           <li><tt><i>install-binutils-binary-from-MinGW</i></tt> (Windows only)</li>
123           <li>Note: If the binary extension is "<tt>.bz</tt>" use <tt>bunzip2</tt> instead of <tt>gunzip</tt>.</li>
124           <li>Note: On Windows, use <a href="http://www.7-zip.org">7-Zip</a> or a similar archiving tool.</li>
125           <li>Add <tt>llvm-gcc</tt>'s "<tt>bin</tt>" directory to your <tt>PATH</tt> environment variable.</li>
126     </ol></li>
127
128   <li>Get the LLVM Source Code
129   <ul>
130     <li>With the distributed files (or use <a href="#checkout">SVN</a>):
131     <ol>
132       <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
133       <li><tt>gunzip --stdout llvm-<i>version</i>.tar.gz | tar -xvf -</tt>
134     </ol></li>
135
136   </ul></li>
137
138   <li><b>[Optional]</b> Get the Test Suite Source Code 
139   <ul>
140     <li>With the distributed files (or use <a href="#checkout">SVN</a>):
141     <ol>
142       <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
143       <li><tt>cd llvm/projects</tt>
144       <li><tt>gunzip --stdout llvm-test-<i>version</i>.tar.gz | tar -xvf -</tt>
145       <li><tt>mv llvm-test-<i>version</i> test-suite</tt>
146     </ol></li>
147
148   </ul></li>
149
150
151   <li>Configure the LLVM Build Environment
152   <ol>
153     <li><tt>cd <i>where-you-want-to-build-llvm</i></tt></li>
154     <li><tt><i>/path/to/llvm/</i>configure [options]</tt><br>
155     Some common options:
156
157       <ul>
158         <li><tt>--prefix=<i>directory</i></tt>
159         <p>Specify for <i>directory</i> the full pathname of where you
160         want the LLVM tools and libraries to be installed (default
161         <tt>/usr/local</tt>).</p></li>
162         <li><tt>--with-llvmgccdir=<i>directory</i></tt>
163         <p>Optionally, specify for <i>directory</i> the full pathname of the 
164         C/C++ front end installation to use with this LLVM configuration. If
165         not specified, the PATH will be searched.  This is only needed if you
166         want to run test-suite or do some special kinds of LLVM builds.</p></li>
167         <li><tt>--enable-spec2000=<i>directory</i></tt>
168             <p>Enable the SPEC2000 benchmarks for testing.  The SPEC2000
169             benchmarks should be available in
170             <tt><i>directory</i></tt>.</p></li>
171       </ul>
172   </ol></li>
173
174   <li>Build the LLVM Suite:
175   <ol>
176       <li><tt>gmake -k |&amp; tee gnumake.out
177       &nbsp;&nbsp;&nbsp;# this is csh or tcsh syntax</tt></li>
178       <li>If you get an "internal compiler error (ICE)" or test failures, see 
179           <a href="#brokengcc">below</a>.</li>
180   </ol>
181
182 </ol>
183
184 <p>Consult the <a href="#starting">Getting Started with LLVM</a> section for
185 detailed information on configuring and compiling LLVM.  See <a
186 href="#environment">Setting Up Your Environment</a> for tips that simplify
187 working with the GCC front end and LLVM tools.  Go to <a href="#layout">Program
188 Layout</a> to learn about the layout of the source code tree.</p>
189
190 </div>
191
192 <!-- *********************************************************************** -->
193 <div class="doc_section">
194   <a name="requirements"><b>Requirements</b></a>
195 </div>
196 <!-- *********************************************************************** -->
197
198 <div class="doc_text">
199
200 <p>Before you begin to use the LLVM system, review the requirements given below.
201 This may save you some trouble by knowing ahead of time what hardware and
202 software you will need.</p>
203
204 </div>
205
206 <!-- ======================================================================= -->
207 <div class="doc_subsection">
208   <a name="hardware"><b>Hardware</b></a>
209 </div>
210
211 <div class="doc_text">
212
213 <p>LLVM is known to work on the following platforms:</p>
214
215 <table cellpadding="3" summary="Known LLVM platforms">
216 <tr>
217   <th>OS</th>
218   <th>Arch</th>
219   <th>Compilers</th>
220 </tr>
221 <tr>
222   <td>AuroraUX</td>
223   <td>x86<sup><a href="#pf_1">1</a></sup></td>
224   <td>GCC</td>
225 </tr>
226 <tr>
227   <td>Linux</td>
228   <td>x86<sup><a href="#pf_1">1</a></sup></td>
229   <td>GCC</td>
230 </tr>
231 <tr>
232   <td>Linux</td>
233   <td>amd64</td>
234   <td>GCC</td>
235 </tr>
236 <tr>
237   <td>Solaris</td>
238   <td>V9 (Ultrasparc)</td>
239   <td>GCC</td>
240 </tr>
241 <tr>
242   <td>FreeBSD</td>
243   <td>x86<sup><a href="#pf_1">1</a></sup></td>
244   <td>GCC</td>
245 </tr>
246 <tr>
247   <td>MacOS X<sup><a href="#pf_2">2</a></sup></td>
248   <td>PowerPC</td>
249   <td>GCC</td>
250 </tr>
251 <tr>
252   <td>MacOS X<sup><a href="#pf_2">2</a>,<a href="#pf_9">9</a></sup></td>
253   <td>x86</td>
254   <td>GCC</td>
255 </tr>
256 <tr>
257   <td>Cygwin/Win32</td>
258   <td>x86<sup><a href="#pf_1">1</a>,<a href="#pf_8">8</a>,
259      <a href="#pf_11">11</a></sup></td>
260   <td>GCC 3.4.X, binutils 2.20</td>
261 </tr>
262 <tr>
263   <td>MinGW/Win32</td>
264   <td>x86<sup><a href="#pf_1">1</a>,<a href="#pf_6">6</a>,
265      <a href="#pf_8">8</a>, <a href="#pf_10">10</a></sup></td>
266   <td>GCC 3.4.X, binutils 2.20</td>
267 </tr>
268 </table>
269
270 <p>LLVM has partial support for the following platforms:</p>
271
272 <table summary="LLVM partial platform support">
273 <tr>
274   <th>OS</th>
275   <th>Arch</th>
276   <th>Compilers</th>
277 </tr>
278 <tr>
279   <td>Windows</td>
280   <td>x86<sup><a href="#pf_1">1</a></sup></td>
281   <td>Visual Studio 2005 SP1 or higher<sup><a href="#pf_4">4</a>,<a href="#pf_5">5</a></sup></td>
282 <tr>
283   <td>AIX<sup><a href="#pf_3">3</a>,<a href="#pf_4">4</a></sup></td>
284   <td>PowerPC</td>
285   <td>GCC</td>
286 </tr>
287 <tr>
288   <td>Linux<sup><a href="#pf_3">3</a>,<a href="#pf_5">5</a></sup></td>
289   <td>PowerPC</td>
290   <td>GCC</td>
291 </tr>
292
293 <tr>
294   <td>Linux<sup><a href="#pf_7">7</a></sup></td>
295   <td>Alpha</td>
296   <td>GCC</td>
297 </tr>
298 <tr>
299   <td>Linux<sup><a href="#pf_7">7</a></sup></td>
300   <td>Itanium (IA-64)</td>
301   <td>GCC</td>
302 </tr>
303 <tr>
304   <td>HP-UX<sup><a href="#pf_7">7</a></sup></td>
305   <td>Itanium (IA-64)</td>
306   <td>HP aCC</td>
307 </tr>
308 </table>
309
310 <p><b>Notes:</b></p>
311
312 <div class="doc_notes">
313 <ol>
314 <li><a name="pf_1">Code generation supported for Pentium processors and
315 up</a></li>
316 <li><a name="pf_2">Code generation supported for 32-bit ABI only</a></li>
317 <li><a name="pf_3">No native code generation</a></li>
318 <li><a name="pf_4">Build is not complete: one or more tools do not link or function</a></li>
319 <li><a name="pf_5">The GCC-based C/C++ frontend does not build</a></li>
320 <li><a name="pf_6">The port is done using the MSYS shell.</a></li>
321 <li><a name="pf_7">Native code generation exists but is not complete.</a></li>
322 <li><a name="pf_8">Binutils 2.20 or later is required to build the assembler
323     generated by LLVM properly.</a></li>
324 <li><a name="pf_9">XCode 2.5 and gcc 4.0.1</a> (Apple Build 5370) will trip
325     internal LLVM assert messages when compiled for Release at optimization
326     levels greater than 0 (i.e., <i>"-O1"</i> and higher).
327     Add <i>OPTIMIZE_OPTION="-O0"</i> to the build command line
328     if compiling for LLVM Release or bootstrapping the LLVM toolchain.</li>
329 <li><a name="pf_10">For MSYS/MinGW on Windows, be sure to install the MSYS
330     version of the perl package, and be sure it appears in your path
331     before any Windows-based versions such as Strawberry Perl and
332     ActivePerl, as these have Windows-specifics that will cause the
333     build to fail.</a></li>
334 <li><a name="pf_11">In general, LLVM modules requiring dynamic linking can
335     not be built on Windows. However, you can build LLVM tools using
336     <i>"make tools-only"</i>.</li>
337 </ol>
338 </div>
339
340 <p>Note that you will need about 1-3 GB of space for a full LLVM build in Debug
341 mode, depending on the system (it is so large because of all the debugging
342 information and the fact that the libraries are statically linked into multiple
343 tools).  If you do not need many of the tools and you are space-conscious, you
344 can pass <tt>ONLY_TOOLS="tools you need"</tt> to make.  The Release build
345 requires considerably less space.</p>
346
347 <p>The LLVM suite <i>may</i> compile on other platforms, but it is not
348 guaranteed to do so.  If compilation is successful, the LLVM utilities should be
349 able to assemble, disassemble, analyze, and optimize LLVM bitcode.  Code
350 generation should work as well, although the generated native code may not work
351 on your platform.</p>
352
353 <p>The GCC front end is not very portable at the moment.  If you want to get it
354 to work on another platform, you can download a copy of the source and <a
355 href="GCCFEBuildInstrs.html">try to compile it</a> on your platform.</p>
356
357 </div>
358
359 <!-- ======================================================================= -->
360 <div class="doc_subsection"><a name="software"><b>Software</b></a></div>
361 <div class="doc_text">
362   <p>Compiling LLVM requires that you have several software packages 
363   installed. The table below lists those required packages. The Package column
364   is the usual name for the software package that LLVM depends on. The Version
365   column provides "known to work" versions of the package. The Notes column
366   describes how LLVM uses the package and provides other details.</p>
367   <table summary="Packages required to compile LLVM">
368     <tr><th>Package</th><th>Version</th><th>Notes</th></tr>
369
370     <tr>
371       <td><a href="http://savannah.gnu.org/projects/make">GNU Make</a></td>
372       <td>3.79, 3.79.1</td>
373       <td>Makefile/build processor</td>
374     </tr>
375
376     <tr>
377       <td><a href="http://gcc.gnu.org">GCC</a></td>
378       <td>3.4.2</td>
379       <td>C/C++ compiler<sup><a href="#sf1">1</a></sup></td>
380     </tr>
381
382     <tr>
383       <td><a href="http://www.gnu.org/software/texinfo">TeXinfo</a></td>
384       <td>4.5</td>
385       <td>For building the CFE</td>
386     </tr>
387
388     <tr>
389       <td><a href="http://subversion.tigris.org/project_packages.html">SVN</a></td>
390       <td>&ge;1.3</td>
391       <td>Subversion access to LLVM<sup><a href="#sf2">2</a></sup></td>
392     </tr>
393
394     <tr>
395       <td><a href="http://savannah.gnu.org/projects/dejagnu">DejaGnu</a></td>
396       <td>1.4.2</td>
397       <td>Automated test suite<sup><a href="#sf3">3</a></sup></td>
398     </tr>
399
400     <tr>
401       <td><a href="http://www.tcl.tk/software/tcltk/">tcl</a></td>
402       <td>8.3, 8.4</td>
403       <td>Automated test suite<sup><a href="#sf3">3</a></sup></td>
404     </tr>
405
406     <tr>
407       <td><a href="http://expect.nist.gov/">expect</a></td>
408       <td>5.38.0</td>
409       <td>Automated test suite<sup><a href="#sf3">3</a></sup></td>
410     </tr>
411
412     <tr>
413       <td><a href="http://www.perl.com/download.csp">perl</a></td>
414       <td>&ge;5.6.0</td>
415       <td>Nightly tester, utilities</td>
416     </tr>
417
418     <tr>
419       <td><a href="http://savannah.gnu.org/projects/m4">GNU M4</a>
420       <td>1.4</td>
421       <td>Macro processor for configuration<sup><a href="#sf4">4</a></sup></td>
422     </tr>
423
424     <tr>
425       <td><a href="http://www.gnu.org/software/autoconf">GNU Autoconf</a></td>
426       <td>2.60</td>
427       <td>Configuration script builder<sup><a href="#sf4">4</a></sup></td>
428     </tr>
429
430     <tr>
431       <td><a href="http://www.gnu.org/software/automake">GNU Automake</a></td>
432       <td>1.9.6</td>
433       <td>aclocal macro generator<sup><a href="#sf4">4</a></sup></td>
434     </tr>
435
436     <tr>
437       <td><a href="http://savannah.gnu.org/projects/libtool">libtool</a></td>
438       <td>1.5.22</td>
439       <td>Shared library manager<sup><a href="#sf4">4</a></sup></td>
440     </tr>
441
442   </table>
443
444   <p><b>Notes:</b></p>
445   <div class="doc_notes">
446   <ol>
447     <li><a name="sf1">Only the C and C++ languages are needed so there's no
448       need to build the other languages for LLVM's purposes.</a> See 
449       <a href="#brokengcc">below</a> for specific version info.</li>
450     <li><a name="sf2">You only need Subversion if you intend to build from the 
451       latest LLVM sources. If you're working from a release distribution, you
452       don't need Subversion.</a></li>
453     <li><a name="sf3">Only needed if you want to run the automated test 
454       suite in the <tt>llvm/test</tt> directory.</a></li>
455     <li><a name="sf4">If you want to make changes to the configure scripts, 
456       you will need GNU autoconf (2.60), and consequently, GNU M4 (version 1.4 
457       or higher). You will also need automake (1.9.6). We only use aclocal 
458       from that package.</a></li>
459   </ol>
460   </div>
461   
462   <p>Additionally, your compilation host is expected to have the usual 
463   plethora of Unix utilities. Specifically:</p>
464   <ul>
465     <li><b>ar</b> - archive library builder</li>
466     <li><b>bzip2*</b> - bzip2 command for distribution generation</li>
467     <li><b>bunzip2*</b> - bunzip2 command for distribution checking</li>
468     <li><b>chmod</b> - change permissions on a file</li>
469     <li><b>cat</b> - output concatenation utility</li>
470     <li><b>cp</b> - copy files</li>
471     <li><b>date</b> - print the current date/time </li>
472     <li><b>echo</b> - print to standard output</li>
473     <li><b>egrep</b> - extended regular expression search utility</li>
474     <li><b>find</b> - find files/dirs in a file system</li>
475     <li><b>grep</b> - regular expression search utility</li>
476     <li><b>gzip*</b> - gzip command for distribution generation</li>
477     <li><b>gunzip*</b> - gunzip command for distribution checking</li>
478     <li><b>install</b> - install directories/files </li>
479     <li><b>mkdir</b> - create a directory</li>
480     <li><b>mv</b> - move (rename) files</li>
481     <li><b>ranlib</b> - symbol table builder for archive libraries</li>
482     <li><b>rm</b> - remove (delete) files and directories</li>
483     <li><b>sed</b> - stream editor for transforming output</li>
484     <li><b>sh</b> - Bourne shell for make build scripts</li>
485     <li><b>tar</b> - tape archive for distribution generation</li>
486     <li><b>test</b> - test things in file system</li>
487     <li><b>unzip*</b> - unzip command for distribution checking</li>
488     <li><b>zip*</b> - zip command for distribution generation</li>
489   </ul>
490 </div>
491
492 <!-- ======================================================================= -->
493 <div class="doc_subsection">
494   <a name="brokengcc">Broken versions of GCC and other tools</a>
495 </div>
496
497 <div class="doc_text">
498
499 <p>LLVM is very demanding of the host C++ compiler, and as such tends to expose
500 bugs in the compiler.  In particular, several versions of GCC crash when trying
501 to compile LLVM.  We routinely use GCC 3.3.3, 3.4.0, and Apple 4.0.1 
502 successfully with them (however, see important notes below).  Other versions 
503 of GCC will probably work as well.  GCC versions listed
504 here are known to not work.  If you are using one of these versions, please try
505 to upgrade your GCC to something more recent.  If you run into a problem with a
506 version of GCC not listed here, please <a href="mailto:llvmdev@cs.uiuc.edu">let
507 us know</a>.  Please use the "<tt>gcc -v</tt>" command to find out which version
508 of GCC you are using.
509 </p>
510
511 <p><b>GCC versions prior to 3.0</b>: GCC 2.96.x and before had several
512 problems in the STL that effectively prevent it from compiling LLVM.
513 </p>
514
515 <p><b>GCC 3.2.2 and 3.2.3</b>: These versions of GCC fails to compile LLVM with
516 a bogus template error.  This was fixed in later GCCs.</p>
517
518 <p><b>GCC 3.3.2</b>: This version of GCC suffered from a <a 
519 href="http://gcc.gnu.org/PR13392">serious bug</a> which causes it to crash in
520 the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
521
522 <p><b>Cygwin GCC 3.3.3</b>: The version of GCC 3.3.3 commonly shipped with 
523    Cygwin does not work.  Please <a href="GCCFEBuildInstrs.html#cygwin">upgrade 
524    to a newer version</a> if possible.</p>
525 <p><b>SuSE GCC 3.3.3</b>: The version of GCC 3.3.3 shipped with SuSE 9.1 (and 
526    possibly others) does not compile LLVM correctly (it appears that exception 
527    handling is broken in some cases).  Please download the FSF 3.3.3 or upgrade
528    to a newer version of GCC.</p>
529 <p><b>GCC 3.4.0 on linux/x86 (32-bit)</b>: GCC miscompiles portions of the 
530    code generator, causing an infinite loop in the llvm-gcc build when built
531    with optimizations enabled (i.e. a release build).</p>
532 <p><b>GCC 3.4.2 on linux/x86 (32-bit)</b>: GCC miscompiles portions of the 
533    code generator at -O3, as with 3.4.0.  However gcc 3.4.2 (unlike 3.4.0)
534    correctly compiles LLVM at -O2.  A work around is to build release LLVM
535    builds with "make ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O2 ..."</p>
536 <p><b>GCC 3.4.x on X86-64/amd64</b>: GCC <a href="http://llvm.org/PR1056">
537    miscompiles portions of LLVM</a>.</p>
538 <p><b>GCC 3.4.4 (CodeSourcery ARM 2005q3-2)</b>: this compiler miscompiles LLVM
539    when building with optimizations enabled.  It appears to work with 
540    "<tt>make ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O1</tt>" or build a debug
541    build.</p>
542 <p><b>IA-64 GCC 4.0.0</b>: The IA-64 version of GCC 4.0.0 is known to
543    miscompile LLVM.</p>
544 <p><b>Apple Xcode 2.3</b>: GCC crashes when compiling LLVM at -O3 (which is the
545    default with ENABLE_OPTIMIZED=1.  To work around this, build with 
546    "ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O2".</p>
547 <p><b>GCC 4.1.1</b>: GCC fails to build LLVM with template concept check errors
548       compiling some files.  At the time of this writing, GCC mainline (4.2)
549       did not share the problem.</p>
550 <p><b>GCC 4.1.1 on X86-64/amd64</b>: GCC <a href="http://llvm.org/PR1063">
551    miscompiles portions of LLVM</a> when compiling llvm itself into 64-bit 
552    code.  LLVM will appear to mostly work but will be buggy, e.g. failing 
553    portions of its testsuite.</p>
554 <p><b>GCC 4.1.2 on OpenSUSE</b>: Seg faults during libstdc++ build and on x86_64
555 platforms compiling md5.c gets a mangled constant.</p>
556 <p><b>GCC 4.1.2 (20061115 (prerelease) (Debian 4.1.1-21)) on Debian</b>: Appears
557 to miscompile parts of LLVM 2.4. One symptom is ValueSymbolTable complaining
558 about symbols remaining in the table on destruction.</p>
559 <p><b>GCC 4.1.2 20071124 (Red Hat 4.1.2-42)</b>: Suffers from the same symptoms
560 as the previous one. It appears to work with ENABLE_OPTIMIZED=0 (the default).</p>
561 <p><b>Cygwin GCC 4.3.2 20080827 (beta) 2</b>:
562   Users <a href="http://llvm.org/PR4145">reported</a> various problems related
563   with link errors when using this GCC version.</p>
564 <p><b>Debian GCC 4.3.2 on X86</b>: Crashes building some files in LLVM 2.6.</p>
565 <p><b>GCC 4.3.3 (Debian 4.3.3-10) on ARM</b>: Miscompiles parts of LLVM 2.6
566 when optimizations are turned on. The symptom is an infinite loop in
567 FoldingSetImpl::RemoveNode while running the code generator.</p>
568 <p><b>GCC 4.3.5 and GCC 4.4.5 on ARM</b>: These can miscompile <tt>value >>
569 1</tt> even at -O0. A test failure in <tt>test/Assembler/alignstack.ll</tt> is
570 one symptom of the problem.
571 <p><b>GNU ld 2.16.X</b>. Some 2.16.X versions of the ld linker will produce very
572 long warning messages complaining that some ".gnu.linkonce.t.*" symbol was
573 defined in a discarded section. You can safely ignore these messages as they are
574 erroneous and the linkage is correct.  These messages disappear using ld
575 2.17.</p>
576
577 <p><b>GNU binutils 2.17</b>: Binutils 2.17 contains <a 
578 href="http://sourceware.org/bugzilla/show_bug.cgi?id=3111">a bug</a> which
579 causes huge link times (minutes instead of seconds) when building LLVM.  We
580 recommend upgrading to a newer version (2.17.50.0.4 or later).</p>
581
582 <p><b>GNU Binutils 2.19.1 Gold</b>: This version of Gold contained
583 <a href="http://sourceware.org/bugzilla/show_bug.cgi?id=9836">a bug</a>
584 which causes intermittent failures when building LLVM with position independent
585 code.  The symptom is an error about cyclic dependencies.  We recommend
586 upgrading to a newer version of Gold.</p>
587
588 </div>
589
590
591
592 <!-- *********************************************************************** -->
593 <div class="doc_section">
594   <a name="starting"><b>Getting Started with LLVM</b></a>
595 </div>
596 <!-- *********************************************************************** -->
597
598 <div class="doc_text">
599
600 <p>The remainder of this guide is meant to get you up and running with
601 LLVM and to give you some basic information about the LLVM environment.</p>
602
603 <p>The later sections of this guide describe the <a
604 href="#layout">general layout</a> of the the LLVM source tree, a <a
605 href="#tutorial">simple example</a> using the LLVM tool chain, and <a
606 href="#links">links</a> to find more information about LLVM or to get
607 help via e-mail.</p>
608 </div>
609
610 <!-- ======================================================================= -->
611 <div class="doc_subsection">
612   <a name="terminology">Terminology and Notation</a>
613 </div>
614
615 <div class="doc_text">
616
617 <p>Throughout this manual, the following names are used to denote paths
618 specific to the local system and working environment.  <i>These are not
619 environment variables you need to set but just strings used in the rest
620 of this document below</i>.  In any of the examples below, simply replace
621 each of these names with the appropriate pathname on your local system.
622 All these paths are absolute:</p>
623
624 <dl>
625     <dt>SRC_ROOT
626     <dd>
627     This is the top level directory of the LLVM source tree.
628     <br><br>
629
630     <dt>OBJ_ROOT
631     <dd>
632     This is the top level directory of the LLVM object tree (i.e. the
633     tree where object files and compiled programs will be placed.  It
634     can be the same as SRC_ROOT).
635     <br><br>
636
637     <dt>LLVMGCCDIR
638     <dd>
639     This is where the LLVM GCC Front End is installed.
640     <p>
641     For the pre-built GCC front end binaries, the LLVMGCCDIR is
642     <tt>llvm-gcc/<i>platform</i>/llvm-gcc</tt>.
643 </dl>
644
645 </div>
646
647 <!-- ======================================================================= -->
648 <div class="doc_subsection">
649   <a name="environment">Setting Up Your Environment</a>
650 </div>
651
652 <div class="doc_text">
653
654 <p>
655 In order to compile and use LLVM, you may need to set some environment
656 variables.
657
658 <dl>
659   <dt><tt>LLVM_LIB_SEARCH_PATH</tt>=<tt>/path/to/your/bitcode/libs</tt></dt>
660   <dd>[Optional] This environment variable helps LLVM linking tools find the
661   locations of your bitcode libraries. It is provided only as a
662   convenience since you can specify the paths using the -L options of the
663   tools and the C/C++ front-end will automatically use the bitcode files
664   installed in its
665   <tt>lib</tt> directory.</dd>
666 </dl>
667
668 </div>
669
670 <!-- ======================================================================= -->
671 <div class="doc_subsection">
672   <a name="unpack">Unpacking the LLVM Archives</a>
673 </div>
674
675 <div class="doc_text">
676
677 <p>
678 If you have the LLVM distribution, you will need to unpack it before you
679 can begin to compile it.  LLVM is distributed as a set of two files: the LLVM
680 suite and the LLVM GCC front end compiled for your platform.  There is an
681 additional test suite that is optional.  Each file is a TAR archive that is
682 compressed with the gzip program.
683 </p>
684
685 <p>The files are as follows, with <em>x.y</em> marking the version number:
686 <dl>
687   <dt><tt>llvm-x.y.tar.gz</tt></dt>
688   <dd>Source release for the LLVM libraries and tools.<br></dd>
689
690   <dt><tt>llvm-test-x.y.tar.gz</tt></dt>
691   <dd>Source release for the LLVM test-suite.</dd>
692
693   <dt><tt>llvm-gcc-4.2-x.y.source.tar.gz</tt></dt>
694   <dd>Source release of the llvm-gcc-4.2 front end.  See README.LLVM in the root
695       directory for build instructions.<br></dd>
696
697   <dt><tt>llvm-gcc-4.2-x.y-platform.tar.gz</tt></dt>
698   <dd>Binary release of the llvm-gcc-4.2 front end for a specific platform.<br></dd>
699
700 </dl>
701
702 </div>
703
704 <!-- ======================================================================= -->
705 <div class="doc_subsection">
706   <a name="checkout">Checkout LLVM from Subversion</a>
707 </div>
708
709 <div class="doc_text">
710
711 <p>If you have access to our Subversion repository, you can get a fresh copy of
712 the entire source code.  All you need to do is check it out from Subversion as
713 follows:</p>
714
715 <ul>
716   <li><tt>cd <i>where-you-want-llvm-to-live</i></tt></li>
717   <li>Read-Only: <tt>svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm</tt></li>
718   <li>Read-Write:<tt>svn co https://user@llvm.org/svn/llvm-project/llvm/trunk
719     llvm</tt></li>
720 </ul>
721
722
723 <p>This will create an '<tt>llvm</tt>' directory in the current
724 directory and fully populate it with the LLVM source code, Makefiles,
725 test directories, and local copies of documentation files.</p>
726
727 <p>If you want to get a specific release (as opposed to the most recent
728 revision), you can checkout it from the '<tt>tags</tt>' directory (instead of
729 '<tt>trunk</tt>'). The following releases are located in the following
730 subdirectories of the '<tt>tags</tt>' directory:</p>
731
732 <ul>
733 <li>Release 2.8: <b>RELEASE_28</b></li>
734 <li>Release 2.7: <b>RELEASE_27</b></li>
735 <li>Release 2.6: <b>RELEASE_26</b></li>
736 <li>Release 2.5: <b>RELEASE_25</b></li>
737 <li>Release 2.4: <b>RELEASE_24</b></li>
738 <li>Release 2.3: <b>RELEASE_23</b></li>
739 <li>Release 2.2: <b>RELEASE_22</b></li>
740 <li>Release 2.1: <b>RELEASE_21</b></li>
741 <li>Release 2.0: <b>RELEASE_20</b></li>
742 <li>Release 1.9: <b>RELEASE_19</b></li>
743 <li>Release 1.8: <b>RELEASE_18</b></li>
744 <li>Release 1.7: <b>RELEASE_17</b></li>
745 <li>Release 1.6: <b>RELEASE_16</b></li>
746 <li>Release 1.5: <b>RELEASE_15</b></li>
747 <li>Release 1.4: <b>RELEASE_14</b></li>
748 <li>Release 1.3: <b>RELEASE_13</b></li>
749 <li>Release 1.2: <b>RELEASE_12</b></li>
750 <li>Release 1.1: <b>RELEASE_11</b></li>
751 <li>Release 1.0: <b>RELEASE_1</b></li>
752 </ul>
753
754 <p>If you would like to get the LLVM test suite (a separate package as of 1.4),
755 you get it from the Subversion repository:</p>
756
757 <div class="doc_code">
758 <pre>
759 % cd llvm/projects
760 % svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite
761 </pre>
762 </div>
763
764 <p>By placing it in the <tt>llvm/projects</tt>, it will be automatically
765 configured by the LLVM configure script as well as automatically updated when
766 you run <tt>svn update</tt>.</p>
767
768 <p>If you would like to get the GCC front end source code, you can also get it 
769 and build it yourself.  Please follow <a href="GCCFEBuildInstrs.html">these 
770 instructions</a> to successfully get and build the LLVM GCC front-end.</p>
771
772 </div>
773
774 <!-- ======================================================================= -->
775 <div class="doc_subsection">
776   <a name="installcf">Install the GCC Front End</a>
777 </div>
778
779 <div class="doc_text">
780
781 <p>Before configuring and compiling the LLVM suite (or if you want to use just the LLVM
782 GCC front end) you can optionally extract the front end from the binary distribution.
783 It is used for running the LLVM test-suite and for compiling C/C++ programs.  Note that
784 you can optionally <a href="GCCFEBuildInstrs.html">build llvm-gcc yourself</a> after building the
785 main LLVM repository.</p>
786
787 <p>To install the GCC front end, do the following (on Windows, use an archival tool
788 like <a href="http://www.7-zip.org">7-zip</a> that understands gzipped tars):</p>
789
790 <ol>
791   <li><tt>cd <i>where-you-want-the-front-end-to-live</i></tt></li>
792   <li><tt>gunzip --stdout llvm-gcc-4.2-<i>version</i>-<i>platform</i>.tar.gz | tar -xvf
793       -</tt></li>
794 </ol>
795
796 <p>Once the binary is uncompressed, if you're using a *nix-based system, add a symlink for
797 <tt>llvm-gcc</tt> and <tt>llvm-g++</tt> to some directory in your path.  If you're using a
798 Windows-based system, add the <tt>bin</tt> subdirectory of your front end installation directory
799 to your <tt>PATH</tt> environment variable.  For example, if you uncompressed the binary to
800 <tt>c:\llvm-gcc</tt>, add <tt>c:\llvm-gcc\bin</tt> to your <tt>PATH</tt>.</p>
801
802 <p>If you now want to build LLVM from source, when you configure LLVM, it will 
803 automatically detect <tt>llvm-gcc</tt>'s presence (if it is in your path) enabling its
804 use in test-suite.  Note that you can always build or install <tt>llvm-gcc</tt> at any
805 point after building the main LLVM repository: just reconfigure llvm and 
806 test-suite will pick it up.
807 </p>
808
809 <p>As a convenience for Windows users, the front end binaries for MinGW/x86 include
810 versions of the required w32api and mingw-runtime binaries.  The last remaining step for
811 Windows users is to simply uncompress the binary binutils package from
812 <a href="http://mingw.org/">MinGW</a> into your front end installation directory.  While the
813 front end installation steps are not quite the same as a typical manual MinGW installation,
814 they should be similar enough to those who have previously installed MinGW on Windows systems.</p>
815
816 <p>To install binutils on Windows:</p>
817
818 <ol>
819   <li><tt><i>download GNU Binutils from <a href="http://sourceforge.net/projects/mingw/files/">MinGW Downloads</a></i></tt></li>
820   <li><tt>cd <i>where-you-uncompressed-the-front-end</i></tt></li>
821   <li><tt><i>uncompress archived binutils directories (not the tar file) into the current directory</i></tt></li>
822 </ol>
823
824 <p>The binary versions of the LLVM GCC front end may not suit all of your needs.  For
825 example, the binary distribution may include an old version of a system header
826 file, not "fix" a header file that needs to be fixed for GCC, or it may be linked with
827 libraries not available on your system.  In cases like these, you may want to try
828 <a href="GCCFEBuildInstrs.html">building the GCC front end from source</a>.  Thankfully,
829 this is much easier now than it was in the past.</p>
830
831 <p>We also do not currently support updating of the GCC front end by manually overlaying
832 newer versions of the w32api and mingw-runtime binary packages that may become available
833 from MinGW.  At this time, it's best to think of the MinGW LLVM GCC front end binary as
834 a self-contained convenience package that requires Windows users to simply download and
835 uncompress the GNU Binutils binary package from the MinGW project.</p>
836
837 <p>Regardless of your platform, if you discover that installing the LLVM GCC front end
838 binaries is not as easy as previously described, or you would like to suggest improvements,
839 please let us know how you would like to see things improved by dropping us a note on our
840 <a href="http://llvm.org/docs/#maillist">mailing list</a>.</p>
841
842 </div>
843
844 <!-- ======================================================================= -->
845 <div class="doc_subsection">
846   <a name="config">Local LLVM Configuration</a>
847 </div>
848
849 <div class="doc_text">
850
851   <p>Once checked out from the Subversion repository, the LLVM suite source 
852   code must be
853 configured via the <tt>configure</tt> script.  This script sets variables in the
854 various <tt>*.in</tt> files, most notably <tt>llvm/Makefile.config</tt> and 
855 <tt>llvm/include/Config/config.h</tt>.  It also populates <i>OBJ_ROOT</i> with 
856 the Makefiles needed to begin building LLVM.</p>
857
858 <p>The following environment variables are used by the <tt>configure</tt>
859 script to configure the build system:</p>
860
861 <table summary="LLVM configure script environment variables">
862   <tr><th>Variable</th><th>Purpose</th></tr>
863   <tr>
864     <td>CC</td>
865     <td>Tells <tt>configure</tt> which C compiler to use.  By default,
866         <tt>configure</tt> will look for the first GCC C compiler in
867         <tt>PATH</tt>.  Use this variable to override
868         <tt>configure</tt>'s default behavior.</td>
869   </tr>
870   <tr>
871     <td>CXX</td>
872     <td>Tells <tt>configure</tt> which C++ compiler to use.  By default,
873        <tt>configure</tt> will look for the first GCC C++ compiler in
874        <tt>PATH</tt>.  Use this variable to override
875        <tt>configure</tt>'s default behavior.</td>
876   </tr>
877 </table>
878
879 <p>The following options can be used to set or enable LLVM specific options:</p>
880
881 <dl>
882   <dt><i>--with-llvmgccdir</i></dt>
883   <dd>Path to the LLVM C/C++ FrontEnd to be used with this LLVM configuration. 
884   The value of this option should specify the full pathname of the C/C++ Front
885   End to be used. If this option is not provided, the PATH will be searched for
886   a program named <i>llvm-gcc</i> and the C/C++ FrontEnd install directory will
887   be inferred from the path found. If the option is not given, and no llvm-gcc
888   can be found in the path then a warning will be produced by 
889   <tt>configure</tt> indicating this situation. LLVM may still be built with 
890   the <tt>tools-only</tt> target but attempting to build the runtime libraries
891   will fail as these libraries require llvm-gcc and llvm-g++. See 
892   <a href="#installcf">Install the GCC Front End</a> for details on installing
893   the C/C++ Front End. See
894   <a href="GCCFEBuildInstrs.html">Bootstrapping the LLVM C/C++ Front-End</a>
895   for details on building the C/C++ Front End.</dd>
896   <dt><i>--with-tclinclude</i></dt>
897   <dd>Path to the tcl include directory under which <tt>tclsh</tt> can be
898   found. Use this if you have multiple tcl installations on your machine and you
899   want to use a specific one (8.x) for LLVM. LLVM only uses tcl for running the
900   dejagnu based test suite in <tt>llvm/test</tt>. If you don't specify this
901   option, the LLVM configure script will search for the tcl 8.4 and 8.3
902   releases.
903   <br><br>
904   </dd>
905   <dt><i>--enable-optimized</i></dt>
906   <dd>
907     Enables optimized compilation (debugging symbols are removed
908     and GCC optimization flags are enabled). Note that this is the default 
909     setting     if you are using the LLVM distribution. The default behavior 
910     of an Subversion checkout is to use an unoptimized build (also known as a 
911     debug build).
912     <br><br>
913   </dd>
914   <dt><i>--enable-debug-runtime</i></dt>
915   <dd>
916     Enables debug symbols in the runtime libraries. The default is to strip
917     debug symbols from the runtime libraries. 
918   </dd>
919   <dt><i>--enable-jit</i></dt>
920   <dd>
921     Compile the Just In Time (JIT) compiler functionality.  This is not
922     available
923     on all platforms.  The default is dependent on platform, so it is best
924     to explicitly enable it if you want it.
925     <br><br>
926   </dd>
927   <dt><i>--enable-targets=</i><tt>target-option</tt></dt>
928   <dd>Controls which targets will be built and linked into llc. The default 
929   value for <tt>target_options</tt> is "all" which builds and links all 
930   available targets.  The value "host-only" can be specified to build only a 
931   native compiler (no cross-compiler targets available). The "native" target is 
932   selected as the target of the build host. You can also specify a comma 
933   separated list of target names that you want available in llc. The target 
934   names use all lower case. The current set of targets is: <br>
935   <tt>alpha, ia64, powerpc, skeleton, sparc, x86</tt>.
936   <br><br></dd>
937   <dt><i>--enable-doxygen</i></dt>
938   <dd>Look for the doxygen program and enable construction of doxygen based
939   documentation from the source code. This is disabled by default because 
940   generating the documentation can take a long time and producess 100s of 
941   megabytes of output.</dd>
942   <dt><i>--with-udis86</i></dt>
943   <dd>LLVM can use external disassembler library for various purposes (now it's
944   used only for examining code produced by JIT). This option will enable usage
945   of <a href="http://udis86.sourceforge.net/">udis86</a> x86 (both 32 and 64
946   bits) disassembler library.</dd>
947 </dl>
948
949 <p>To configure LLVM, follow these steps:</p>
950
951 <ol>
952     <li><p>Change directory into the object root directory:</p>
953
954     <div class="doc_code"><pre>% cd <i>OBJ_ROOT</i></pre></div></li>
955
956     <li><p>Run the <tt>configure</tt> script located in the LLVM source
957     tree:</p>
958
959     <div class="doc_code">
960     <pre>% <i>SRC_ROOT</i>/configure --prefix=/install/path [other options]</pre>
961     </div></li>
962 </ol>
963
964 </div>
965
966 <!-- ======================================================================= -->
967 <div class="doc_subsection">
968   <a name="compile">Compiling the LLVM Suite Source Code</a>
969 </div>
970
971 <div class="doc_text">
972
973 <p>Once you have configured LLVM, you can build it.  There are three types of
974 builds:</p>
975
976 <dl>
977     <dt>Debug Builds
978     <dd>
979     These builds are the default when one is using an Subversion checkout and 
980     types <tt>gmake</tt> (unless the <tt>--enable-optimized</tt> option was 
981     used during configuration).  The build system will compile the tools and 
982     libraries with debugging information.  To get a Debug Build using the
983     LLVM distribution the <tt>--disable-optimized</tt> option must be passed
984     to <tt>configure</tt>.
985     <br><br>
986
987     <dt>Release (Optimized) Builds
988     <dd>
989     These builds are enabled with the <tt>--enable-optimized</tt> option to
990     <tt>configure</tt> or by specifying <tt>ENABLE_OPTIMIZED=1</tt> on the
991     <tt>gmake</tt> command line.  For these builds, the build system will
992     compile the tools and libraries with GCC optimizations enabled and strip
993     debugging information from the libraries and executables it generates. 
994     Note that Release Builds are default when using an LLVM distribution.
995     <br><br>
996
997     <dt>Profile Builds
998     <dd>
999     These builds are for use with profiling.  They compile profiling
1000     information into the code for use with programs like <tt>gprof</tt>.
1001     Profile builds must be started by specifying <tt>ENABLE_PROFILING=1</tt>
1002     on the <tt>gmake</tt> command line.
1003 </dl>
1004
1005 <p>Once you have LLVM configured, you can build it by entering the
1006 <i>OBJ_ROOT</i> directory and issuing the following command:</p>
1007
1008 <div class="doc_code"><pre>% gmake</pre></div>
1009
1010 <p>If the build fails, please <a href="#brokengcc">check here</a> to see if you
1011 are using a version of GCC that is known not to compile LLVM.</p>
1012
1013 <p>
1014 If you have multiple processors in your machine, you may wish to use some of
1015 the parallel build options provided by GNU Make.  For example, you could use the
1016 command:</p>
1017
1018 <div class="doc_code"><pre>% gmake -j2</pre></div>
1019
1020 <p>There are several special targets which are useful when working with the LLVM
1021 source code:</p>
1022
1023 <dl>
1024   <dt><tt>gmake clean</tt>
1025   <dd>
1026   Removes all files generated by the build.  This includes object files,
1027   generated C/C++ files, libraries, and executables.
1028   <br><br>
1029
1030   <dt><tt>gmake dist-clean</tt>
1031   <dd>
1032   Removes everything that <tt>gmake clean</tt> does, but also removes files
1033   generated by <tt>configure</tt>.  It attempts to return the source tree to the
1034   original state in which it was shipped.
1035   <br><br>
1036
1037   <dt><tt>gmake install</tt>
1038   <dd>
1039   Installs LLVM header files, libraries, tools, and documentation in a
1040   hierarchy 
1041   under $PREFIX, specified with <tt>./configure --prefix=[dir]</tt>, which 
1042   defaults to <tt>/usr/local</tt>.
1043   <br><br>
1044
1045   <dt><tt>gmake -C runtime install-bytecode</tt>
1046   <dd>
1047   Assuming you built LLVM into $OBJDIR, when this command is run, it will 
1048   install bitcode libraries into the GCC front end's bitcode library 
1049   directory.  If you need to update your bitcode libraries,
1050   this is the target to use once you've built them.
1051   <br><br>
1052 </dl>
1053
1054 <p>Please see the <a href="MakefileGuide.html">Makefile Guide</a> for further
1055 details on these <tt>make</tt> targets and descriptions of other targets
1056 available.</p>
1057
1058 <p>It is also possible to override default values from <tt>configure</tt> by
1059 declaring variables on the command line.  The following are some examples:</p>
1060
1061 <dl>
1062   <dt><tt>gmake ENABLE_OPTIMIZED=1</tt>
1063   <dd>
1064   Perform a Release (Optimized) build.
1065   <br><br>
1066
1067   <dt><tt>gmake ENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1</tt>
1068   <dd>
1069   Perform a Release (Optimized) build without assertions enabled.
1070   <br><br>
1071  
1072   <dt><tt>gmake ENABLE_OPTIMIZED=0</tt>
1073   <dd>
1074   Perform a Debug build.
1075   <br><br>
1076
1077   <dt><tt>gmake ENABLE_PROFILING=1</tt>
1078   <dd>
1079   Perform a Profiling build.
1080   <br><br>
1081
1082   <dt><tt>gmake VERBOSE=1</tt>
1083   <dd>
1084   Print what <tt>gmake</tt> is doing on standard output.
1085   <br><br>
1086
1087   <dt><tt>gmake TOOL_VERBOSE=1</tt></dt>
1088   <dd>Ask each tool invoked by the makefiles to print out what it is doing on 
1089   the standard output. This also implies <tt>VERBOSE=1</tt>.
1090   <br><br></dd>
1091 </dl>
1092
1093 <p>Every directory in the LLVM object tree includes a <tt>Makefile</tt> to build
1094 it and any subdirectories that it contains.  Entering any directory inside the
1095 LLVM object tree and typing <tt>gmake</tt> should rebuild anything in or below
1096 that directory that is out of date.</p>
1097
1098 </div>
1099
1100 <!-- ======================================================================= -->
1101 <div class="doc_subsection">
1102   <a name="cross-compile">Cross-Compiling LLVM</a>
1103 </div>
1104
1105 <div class="doc_text">
1106   <p>It is possible to cross-compile LLVM itself. That is, you can create LLVM
1107   executables and libraries to be hosted on a platform different from the
1108   platform where they are build (a Canadian Cross build). To configure a
1109   cross-compile, supply the configure script with <tt>--build</tt> and
1110   <tt>--host</tt> options that are different. The values of these options must
1111   be legal target triples that your GCC compiler supports.</p>
1112
1113   <p>The result of such a build is executables that are not runnable on
1114   on the build host (--build option) but can be executed on the compile host
1115   (--host option).</p>
1116 </div>
1117
1118 <!-- ======================================================================= -->
1119 <div class="doc_subsection">
1120   <a name="objfiles">The Location of LLVM Object Files</a>
1121 </div>
1122
1123 <div class="doc_text">
1124
1125 <p>The LLVM build system is capable of sharing a single LLVM source tree among
1126 several LLVM builds.  Hence, it is possible to build LLVM for several different
1127 platforms or configurations using the same source tree.</p>
1128
1129 <p>This is accomplished in the typical autoconf manner:</p>
1130
1131 <ul>
1132   <li><p>Change directory to where the LLVM object files should live:</p>
1133
1134       <div class="doc_code"><pre>% cd <i>OBJ_ROOT</i></pre></div></li>
1135
1136   <li><p>Run the <tt>configure</tt> script found in the LLVM source
1137       directory:</p>
1138
1139       <div class="doc_code"><pre>% <i>SRC_ROOT</i>/configure</pre></div></li>
1140 </ul>
1141
1142 <p>The LLVM build will place files underneath <i>OBJ_ROOT</i> in directories
1143 named after the build type:</p>
1144
1145 <dl>
1146   <dt>Debug Builds with assertions enabled (the default)
1147   <dd>
1148   <dl>
1149     <dt>Tools
1150     <dd><tt><i>OBJ_ROOT</i>/Debug+Asserts/bin</tt>
1151     <dt>Libraries
1152     <dd><tt><i>OBJ_ROOT</i>/Debug+Asserts/lib</tt>
1153   </dl>
1154   <br><br>
1155
1156   <dt>Release Builds
1157   <dd>
1158   <dl>
1159     <dt>Tools
1160     <dd><tt><i>OBJ_ROOT</i>/Release/bin</tt>
1161     <dt>Libraries
1162     <dd><tt><i>OBJ_ROOT</i>/Release/lib</tt>
1163   </dl>
1164   <br><br>
1165
1166   <dt>Profile Builds
1167   <dd>
1168   <dl>
1169     <dt>Tools
1170     <dd><tt><i>OBJ_ROOT</i>/Profile/bin</tt>
1171     <dt>Libraries
1172     <dd><tt><i>OBJ_ROOT</i>/Profile/lib</tt>
1173   </dl>
1174 </dl>
1175
1176 </div>
1177
1178 <!-- ======================================================================= -->
1179 <div class="doc_subsection">
1180   <a name="optionalconfig">Optional Configuration Items</a>
1181 </div>
1182
1183 <div class="doc_text">
1184
1185 <p>
1186 If you're running on a Linux system that supports the "<a
1187 href="http://www.tat.physik.uni-tuebingen.de/~rguenth/linux/binfmt_misc.html">binfmt_misc</a>"
1188 module, and you have root access on the system, you can set your system up to
1189 execute LLVM bitcode files directly. To do this, use commands like this (the
1190 first command may not be required if you are already using the module):</p>
1191
1192 <div class="doc_code">
1193 <pre>
1194 $ mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
1195 $ echo ':llvm:M::BC::/path/to/lli:' &gt; /proc/sys/fs/binfmt_misc/register
1196 $ chmod u+x hello.bc   (if needed)
1197 $ ./hello.bc
1198 </pre>
1199 </div>
1200
1201 <p>
1202 This allows you to execute LLVM bitcode files directly.  On Debian, you 
1203 can also use this command instead of the 'echo' command above:</p>
1204 </p>
1205
1206 <div class="doc_code">
1207 <pre>
1208 $ sudo update-binfmts --install llvm /path/to/lli --magic 'BC'
1209 </pre>
1210 </div>
1211
1212 </div>
1213
1214 <!-- *********************************************************************** -->
1215 <div class="doc_section">
1216   <a name="layout"><b>Program Layout</b></a>
1217 </div>
1218 <!-- *********************************************************************** -->
1219
1220 <div class="doc_text">
1221
1222 <p>One useful source of information about the LLVM source base is the LLVM <a
1223 href="http://www.doxygen.org">doxygen</a> documentation available at <tt><a
1224 href="http://llvm.org/doxygen/">http://llvm.org/doxygen/</a></tt>.
1225 The following is a brief introduction to code layout:</p>
1226
1227 </div>
1228
1229 <!-- ======================================================================= -->
1230 <div class="doc_subsection"><a name="examples"><tt>llvm/examples</tt></a></div>
1231 <div class="doc_text">
1232   <p>This directory contains some simple examples of how to use the LLVM IR and
1233   JIT.</p>
1234 </div>
1235
1236 <!-- ======================================================================= -->
1237 <div class="doc_subsection"><a name="include"><tt>llvm/include</tt></a></div>
1238 <div class="doc_text">
1239
1240 <p>This directory contains public header files exported from the LLVM
1241 library. The three main subdirectories of this directory are:</p>
1242
1243 <dl>
1244   <dt><tt><b>llvm/include/llvm</b></tt></dt>
1245   <dd>This directory contains all of the LLVM specific header files.  This 
1246   directory also has subdirectories for different portions of LLVM: 
1247   <tt>Analysis</tt>, <tt>CodeGen</tt>, <tt>Target</tt>, <tt>Transforms</tt>, 
1248   etc...</dd>
1249
1250   <dt><tt><b>llvm/include/llvm/Support</b></tt></dt>
1251   <dd>This directory contains generic support libraries that are provided with 
1252   LLVM but not necessarily specific to LLVM. For example, some C++ STL utilities 
1253   and a Command Line option processing library store their header files here.
1254   </dd>
1255
1256   <dt><tt><b>llvm/include/llvm/Config</b></tt></dt>
1257   <dd>This directory contains header files configured by the <tt>configure</tt> 
1258   script.  They wrap "standard" UNIX and C header files.  Source code can 
1259   include these header files which automatically take care of the conditional 
1260   #includes that the <tt>configure</tt> script generates.</dd>
1261 </dl>
1262 </div>
1263
1264 <!-- ======================================================================= -->
1265 <div class="doc_subsection"><a name="lib"><tt>llvm/lib</tt></a></div>
1266 <div class="doc_text">
1267
1268 <p>This directory contains most of the source files of the LLVM system. In LLVM,
1269 almost all code exists in libraries, making it very easy to share code among the
1270 different <a href="#tools">tools</a>.</p>
1271
1272 <dl>
1273   <dt><tt><b>llvm/lib/VMCore/</b></tt></dt>
1274   <dd> This directory holds the core LLVM source files that implement core 
1275   classes like Instruction and BasicBlock.</dd>
1276
1277   <dt><tt><b>llvm/lib/AsmParser/</b></tt></dt>
1278   <dd>This directory holds the source code for the LLVM assembly language parser 
1279   library.</dd>
1280
1281   <dt><tt><b>llvm/lib/BitCode/</b></tt></dt>
1282   <dd>This directory holds code for reading and write LLVM bitcode.</dd>
1283
1284   <dt><tt><b>llvm/lib/Analysis/</b></tt><dd>This directory contains a variety of
1285   different program analyses, such as Dominator Information, Call Graphs,
1286   Induction Variables, Interval Identification, Natural Loop Identification,
1287   etc.</dd>
1288
1289   <dt><tt><b>llvm/lib/Transforms/</b></tt></dt>
1290   <dd> This directory contains the source code for the LLVM to LLVM program 
1291   transformations, such as Aggressive Dead Code Elimination, Sparse Conditional 
1292   Constant Propagation, Inlining, Loop Invariant Code Motion, Dead Global 
1293   Elimination, and many others.</dd>
1294
1295   <dt><tt><b>llvm/lib/Target/</b></tt></dt>
1296   <dd> This directory contains files that describe various target architectures
1297   for code generation.  For example, the <tt>llvm/lib/Target/X86</tt> 
1298   directory holds the X86 machine description while
1299   <tt>llvm/lib/Target/CBackend</tt> implements the LLVM-to-C converter.</dd>
1300     
1301   <dt><tt><b>llvm/lib/CodeGen/</b></tt></dt>
1302   <dd> This directory contains the major parts of the code generator: Instruction 
1303   Selector, Instruction Scheduling, and Register Allocation.</dd>
1304
1305   <dt><tt><b>llvm/lib/Debugger/</b></tt></dt>
1306   <dd> This directory contains the source level debugger library that makes 
1307   it possible to instrument LLVM programs so that a debugger could identify 
1308   source code locations at which the program is executing.</dd>
1309
1310   <dt><tt><b>llvm/lib/ExecutionEngine/</b></tt></dt>
1311   <dd> This directory contains libraries for executing LLVM bitcode directly 
1312   at runtime in both interpreted and JIT compiled fashions.</dd>
1313
1314   <dt><tt><b>llvm/lib/Support/</b></tt></dt>
1315   <dd> This directory contains the source code that corresponds to the header 
1316   files located in <tt>llvm/include/Support/</tt>.</dd>
1317
1318   <dt><tt><b>llvm/lib/System/</b></tt></dt>
1319   <dd>This directory contains the operating system abstraction layer that
1320   shields LLVM from platform-specific coding.</dd>
1321 </dl>
1322
1323 </div>
1324
1325 <!-- ======================================================================= -->
1326 <div class="doc_subsection"><a name="projects"><tt>llvm/projects</tt></a></div>
1327 <div class="doc_text">
1328   <p>This directory contains projects that are not strictly part of LLVM but are
1329   shipped with LLVM. This is also the directory where you should create your own
1330   LLVM-based projects. See <tt>llvm/projects/sample</tt> for an example of how
1331   to set up your own project.</p>
1332 </div>
1333
1334 <!-- ======================================================================= -->
1335 <div class="doc_subsection"><a name="runtime"><tt>llvm/runtime</tt></a></div>
1336 <div class="doc_text">
1337
1338 <p>This directory contains libraries which are compiled into LLVM bitcode and
1339 used when linking programs with the GCC front end.  Most of these libraries are
1340 skeleton versions of real libraries; for example, libc is a stripped down
1341 version of glibc.</p>
1342
1343 <p>Unlike the rest of the LLVM suite, this directory needs the LLVM GCC front
1344 end to compile.</p>
1345
1346 </div>
1347
1348 <!-- ======================================================================= -->
1349 <div class="doc_subsection"><a name="test"><tt>llvm/test</tt></a></div>
1350 <div class="doc_text">
1351   <p>This directory contains feature and regression tests and other basic sanity
1352   checks on the LLVM infrastructure. These are intended to run quickly and cover
1353   a lot of territory without being exhaustive.</p>
1354 </div>
1355
1356 <!-- ======================================================================= -->
1357 <div class="doc_subsection"><a name="test-suite"><tt>test-suite</tt></a></div>
1358 <div class="doc_text">
1359   <p>This is not a directory in the normal llvm module; it is a separate
1360   Subversion
1361   module that must be checked out (usually to <tt>projects/test-suite</tt>). 
1362   This
1363   module contains a comprehensive correctness, performance, and benchmarking
1364   test
1365   suite for LLVM. It is a separate Subversion module because not every LLVM 
1366   user is
1367   interested in downloading or building such a comprehensive test suite. For
1368   further details on this test suite, please see the 
1369   <a href="TestingGuide.html">Testing Guide</a> document.</p>
1370 </div>
1371
1372 <!-- ======================================================================= -->
1373 <div class="doc_subsection"><a name="tools"><tt>llvm/tools</tt></a></div>
1374 <div class="doc_text">
1375
1376 <p>The <b>tools</b> directory contains the executables built out of the
1377 libraries above, which form the main part of the user interface.  You can
1378 always get help for a tool by typing <tt>tool_name -help</tt>.  The
1379 following is a brief introduction to the most important tools.  More detailed
1380 information is in the <a href="CommandGuide/index.html">Command Guide</a>.</p>
1381
1382 <dl>
1383
1384   <dt><tt><b>bugpoint</b></tt></dt>
1385   <dd><tt>bugpoint</tt> is used to debug
1386   optimization passes or code generation backends by narrowing down the
1387   given test case to the minimum number of passes and/or instructions that
1388   still cause a problem, whether it is a crash or miscompilation. See <a
1389   href="HowToSubmitABug.html">HowToSubmitABug.html</a> for more information
1390   on using <tt>bugpoint</tt>.</dd>
1391
1392   <dt><tt><b>llvmc</b></tt></dt>
1393   <dd>The LLVM Compiler Driver. This program can
1394   be configured to utilize both LLVM and non-LLVM compilation tools to enable
1395   pre-processing, translation, optimization, assembly, and linking of programs
1396   all from one command line. <tt>llvmc</tt> also takes care of processing the
1397   dependent libraries found in bitcode. This reduces the need to get the
1398   traditional <tt>-l&lt;name&gt;</tt> options right on the command line. Please
1399   note that this tool, while functional, is still experimental and not feature
1400   complete.</dd>
1401
1402   <dt><tt><b>llvm-ar</b></tt></dt>
1403   <dd>The archiver produces an archive containing
1404   the given LLVM bitcode files, optionally with an index for faster
1405   lookup.</dd>
1406   
1407   <dt><tt><b>llvm-as</b></tt></dt>
1408   <dd>The assembler transforms the human readable LLVM assembly to LLVM 
1409   bitcode.</dd>
1410
1411   <dt><tt><b>llvm-dis</b></tt></dt>
1412   <dd>The disassembler transforms the LLVM bitcode to human readable 
1413   LLVM assembly.</dd>
1414
1415   <dt><tt><b>llvm-ld</b></tt></dt>
1416   <dd><tt>llvm-ld</tt> is a general purpose and extensible linker for LLVM. 
1417   This is the linker invoked by <tt>llvmc</tt>. It performs standard link time
1418   optimizations and allows optimization modules to be loaded and run so that 
1419   language specific optimizations can be applied at link time.</dd>
1420
1421   <dt><tt><b>llvm-link</b></tt></dt>
1422   <dd><tt>llvm-link</tt>, not surprisingly, links multiple LLVM modules into 
1423   a single program.</dd>
1424   
1425   <dt><tt><b>lli</b></tt></dt>
1426   <dd><tt>lli</tt> is the LLVM interpreter, which
1427   can directly execute LLVM bitcode (although very slowly...). For architectures
1428   that support it (currently x86, Sparc, and PowerPC), by default, <tt>lli</tt>
1429   will function as a Just-In-Time compiler (if the functionality was compiled
1430   in), and will execute the code <i>much</i> faster than the interpreter.</dd>
1431
1432   <dt><tt><b>llc</b></tt></dt>
1433   <dd> <tt>llc</tt> is the LLVM backend compiler, which
1434   translates LLVM bitcode to a native code assembly file or to C code (with
1435   the -march=c option).</dd>
1436
1437   <dt><tt><b>llvm-gcc</b></tt></dt>
1438   <dd><tt>llvm-gcc</tt> is a GCC-based C frontend that has been retargeted to 
1439   use LLVM as its backend instead of GCC's RTL backend. It can also emit LLVM 
1440   bitcode or assembly (with the <tt>-emit-llvm</tt> option) instead of the
1441   usual machine code output.  It works just like any other GCC compiler, 
1442   taking the typical <tt>-c, -S, -E, -o</tt> options that are typically used.  
1443   Additionally, the the source code for <tt>llvm-gcc</tt> is available as a 
1444   separate Subversion module.</dd>
1445
1446   <dt><tt><b>opt</b></tt></dt>
1447   <dd><tt>opt</tt> reads LLVM bitcode, applies a series of LLVM to LLVM 
1448   transformations (which are specified on the command line), and then outputs 
1449   the resultant bitcode.  The '<tt>opt -help</tt>' command is a good way to 
1450   get a list of the program transformations available in LLVM.<br>
1451   <dd><tt>opt</tt> can also be used to run a specific analysis on an input 
1452   LLVM bitcode file and print out the results.  It is primarily useful for 
1453   debugging analyses, or familiarizing yourself with what an analysis does.</dd>
1454 </dl>
1455 </div>
1456
1457 <!-- ======================================================================= -->
1458 <div class="doc_subsection"><a name="utils"><tt>llvm/utils</tt></a></div>
1459 <div class="doc_text">
1460
1461 <p>This directory contains utilities for working with LLVM source code, and some
1462 of the utilities are actually required as part of the build process because they
1463 are code generators for parts of LLVM infrastructure.</p>
1464
1465 <dl>
1466   <dt><tt><b>codegen-diff</b></tt> <dd><tt>codegen-diff</tt> is a script
1467   that finds differences between code that LLC generates and code that LLI
1468   generates. This is a useful tool if you are debugging one of them,
1469   assuming that the other generates correct output. For the full user
1470   manual, run <tt>`perldoc codegen-diff'</tt>.<br><br>
1471
1472   <dt><tt><b>emacs/</b></tt> <dd>The <tt>emacs</tt> directory contains
1473   syntax-highlighting files which will work with Emacs and XEmacs editors,
1474   providing syntax highlighting support for LLVM assembly files and TableGen
1475   description files. For information on how to use the syntax files, consult
1476   the <tt>README</tt> file in that directory.<br><br>
1477
1478   <dt><tt><b>getsrcs.sh</b></tt> <dd>The <tt>getsrcs.sh</tt> script finds
1479   and outputs all non-generated source files, which is useful if one wishes
1480   to do a lot of development across directories and does not want to
1481   individually find each file. One way to use it is to run, for example:
1482   <tt>xemacs `utils/getsources.sh`</tt> from the top of your LLVM source
1483   tree.<br><br>
1484
1485   <dt><tt><b>llvmgrep</b></tt></dt>
1486   <dd>This little tool performs an "egrep -H -n" on each source file in LLVM and
1487   passes to it a regular expression provided on <tt>llvmgrep</tt>'s command
1488   line. This is a very efficient way of searching the source base for a
1489   particular regular expression.</dd>
1490
1491   <dt><tt><b>makellvm</b></tt> <dd>The <tt>makellvm</tt> script compiles all
1492   files in the current directory and then compiles and links the tool that
1493   is the first argument. For example, assuming you are in the directory
1494   <tt>llvm/lib/Target/Sparc</tt>, if <tt>makellvm</tt> is in your path,
1495   simply running <tt>makellvm llc</tt> will make a build of the current
1496   directory, switch to directory <tt>llvm/tools/llc</tt> and build it,
1497   causing a re-linking of LLC.<br><br>
1498
1499   <dt><tt><b>NewNightlyTest.pl</b></tt> and
1500   <tt><b>NightlyTestTemplate.html</b></tt> <dd>These files are used in a
1501   cron script to generate nightly status reports of the functionality of
1502   tools, and the results can be seen by following the appropriate link on
1503   the <a href="http://llvm.org/">LLVM homepage</a>.<br><br>
1504
1505   <dt><tt><b>TableGen/</b></tt> <dd>The <tt>TableGen</tt> directory contains
1506   the tool used to generate register descriptions, instruction set
1507   descriptions, and even assemblers from common TableGen description
1508   files.<br><br>
1509
1510   <dt><tt><b>vim/</b></tt> <dd>The <tt>vim</tt> directory contains
1511   syntax-highlighting files which will work with the VIM editor, providing
1512   syntax highlighting support for LLVM assembly files and TableGen
1513   description files. For information on how to use the syntax files, consult
1514   the <tt>README</tt> file in that directory.<br><br>
1515
1516 </dl>
1517
1518 </div>
1519
1520 <!-- *********************************************************************** -->
1521 <div class="doc_section">
1522   <a name="tutorial">An Example Using the LLVM Tool Chain</a>
1523 </div>
1524 <!-- *********************************************************************** -->
1525
1526 <div class="doc_text">
1527 <p>This section gives an example of using LLVM.  llvm-gcc3 is now obsolete,
1528 so we only include instructions for llvm-gcc4.
1529 </p>
1530
1531 <p><b>Note:</b> The <i>gcc4</i> frontend's invocation is <b><i>considerably different</i></b>
1532 from the previous <i>gcc3</i> frontend. In particular, the <i>gcc4</i> frontend <b><i>does not</i></b>
1533 create bitcode by default: <i>gcc4</i> produces native code. As the example below illustrates,
1534 the '--emit-llvm' flag is needed to produce LLVM bitcode output. For <i>makefiles</i> and
1535 <i>configure</i> scripts, the CFLAGS variable needs '--emit-llvm' to produce bitcode
1536 output.</p>
1537 </div>
1538
1539 <!-- ======================================================================= -->
1540 <div class="doc_subsection"><a name="tutorial4">Example with llvm-gcc4</a></div>
1541
1542 <div class="doc_text">
1543
1544 <ol>
1545   <li><p>First, create a simple C file, name it 'hello.c':</p>
1546
1547 <div class="doc_code">
1548 <pre>
1549 #include &lt;stdio.h&gt;
1550
1551 int main() {
1552   printf("hello world\n");
1553   return 0;
1554 }
1555 </pre></div></li>
1556
1557   <li><p>Next, compile the C file into a native executable:</p>
1558
1559       <div class="doc_code"><pre>% llvm-gcc hello.c -o hello</pre></div>
1560
1561       <p>Note that llvm-gcc works just like GCC by default.  The standard -S and
1562         -c arguments work as usual (producing a native .s or .o file,
1563         respectively).</p></li>
1564
1565   <li><p>Next, compile the C file into a LLVM bitcode file:</p>
1566
1567       <div class="doc_code">
1568       <pre>% llvm-gcc -O3 -emit-llvm hello.c -c -o hello.bc</pre></div>
1569
1570       <p>The -emit-llvm option can be used with the -S or -c options to emit an
1571          LLVM ".ll" or ".bc" file (respectively) for the code.  This allows you
1572          to use the <a href="CommandGuide/index.html">standard LLVM tools</a> on
1573          the bitcode file.</p>
1574
1575       <p>Unlike llvm-gcc3, llvm-gcc4 correctly responds to -O[0123] arguments.
1576          </p></li>
1577
1578   <li><p>Run the program in both forms. To run the program, use:</p>
1579       
1580       <div class="doc_code"><pre>% ./hello</pre></div>
1581  
1582       <p>and</p>
1583
1584       <div class="doc_code"><pre>% lli hello.bc</pre></div>
1585
1586       <p>The second examples shows how to invoke the LLVM JIT, <a
1587        href="CommandGuide/html/lli.html">lli</a>.</p></li>
1588
1589   <li><p>Use the <tt>llvm-dis</tt> utility to take a look at the LLVM assembly
1590       code:</p>
1591
1592 <div class="doc_code">
1593 <pre>llvm-dis &lt; hello.bc | less</pre>
1594 </div></li>
1595
1596   <li><p>Compile the program to native assembly using the LLC code
1597       generator:</p>
1598
1599       <div class="doc_code"><pre>% llc hello.bc -o hello.s</pre></div></li>
1600
1601   <li><p>Assemble the native assembly language file into a program:</p>
1602
1603 <div class="doc_code">
1604 <pre>
1605 <b>Solaris:</b> % /opt/SUNWspro/bin/cc -xarch=v9 hello.s -o hello.native
1606
1607 <b>Others:</b>  % gcc hello.s -o hello.native
1608 </pre>
1609 </div></li>
1610
1611   <li><p>Execute the native code program:</p>
1612
1613       <div class="doc_code"><pre>% ./hello.native</pre></div>
1614
1615       <p>Note that using llvm-gcc to compile directly to native code (i.e. when
1616          the -emit-llvm option is not present) does steps 6/7/8 for you.</p>
1617         </li>
1618
1619 </ol>
1620
1621 </div>
1622
1623
1624 <!-- *********************************************************************** -->
1625 <div class="doc_section">
1626   <a name="problems">Common Problems</a>
1627 </div>
1628 <!-- *********************************************************************** -->
1629
1630 <div class="doc_text">
1631
1632 <p>If you are having problems building or using LLVM, or if you have any other
1633 general questions about LLVM, please consult the <a href="FAQ.html">Frequently
1634 Asked Questions</a> page.</p>
1635
1636 </div>
1637
1638 <!-- *********************************************************************** -->
1639 <div class="doc_section">
1640   <a name="links">Links</a>
1641 </div>
1642 <!-- *********************************************************************** -->
1643
1644 <div class="doc_text">
1645
1646 <p>This document is just an <b>introduction</b> on how to use LLVM to do
1647 some simple things... there are many more interesting and complicated things
1648 that you can do that aren't documented here (but we'll gladly accept a patch
1649 if you want to write something up!).  For more information about LLVM, check
1650 out:</p>
1651
1652 <ul>
1653   <li><a href="http://llvm.org/">LLVM homepage</a></li>
1654   <li><a href="http://llvm.org/doxygen/">LLVM doxygen tree</a></li>
1655   <li><a href="http://llvm.org/docs/Projects.html">Starting a Project
1656   that Uses LLVM</a></li>
1657 </ul>
1658
1659 </div>
1660
1661 <!-- *********************************************************************** -->
1662
1663 <hr>
1664 <address>
1665   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
1666   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
1667   <a href="http://validator.w3.org/check/referer"><img
1668   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
1669
1670   <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
1671   <a href="http://llvm.x10sys.com/rspencer/">Reid Spencer</a><br>
1672   <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
1673   Last modified: $Date$
1674 </address>
1675 </body>
1676 </html>