eb8d1d0b07ce64ab2242e254fe6ca9861a5fcc02
[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>
21       <li><a href="#software">Software</a>
22       <li><a href="#brokengcc">Broken versions of GCC</a>
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>
28       <li><a href="#environment">Setting Up Your Environment</a>
29       <li><a href="#unpack">Unpacking the LLVM Archives</a>
30       <li><a href="#checkout">Checkout LLVM from CVS</a>
31       <li><a href="#installcf">Install the GCC Front End</a>
32       <li><a href="#config">Local LLVM Configuration</a>
33       <li><a href="#compile">Compiling the LLVM Suite Source Code</a>
34       <li><a href="#objfiles">The Location of LLVM Object Files</a>
35       <li><a href="#optionalconfig">Optional Configuration Items</a>
36     </ol></li>
37
38   <li><a href="#layout">Program layout</a>
39     <ol>
40       <li><a href="#cvsdir"><tt>CVS</tt> directories</a>
41       <li><a href="#examples"><tt>llvm/examples</tt></a>
42       <li><a href="#include"><tt>llvm/include</tt></a>
43       <li><a href="#lib"><tt>llvm/lib</tt></a>
44       <li><a href="#projects"><tt>llvm/projects</tt></a>
45       <li><a href="#runtime"><tt>llvm/runtime</tt></a>  
46       <li><a href="#test"><tt>llvm/test</tt></a>
47       <li><a href="#llvmtest"><tt>llvm-test</tt></a>
48       <li><a href="#tools"><tt>llvm/tools</tt></a>  
49       <li><a href="#utils"><tt>llvm/utils</tt></a>
50       <li><a href="#win32"><tt>llvm/win32</tt></a>
51     </ol></li>
52
53   <li><a href="#tutorial">An Example Using the LLVM Tool Chain</a>
54   <li><a href="#problems">Common Problems</a>
55   <li><a href="#links">Links</a>
56 </ul>
57
58 <div class="doc_author">
59   <p>Written by: 
60     <a href="mailto:criswell@uiuc.edu">John Criswell</a>, 
61     <a href="mailto:sabre@nondot.org">Chris Lattner</a>,
62     <a href="http://misha.brukman.net">Misha Brukman</a>, 
63     <a href="http://www.cs.uiuc.edu/~vadve">Vikram Adve</a>, and
64     <a href="mailto:gshi1@uiuc.edu">Guochun Shi</a>.
65   </p>
66 </div>
67
68
69 <!-- *********************************************************************** -->
70 <div class="doc_section">
71   <a name="overview"><b>Overview</b></a>
72 </div>
73 <!-- *********************************************************************** -->
74
75 <div class="doc_text">
76
77 <p>Welcome to LLVM! In order to get started, you first need to know some
78 basic information.</p>
79
80 <p>First, LLVM comes in two pieces. The first piece is the LLVM suite. This
81 contains all of the tools, libraries, and header files needed to use the low
82 level virtual machine.  It contains an assembler, disassembler, bytecode
83 analyzer, and bytecode optimizer.  It also contains a test suite that can be
84 used to test the LLVM tools and the GCC front end.</p>
85
86 <p>The second piece is the GCC front end.  This component provides a version of
87 GCC that compiles C and C++ code into LLVM bytecode.  Currently, the GCC front
88 end is a modified version of GCC 3.4 (we track the GCC 3.4 development).  Once
89 compiled into LLVM bytecode, a program can be manipulated with the LLVM tools
90 from the LLVM suite.</p>
91
92 <p>
93 There is a third, optional piece called llvm-test.  It is a suite of programs
94 with a testing harness that can be used to further test LLVM's functionality
95 and performance.
96 </p>
97
98 </div>
99
100 <!-- *********************************************************************** -->
101 <div class="doc_section">
102   <a name="quickstart"><b>Getting Started Quickly (A Summary)</b></a>
103 </div>
104 <!-- *********************************************************************** -->
105
106 <div class="doc_text">
107
108 <p>Here's the short story for getting up and running quickly with LLVM:</p>
109
110 <ol>
111   <li>Read the documentation.</li>
112   <li>Read the documentation.</li>
113   <li>Remember that you were warned twice about reading the documentation.</li>
114   <li>Install the GCC front end:
115     <ol>
116       <li><tt>cd <i>where-you-want-the-C-front-end-to-live</i></tt>
117       <li><tt>gunzip --stdout cfrontend.<i>platform</i>.tar.gz | tar -xvf -</tt>
118       <li><b>Sparc and MacOS X Only:</b><br>
119       <tt>cd cfrontend/<i>platform</i><br>
120           ./fixheaders</tt>
121     </ol></li>
122
123   <li>Get the Source Code
124   <ul>
125     <li>With the distributed files:
126     <ol>
127       <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
128       <li><tt>gunzip --stdout llvm-<i>version</i>.tar.gz | tar -xvf -</tt>
129       <li><tt>cd llvm</tt>
130     </ol></li>
131
132     <li>With anonymous CVS access (or use a <a href="#mirror">mirror</a>):
133     <ol>
134       <li><tt>cd <i>where-you-want-llvm-to-live</i></tt></li>
135       <li><tt>cvs -d
136           :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm login</tt></li>
137       <li>Hit the return key when prompted for the password.
138       <li><tt>cvs -z3 -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm 
139           co llvm</tt></li>
140       <li><tt>cd llvm</tt></li>
141       <li><tt>cvs up -P -d</tt></li>
142     </ol></li>
143   </ul></li>
144
145   <li>Configure the LLVM Build Environment
146   <ol>
147     <li>Change directory to where you want to store the LLVM object
148         files and run <tt>configure</tt> to configure the Makefiles and
149         header files for the default platform. Useful options include:
150       <ul>
151         <li><tt>--with-llvmgccdir=<i>directory</i></tt>
152             <p>Specify the full pathname of where the LLVM GCC frontend is
153             installed.</p></li>
154         <li><tt>--enable-spec2000=<i>directory</i></tt>
155             <p>Enable the SPEC2000 benchmarks for testing.  The SPEC2000
156             benchmarks should be available in
157             <tt><i>directory</i></tt>.</p></li>
158       </ul>
159   </ol></li>
160
161   <li>Build the LLVM Suite:
162   <ol>
163       <li>Set your LLVM_LIB_SEARCH_PATH environment variable.</li>
164       <li><tt>gmake -k |&amp; tee gnumake.out
165       &nbsp;&nbsp;&nbsp;# this is csh or tcsh syntax</tt></li>
166       <li>If you get an "internal compiler error (ICE)" see <a href="#brokengcc">below</a>.</li>
167   </ol>
168
169 </ol>
170
171 <p>Consult the <a href="#starting">Getting Started with LLVM</a> section for
172 detailed information on configuring and compiling LLVM.  See <a
173 href="#environment">Setting Up Your Environment</a> for tips that simplify
174 working with the GCC front end and LLVM tools.  Go to <a href="#layout">Program
175 Layout</a> to learn about the layout of the source code tree.</p>
176
177 </div>
178
179 <!-- *********************************************************************** -->
180 <div class="doc_section">
181   <a name="requirements"><b>Requirements</b></a>
182 </div>
183 <!-- *********************************************************************** -->
184
185 <div class="doc_text">
186
187 <p>Before you begin to use the LLVM system, review the requirements given below.
188 This may save you some trouble by knowing ahead of time what hardware and
189 software you will need.</p>
190
191 </div>
192
193 <!-- ======================================================================= -->
194 <div class="doc_subsection">
195   <a name="hardware"><b>Hardware</b></a>
196 </div>
197
198 <div class="doc_text">
199
200 <p>LLVM is known to work on the following platforms:</p>
201
202 <table cellpadding="3">
203 <tr>
204   <th>OS</th>
205   <th>Arch</th>
206   <th>Compilers</th>
207 </tr>
208 <tr>
209   <td>Linux</td>
210   <td>x86<sup>1</sup></td>
211   <td>GCC</td>
212 </tr>
213 <tr>
214   <td>Solaris</td>
215   <td>V9 (Ultrasparc)</td>
216   <td>GCC</td>
217 </tr>
218 <tr>
219   <td>FreeBSD</td>
220   <td>x86<sup>1</sup></td>
221   <td>GCC</td>
222 </tr>
223 <tr>
224   <td>MacOS X<sup>2</sup></td>
225   <td>PowerPC</td>
226   <td>GCC</td>
227 </tr>
228 <tr>
229   <td>Cygwin/Win32</td>
230   <td>x86<sup>1</sup></td>
231   <td>GCC</td>
232 </tr>
233 </table>
234
235 <p>LLVM has partial support for the following platforms:</p>
236
237 <table>
238 <tr>
239   <th>OS</th>
240   <th>Arch</th>
241   <th>Compilers</th>
242 </tr>
243 <tr>
244   <td>Windows</td>
245   <td>x86<sup>1</sup></td>
246   <td>Visual Studio .NET<sup>4,5</sup>, MinGW</td>
247 <tr>
248   <td>AIX<sup>3,4</sup></td>
249   <td>PowerPC</td>
250   <td>GCC</td>
251 </tr>
252 <tr>
253   <td>Linux<sup>3,5</sup></td>
254   <td>PowerPC</td>
255   <td>GCC</td>
256 </tr>
257 </table>
258
259 <p>
260 Notes:<br>
261 <sup>1</sup> Code generation supported for Pentium processors and up<br>
262 <sup>2</sup> Code generation supported for 32-bit ABI only<br>
263 <sup>3</sup> No native code generation<br>
264 <sup>4</sup> Build is not complete: one or more tools don't link<br>
265 <sup>5</sup> The GCC-based C/C++ frontend does not build<br>
266 </p>
267
268 <p>Note that you will need about 1-3 GB of space for a full LLVM build in Debug
269 mode, depending on the system (because of all the debug info), and the libraries
270 appear in more than one of the tools that get linked, so there is some
271 duplication.  If you do not need many of the tools and you are space-conscious,
272 you can disable them individually in <tt>llvm/tools/Makefile</tt>.  The Release
273 build requires considerably less space.</p>
274
275 <p>The LLVM suite <i>may</i> compile on other platforms, but it is not
276 guaranteed to do so.  If compilation is successful, the LLVM utilities should be
277 able to assemble, disassemble, analyze, and optimize LLVM bytecode.  Code
278 generation should work as well, although the generated native code may not work
279 on your platform.</p>
280
281 <p>The GCC front end is not very portable at the moment.  If you want to get it
282 to work on another platform, you can download a copy of the source and <a
283 href="CFEBuildInstrs.html">try to compile it</a> on your platform.</p>
284
285 </div>
286
287 <!-- ======================================================================= -->
288 <div class="doc_subsection"><a name="software"><b>Software</b></a></div>
289 <div class="doc_text">
290   <p>Compiling LLVM requires that you have several software packages 
291   installed. The table below lists those required packages. The Package column
292   is the usual name for the software package that LLVM depends on. The Version
293   column provides "known to work" versions of the package. The Notes column
294   describes how LLVM uses the package and provides other details.</p>
295   <table>
296     <tr><th>Package</th><th>Version</th><th>Notes</th></tr>
297
298     <tr>
299       <td><a href="http://savannah.gnu.org/projects/make">GNU Make</a></td>
300       <td>3.79, 3.79.1</td>
301       <td>Makefile/build processor</td>
302     </tr>
303
304     <tr>
305       <td><a href="http://gcc.gnu.org">GCC</a></td>
306       <td>3.4.2</td>
307       <td>C/C++ compiler (<a href="#Note3">Note 3</a>)</td>
308     </tr>
309
310     <tr>
311       <td><a href="http://www.gnu.org/software/flex">Flex</a></td>
312       <td>2.5.4</td>
313       <td>LEX compiler</td>
314     </tr>
315
316     <tr>
317       <td><a href="http://www.gnu.org/software/bison/bison.html">Bison</a></td>
318       <td>1.35</td>
319       <td>YACC compiler</td>
320     </tr>
321
322     <tr>
323       <td><a href="http://savannah.gnu.org/projects/dejagnu">DejaGnu</a></td>
324       <td>1.4.2</td>
325       <td>Automated test suite (<a href="#Note2">Note 2</a>)</td>
326     </tr>
327
328     <tr>
329       <td><a href="http://www.tcl.tk/software/tcltk/">tcl</a></td>
330       <td>8.3, 8.4</td>
331       <td>Automated test suite (<a href="#Note2">Note 2</a>)</td>
332     </tr>
333
334     <tr>
335       <td><a href="http://expect.nist.gov/">expect</a></td>
336       <td>5.38.0</td>
337       <td>Automated test suite (<a href="#Note2">Note 2</a>)</td>
338     </tr>
339
340     <tr>
341       <td><a href="http://savannah.gnu.org/projects/m4">GNU M4</a>
342       <td>1.4</td>
343       <td>Macro processor for configuration (<a href="#Note1">Note 1</a>)</td>
344     </tr>
345
346     <tr>
347       <td><a href="http://www.gnu.org/software/autoconf">GNU Autoconf</a></td>
348       <td>2.59</td>
349       <td>Configuration script builder (<a href="#Note1">Note 1</a>)</td>
350     </tr>
351
352     <tr>
353       <td><a href="http://www.gnu.org/software/automake">GNU Automake</a></td>
354       <td>2.59</td>
355       <td>aclocal macro generator (<a href="#Note1">Note 1</a>)</td>
356     </tr>
357
358     <tr>
359       <td><a href="http://www.perl.com/download.csp">perl</a></td>
360       <td>&gt;5.6.0</td>
361       <td>Nightly tester, utilities</td>
362     </tr>
363
364     <tr>
365       <td><a href="http://savannah.gnu.org/projects/libtool">libtool</a></td>
366       <td>1.5.10</td>
367       <td>Shared library manager (<a href="#Note1">Note 1</a>)</td>
368     </tr>
369
370     <tr>
371       <td><a href="https://www.cvshome.org/downloads.html">CVS</a></td>
372       <td>&gt;1.11</td>
373       <td>CVS access to LLVM (<a href="#Note4">Note 4</a>)</td>
374     </tr>
375
376   </table>
377
378   <p>Notes:</p>
379   <ol>
380     <li><a name="Note1">If you want to make changes to the configure scripts, 
381       you will need GNU autoconf (2.59), and consequently, GNU M4 (version 1.4 
382       or higher). You will also need automake. We only use aclocal from that 
383       package.</a></li>
384     <li><a name="Note2">Only needed if you want to run the automated test 
385       suite in the <tt>test</tt> directory.</a></li>
386     </li>
387     <li><a name="Note3">Only the C and C++ languages are needed so there's no
388       need to build the other languages for LLVM's purposes.</a> See 
389       <a href="#brokengcc">below</a> for specific version info.
390     </li>
391     <li><a name="Note4">You only need CVS if you intend to build from the 
392       latest LLVM sources. If you're working from a release distribution, you
393       don't need CVS.</a></li>
394   </ol>
395   <p>Additionally, your compilation host is expected to have the usual 
396   plethora of Unix utilities. Specifically:</p>
397   <ul>
398     <li><b>ar</b> - archive library builder</li>
399     <li><b>bzip2*</b> - bzip2 command for distribution generation</li>
400     <li><b>bunzip2*</b> - bunzip2 command for distribution checking</li>
401     <li><b>chmod</b> - change permissions on a file</li>
402     <li><b>cat</b> - output concatenation utility</li>
403     <li><b>cp</b> - copy files</li>
404     <li><b>date</b> - print the current date/time </li>
405     <li><b>echo</b> - print to standard output</li>
406     <li><b>egrep</b> - extended regular expression search utility</li>
407     <li><b>etags</b> - C/C++ tag file creator for vim/emacs</li>
408     <li><b>find</b> - find files/dirs in a file system</li>
409     <li><b>grep</b> - regular expression search utility</li>
410     <li><b>gzip*</b> - gzip command for distribution generation</li>
411     <li><b>gunzip*</b> - gunzip command for distribution checking</li>
412     <li><b>install</b> - install directories/files </li>
413     <li><b>mkdir</b> - create a directory</li>
414     <li><b>mv</b> - move (rename) files</li>
415     <li><b>ranlib</b> - symbol table builder for archive libraries</li>
416     <li><b>rm</b> - remove (delete) files and directories</li>
417     <li><b>sed</b> - stream editor for transforming output</li>
418     <li><b>sh</b> - Bourne shell for make build scripts</li>
419     <li><b>tar</b> - tape archive for distribution generation</li>
420     <li><b>test</b> - test things in file system</li>
421     <li><b>unzip*</b> - unzip command for distribution checking</li>
422     <li><b>zip*</b> - zip command for distribution generation</li>
423   </ul>
424 </div>
425
426 <!-- ======================================================================= -->
427 <div class="doc_subsection">
428   <a name="brokengcc">Broken versions of GCC</a>
429 </div>
430
431 <div class="doc_text">
432
433 <p>LLVM is very demanding of the host C++ compiler, and as such tends to expose
434 bugs in the compiler.  In particular, several versions of GCC crash when trying
435 to compile LLVM.  We routinely use GCC 3.3.3 and GCC 3.4.0 and have had success
436 with them.  Other versions of GCC will probably work as well.  GCC versions listed
437 here are known to not work.  If you are using one of these versions, please try
438 to upgrade your GCC to something more recent.  If you run into a problem with a
439 version of GCC not listed here, please <a href="mailto:llvmdev@cs.uiuc.edu">let
440 us know</a>.  Please use the "<tt>gcc -v</tt>" command to find out which version
441 of GCC you are using.
442 </p>
443
444 <p><b>GCC versions prior to 3.0</b>: GCC 2.96.x and before had several
445 problems in the STL that effectively prevent it from compiling LLVM.
446 </p>
447
448 <p><b>GCC 3.2.2</b>: This version of GCC fails to compile LLVM.</p>
449
450 <p><b>GCC 3.3.2</b>: This version of GCC suffered from a <a 
451 href="http://gcc.gnu.org/PR13392">serious bug</a> which causes it to crash in
452 the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
453 </div>
454
455
456
457 <!-- *********************************************************************** -->
458 <div class="doc_section">
459   <a name="starting"><b>Getting Started with LLVM</b></a>
460 </div>
461 <!-- *********************************************************************** -->
462
463 <div class="doc_text">
464
465 <p>The remainder of this guide is meant to get you up and running with
466 LLVM and to give you some basic information about the LLVM environment.</p>
467
468 <p>The later sections of this guide describe the <a
469 href="#layout">general layout</a> of the the LLVM source tree, a <a
470 href="#tutorial">simple example</a> using the LLVM tool chain, and <a
471 href="#links">links</a> to find more information about LLVM or to get
472 help via e-mail.</p>
473 </div>
474
475 <!-- ======================================================================= -->
476 <div class="doc_subsection">
477   <a name="terminology">Terminology and Notation</a>
478 </div>
479
480 <div class="doc_text">
481
482 <p>Throughout this manual, the following names are used to denote paths
483 specific to the local system and working environment.  <i>These are not
484 environment variables you need to set but just strings used in the rest
485 of this document below</i>.  In any of the examples below, simply replace
486 each of these names with the appropriate pathname on your local system.
487 All these paths are absolute:</p>
488
489 <dl>
490     <dt>SRC_ROOT
491     <dd>
492     This is the top level directory of the LLVM source tree.
493     <p>
494
495     <dt>OBJ_ROOT
496     <dd>
497     This is the top level directory of the LLVM object tree (i.e. the
498     tree where object files and compiled programs will be placed.  It
499     can be the same as SRC_ROOT).
500     <p>
501
502     <dt>LLVMGCCDIR
503     <dd>
504     This is the where the LLVM GCC Front End is installed.
505     <p>
506     For the pre-built GCC front end binaries, the LLVMGCCDIR is
507     <tt>cfrontend/<i>platform</i>/llvm-gcc</tt>.
508 </dl>
509
510 </div>
511
512 <!-- ======================================================================= -->
513 <div class="doc_subsection">
514   <a name="environment">Setting Up Your Environment</a>
515 </div>
516
517 <div class="doc_text">
518
519 <p>
520 In order to compile and use LLVM, you will need to set some environment
521 variables.  There are also some shell aliases which you may find useful.
522 You can set these on the command line, or better yet, set them in your
523 <tt>.cshrc</tt> or <tt>.profile</tt>.
524
525 <dl>
526     <dt><tt>LLVM_LIB_SEARCH_PATH</tt>=<tt><i>LLVMGCCDIR</i>/bytecode-libs</tt>
527     <dd>
528     This environment variable helps the LLVM GCC front end find bytecode
529     libraries that it will need for compilation.
530     <p>
531
532     <dt>alias llvmgcc <i>LLVMGCCDIR</i><tt>/bin/gcc</tt>
533     <dt>alias llvmg++ <i>LLVMGCCDIR</i><tt>/bin/g++</tt>
534     <dd>
535     These aliases allow you to use the LLVM C and C++ front ends without putting
536     them in your <tt>PATH</tt> or typing in their complete pathnames.
537 </dl>
538
539 </div>
540
541 <!-- ======================================================================= -->
542 <div class="doc_subsection">
543   <a name="unpack">Unpacking the LLVM Archives</a>
544 </div>
545
546 <div class="doc_text">
547
548 <p>
549 If you have the LLVM distribution, you will need to unpack it before you
550 can begin to compile it.  LLVM is distributed as a set of two files: the LLVM
551 suite and the LLVM GCC front end compiled for your platform.  Each
552 file is a TAR archive that is compressed with the gzip program.
553 </p>
554
555 <p> The files are as follows:
556 <dl>
557   <dt><tt>llvm-1.4.tar.gz</tt></dt>
558   <dd>This is the source code for the LLVM libraries and tools.<br/></dd>
559
560   <dt><tt>llvm-test-1.4.tar.gz</tt></dt>
561   <dd>This is the source code for the LLVM test suite.</tt></dd>
562
563   <dt><tt>cfrontend-1.4.source.tar.gz</tt></dt>
564   <dd>This is the source release of the GCC front end.<br/></dd>
565
566   <dt><tt>cfrontend-1.4.sparc-sun-solaris2.8.tar.gz</tt></dt>
567   <dd>This is the binary release of the GCC front end for Solaris/Sparc.
568   <br/></dd>
569
570   <dt><tt>cfrontend-1.4.i686-redhat-linux-gnu.tar.gz</tt></dt>
571   <dd>This is the binary release of the GCC front end for Linux/x86.<br/></dd>
572
573   <dt><tt>cfrontend-1.4.i386-unknown-freebsd5.1.tar.gz</tt></dt>
574   <dd>This is the binary release of the GCC front end for FreeBSD/x86.<br/></dd>
575
576   <dt><tt>cfrontend-1.4.powerpc-apple-darwin7.0.0.tar.gz</tt></dt>
577   <dd>This is the binary release of the GCC front end for MacOS X/PPC.<br/></dd>
578 </dl>
579
580 </div>
581
582 <!-- ======================================================================= -->
583 <div class="doc_subsection">
584   <a name="checkout">Checkout LLVM from CVS</a>
585 </div>
586
587 <div class="doc_text">
588
589 <p>If you have access to our CVS repository, you can get a fresh copy of
590 the entire source code.  All you need to do is check it out from CVS as
591 follows:</p>
592
593 <ul>
594 <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
595   <li><tt>cvs -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm login</tt>
596   <li>Hit the return key when prompted for the password.
597   <li><tt>cvs -z3 -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm co
598       llvm</tt>
599 </ul>
600
601 <p>This will create an '<tt>llvm</tt>' directory in the current
602 directory and fully populate it with the LLVM source code, Makefiles,
603 test directories, and local copies of documentation files.</p>
604
605 <p>If you want to get a specific release (as opposed to the most recent
606 revision), you can specify a label.  The following releases have the following
607 label:</p>
608
609 <ul>
610 <li>Release 1.4: <b>RELEASE_14</b></li>
611 <li>Release 1.3: <b>RELEASE_13</b></li>
612 <li>Release 1.2: <b>RELEASE_12</b></li>
613 <li>Release 1.1: <b>RELEASE_11</b></li>
614 <li>Release 1.0: <b>RELEASE_1</b></li>
615 </ul>
616
617 <p>If you would like to get the LLVM test suite (a separate package as of 1.4),
618 you get it from the CVS repository:</p>
619 <pre>
620   cd llvm/projects
621   cvs -z3 -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm co llvm-test
622 </pre>
623 <p>By placing it in the <tt>llvm/projects</tt>, it will be automatically
624 configured by the LLVM configure script as well as automatically updated when
625 you run <tt>cvs update</tt>.</p>
626
627 <p>If you would like to get the GCC front end source code, you can also get it
628 from the CVS repository:</p>
629
630 <pre>
631   cvs -z3 -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm co llvm-gcc
632 </pre>
633
634 <p>Please note that you must follow <a href="CFEBuildInstrs.html">these 
635 instructions</a> to successfully build the LLVM GCC front-end.</p>
636
637 </div>
638
639 <!-- ======================================================================= -->
640 <div class="doc_subsubsection">
641   <a name="mirrors">LLVM CVS Mirrors</a>
642 </div>
643
644 <div class="doc_text">
645
646 <p>If the main CVS server is overloaded or inaccessible, you can try one of
647 these user-hosted mirrors:</p>
648
649 <ul>
650 <li><a href="http://llvm.x10sys.com/">Mirror hosted by eXtensible Systems
651 Inc.</a></li>
652 </ul>
653 </div>
654
655 <!-- ======================================================================= -->
656 <div class="doc_subsection">
657   <a name="installcf">Install the GCC Front End</a>
658 </div>
659
660 <div class="doc_text">
661
662 <p>Before configuring and compiling the LLVM suite, you need to extract the LLVM
663 GCC front end from the binary distribution.  It is used for building the
664 bytecode libraries later used by the GCC front end for linking programs, and its
665 location must be specified when the LLVM suite is configured.</p>
666
667 <p>To install the GCC front end, do the following:</p>
668
669 <ol>
670   <li><tt>cd <i>where-you-want-the-front-end-to-live</i></tt></li>
671   <li><tt>gunzip --stdout cfrontend-<i>version</i>.<i>platform</i>.tar.gz | tar -xvf
672       -</tt></li>
673 </ol>
674
675 <p>If you are using Solaris/Sparc or MacOS X/PPC, you will need to fix the
676 header files:</p>
677
678 <p><tt>cd cfrontend/<i>platform</i><br>
679    ./fixheaders</tt></p>
680
681 <p>The binary versions of the GCC front end may not suit all of your needs.  For
682 example, the binary distribution may include an old version of a system header
683 file, not "fix" a header file that needs to be fixed for GCC, or it may be
684 linked with libraries not available on your system.</p>
685
686 <p>In cases like these, you may want to try <a
687 href="CFEBuildInstrs.html">building the GCC front end from source.</a> This is
688 not for the faint of heart, so be forewarned.</p>
689
690 </div>
691
692 <!-- ======================================================================= -->
693 <div class="doc_subsection">
694   <a name="config">Local LLVM Configuration</a>
695 </div>
696
697 <div class="doc_text">
698
699 <p>Once checked out from the CVS repository, the LLVM suite source code must be
700 configured via the <tt>configure</tt> script.  This script sets variables in the
701 various <tt>*.in</tt> files, most notably <tt>llvm/Makefile.config</tt> and 
702 <tt>llvm/include/Config/config.h</tt>.  It also populates <i>OBJ_ROOT</i> with 
703 the Makefiles needed to begin building LLVM.</p>
704
705 <p>The following environment variables are used by the <tt>configure</tt>
706 script to configure the build system:</p>
707
708 <table>
709   <tr><th>Variable</th><th>Purpose</th></tr>
710   <tr>
711     <td>CC</td>
712     <td>Tells <tt>configure</tt> which C compiler to use.  By default,
713         <tt>configure</tt> will look for the first GCC C compiler in
714         <tt>PATH</tt>.  Use this variable to override
715         <tt>configure</tt>'s default behavior.</td>
716   </tr>
717   <tr>
718     <td>CXX</td>
719     <td>Tells <tt>configure</tt> which C++ compiler to use.  By default,
720        <tt>configure</tt> will look for the first GCC C++ compiler in
721        <tt>PATH</tt>.  Use this variable to override
722        <tt>configure</tt>'s default behavior.</td>
723   </tr>
724 </table>
725
726 <p>The following options can be used to set or enable LLVM specific options:</p>
727
728 <dl>
729   <dt><i>--with-llvmgccdir=LLVMGCCDIR</i></dt>
730   <dd>
731     Path to the location where the LLVM GCC front end binaries and
732     associated libraries were installed.  This must be specified as an
733     absolute pathname.
734     <p></p>
735   </dd>
736   <dt><i>--with-tclinclude</i></dt>
737   <dd>Path to the tcl include directory under which the <tt>tclsh</tt> can be
738   found. Use this if you have multiple tcl installations on your machine and you
739   want to use a specific one (8.x) for LLVM. LLVM only uses tcl for running the
740   dejagnu based test suite in <tt>llvm/test</tt>. If you don't specify this
741   option, the LLVM configure script will search for tcl 8.4 and 8.3 releases.
742   <p></p>
743   </dd>
744   <dt><i>--enable-optimized</i></dt>
745   <dd>
746     Enables optimized compilation by default (debugging symbols are removed
747     and GCC optimization flags are enabled).  The default is to use an
748     unoptimized build (also known as a debug build).
749     <p></p>
750   </dd>
751   <dt><i>--enable-jit</i></dt>
752   <dd>
753     Compile the Just In Time (JIT) compiler functionality.  This is not
754     available
755     on all platforms.  The default is dependent on platform, so it is best
756     to explicitly enable it if you want it.
757     <p></p>
758   </dd>
759   <dt><i>--enable-doxygen</i></dt>
760   <dd>Look for the doxygen program and enable construction of doxygen based
761   documentation from the source code. This is disabled by default because 
762   generating the documentation can take a long time and producess 100s of 
763   megabytes of output.</dd>
764 </dl>
765
766 <p>To configure LLVM, follow these steps:</p>
767
768 <ol>
769     <li>Change directory into the object root directory:
770     <br>
771     <tt>cd <i>OBJ_ROOT</i></tt>
772     <p>
773
774     <li>Run the <tt>configure</tt> script located in the LLVM source tree:
775     <br>
776     <tt><i>SRC_ROOT</i>/configure --prefix=/install/path [other options]</tt>
777     <p>
778 </ol>
779
780 <p>In addition to running <tt>configure</tt>, you must set the
781 <tt>LLVM_LIB_SEARCH_PATH</tt> environment variable in your startup shell 
782 scripts.  This environment variable is used to locate "system" libraries like
783 "<tt>-lc</tt>" and "<tt>-lm</tt>" when linking.  This variable should be set to
784 the absolute path of the <tt>bytecode-libs</tt> subdirectory of the GCC front
785 end, or <i>LLVMGCCDIR</i>/<tt>bytecode-libs</tt>.  For example, one might set
786 <tt>LLVM_LIB_SEARCH_PATH</tt> to
787 <tt>/home/vadve/lattner/local/x86/llvm-gcc/bytecode-libs</tt> for the x86
788 version of the GCC front end on our research machines.</p>
789
790 </div>
791
792 <!-- ======================================================================= -->
793 <div class="doc_subsection">
794   <a name="compile">Compiling the LLVM Suite Source Code</a>
795 </div>
796
797 <div class="doc_text">
798
799 <p>Once you have configured LLVM, you can build it.  There are three types of
800 builds:</p>
801
802 <dl>
803     <dt>Debug Builds
804     <dd>
805     These builds are the default when one types <tt>gmake</tt> (unless the
806     <tt>--enable-optimized</tt> option was used during configuration).  The
807     build system will compile the tools and libraries with debugging
808     information.
809     <p>
810
811     <dt>Release (Optimized) Builds
812     <dd>
813     These builds are enabled with the <tt>--enable-optimized</tt> option to
814     <tt>configure</tt> or by specifying <tt>ENABLE_OPTIMIZED=1</tt> on the
815     <tt>gmake</tt> command line.  For these builds, the build system will
816     compile the tools and libraries with GCC optimizations enabled and strip
817     debugging information from the libraries and executables it generates. 
818     <p>
819
820     <dt>Profile Builds
821     <dd>
822     These builds are for use with profiling.  They compile profiling
823     information into the code for use with programs like <tt>gprof</tt>.
824     Profile builds must be started by specifying <tt>ENABLE_PROFILING=1</tt>
825     on the <tt>gmake</tt> command line.
826 </dl>
827
828 <p>Once you have LLVM configured, you can build it by entering the
829 <i>OBJ_ROOT</i> directory and issuing the following command:</p>
830
831 <p><tt>gmake</tt></p>
832
833 <p>If the build fails, please <a href="#brokengcc">check here</a> to see if you
834 are using a version of GCC that is known not to compile LLVM.</p>
835
836 <p>
837 If you have multiple processors in your machine, you may wish to use some of
838 the parallel build options provided by GNU Make.  For example, you could use the
839 command:</p>
840
841 <p><tt>gmake -j2</tt></p>
842
843 <p>There are several special targets which are useful when working with the LLVM
844 source code:</p>
845
846 <dl>
847   <dt><tt>gmake clean</tt>
848   <dd>
849   Removes all files generated by the build.  This includes object files,
850   generated C/C++ files, libraries, and executables.
851   <p>
852
853   <dt><tt>gmake dist-clean</tt>
854   <dd>
855   Removes everything that <tt>gmake clean</tt> does, but also removes files
856   generated by <tt>configure</tt>.  It attempts to return the source tree to the
857   original state in which it was shipped.
858   <p>
859
860   <dt><tt>gmake install</tt>
861   <dd>
862   Installs LLVM header files, libraries, tools, and documentation in a
863   hierarchy 
864   under $PREFIX, specified with <tt>./configure --prefix=[dir]</tt>, which 
865   defaults to <tt>/usr/local</tt>.
866   <p>
867   
868   <dt><tt>gmake -C runtime install-bytecode</tt>
869   <dd>
870   Assuming you built LLVM into $OBJDIR, when this command is run, it will 
871   install bytecode libraries into the GCC front end's bytecode library 
872   directory.  If you need to update your bytecode libraries,
873   this is the target to use once you've built them.
874   <p>
875 </dl>
876
877 <p>Please see the <a href="MakefileGuide.html">Makefile Guide</a> for further
878 details on these <tt>make</tt> targets and descriptions of other targets
879 available.</p>
880
881 <p>It is also possible to override default values from <tt>configure</tt> by
882 declaring variables on the command line.  The following are some examples:</p>
883
884 <dl>
885   <dt><tt>gmake ENABLE_OPTIMIZED=1</tt>
886   <dd>
887   Perform a Release (Optimized) build.
888   <p>
889
890   <dt><tt>gmake ENABLE_PROFILING=1</tt>
891   <dd>
892   Perform a Profiling build.
893   <p>
894
895   <dt><tt>gmake VERBOSE=1</tt>
896   <dd>
897   Print what <tt>gmake</tt> is doing on standard output.
898   <p>
899
900   <dt><tt>gmake TOOL_VERBOSE=1</tt></dt>
901   <dd>Ask each tool invoked by the makefiles to print out what it is doing on 
902   the standard output. This also implies <tt>VERBOSE=1</tt>.
903   <p></dd>
904 </dl>
905
906 <p>Every directory in the LLVM object tree includes a <tt>Makefile</tt> to build
907 it and any subdirectories that it contains.  Entering any directory inside the
908 LLVM object tree and typing <tt>gmake</tt> should rebuild anything in or below
909 that directory that is out of date.</p>
910
911 </div>
912
913 <!-- ======================================================================= -->
914 <div class="doc_subsection">
915   <a name="objfiles">The Location of LLVM Object Files</a>
916 </div>
917
918 <div class="doc_text">
919
920 <p>The LLVM build system is capable of sharing a single LLVM source tree among
921 several LLVM builds.  Hence, it is possible to build LLVM for several different
922 platforms or configurations using the same source tree.</p>
923
924 <p>This is accomplished in the typical autoconf manner:</p>
925
926 <ul>
927   <li><p>Change directory to where the LLVM object files should live:</p>
928
929       <p><tt>cd <i>OBJ_ROOT</i></tt></p></li>
930
931   <li><p>Run the <tt>configure</tt> script found in the LLVM source
932       directory:</p>
933
934       <p><tt><i>SRC_ROOT</i>/configure</tt></p></li>
935 </ul>
936
937 <p>The LLVM build will place files underneath <i>OBJ_ROOT</i> in directories
938 named after the build type:</p>
939
940 <dl>
941   <dt>Debug Builds
942   <dd>
943   <dl>
944     <dt>Tools
945     <dd><tt><i>OBJ_ROOT</i>/Debug/bin</tt>
946     <dt>Libraries
947     <dd><tt><i>OBJ_ROOT</i>/Debug/lib</tt>
948   </dl>
949   <p>
950
951   <dt>Release Builds
952   <dd>
953   <dl>
954     <dt>Tools
955     <dd><tt><i>OBJ_ROOT</i>/Release/bin</tt>
956     <dt>Libraries
957     <dd><tt><i>OBJ_ROOT</i>/Release/lib</tt>
958   </dl>
959   <p>
960
961   <dt>Profile Builds
962   <dd>
963   <dl>
964     <dt>Tools
965     <dd><tt><i>OBJ_ROOT</i>/Profile/bin</tt>
966     <dt>Libraries
967     <dd><tt><i>OBJ_ROOT</i>/Profile/lib</tt>
968   </dl>
969 </dl>
970
971 </div>
972
973 <!-- ======================================================================= -->
974 <div class="doc_subsection">
975   <a name="optionalconfig">Optional Configuration Items</a>
976 </div>
977
978 <div class="doc_text">
979
980 <p>
981 If you're running on a linux system that supports the "<a
982   href="http://www.tat.physik.uni-tuebingen.de/~rguenth/linux/binfmt_misc.html">
983   binfmt_misc</a>"
984 module, and you have root access on the system, you can set your system up to
985 execute LLVM bytecode files directly.  To do this, use commands like this (the
986 first command may not be required if you are already using the module):</p>
987
988 <pre>
989    $ mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
990    $ echo ':llvm:M::llvm::/path/to/lli:' > /proc/sys/fs/binfmt_misc/register
991    $ chmod u+x hello.bc                (if needed)
992    $ ./hello.bc
993 </pre>
994
995 <p>
996 This allows you to execute LLVM bytecode files directly.  Thanks to Jack
997 Cummings for pointing this out!
998 </p>
999
1000 </div>
1001
1002
1003 <!-- *********************************************************************** -->
1004 <div class="doc_section">
1005   <a name="layout"><b>Program Layout</b></a>
1006 </div>
1007 <!-- *********************************************************************** -->
1008
1009 <div class="doc_text">
1010
1011 <p>One useful source of information about the LLVM source base is the LLVM <a
1012 href="http://www.doxygen.org">doxygen</a> documentation available at <tt><a
1013 href="http://llvm.cs.uiuc.edu/doxygen/">http://llvm.cs.uiuc.edu/doxygen/</a></tt>.
1014 The following is a brief introduction to code layout:</p>
1015
1016 </div>
1017
1018 <!-- ======================================================================= -->
1019 <div class="doc_subsection"><a name="cvsdir"><tt>CVS</tt> directories</a></div>
1020 <div class="doc_text">
1021 <p>Every directory checked out of CVS will contain a <tt>CVS</tt> directory; for
1022 the most part these can just be ignored.</p>
1023 </div>
1024
1025 <!-- ======================================================================= -->
1026 <div class="doc_subsection"><a name="examples"><tt>llvm/examples</tt></a></div>
1027 <div class="doc_text">
1028   <p>This directory contains some simple examples of how to use the LLVM IR and
1029   JIT.</p>
1030 </div>
1031
1032 <!-- ======================================================================= -->
1033 <div class="doc_subsection"><a name="include"><tt>llvm/include</tt></a></div>
1034 <div class="doc_text">
1035
1036 <p>This directory contains public header files exported from the LLVM
1037 library. The three main subdirectories of this directory are:</p>
1038
1039 <dl>
1040   <dt><tt><b>llvm/include/llvm</b></tt></dt>
1041   <dd>This directory contains all of the LLVM specific header files.  This 
1042   directory also has subdirectories for different portions of LLVM: 
1043   <tt>Analysis</tt>, <tt>CodeGen</tt>, <tt>Target</tt>, <tt>Transforms</tt>, 
1044   etc...</dd>
1045
1046   <dt><tt><b>llvm/include/llvm/Support</b></tt></dt>
1047   <dd>This directory contains generic support libraries that are provided with 
1048   LLVM but not necessarily specific to LLVM. For example, some C++ STL utilities 
1049   and a Command Line option processing library store their header files here.
1050   </dd>
1051
1052   <dt><tt><b>llvm/include/llvm/Config</b></tt></dt>
1053   <dd>This directory contains header files configured by the <tt>configure</tt> 
1054   script.  They wrap "standard" UNIX and C header files.  Source code can 
1055   include these header files which automatically take care of the conditional 
1056   #includes that the <tt>configure</tt> script generates.</dd>
1057 </dl>
1058 </div>
1059
1060 <!-- ======================================================================= -->
1061 <div class="doc_subsection"><a name="lib"><tt>llvm/lib</tt></a></div>
1062 <div class="doc_text">
1063
1064 <p>This directory contains most of the source files of the LLVM system. In LLVM,
1065 almost all code exists in libraries, making it very easy to share code among the
1066 different <a href="#tools">tools</a>.</p>
1067
1068 <dl>
1069   <dt><tt><b>llvm/lib/VMCore/</b></tt></dt>
1070   <dd> This directory holds the core LLVM source files that implement core 
1071   classes like Instruction and BasicBlock.</dd>
1072
1073   <dt><tt><b>llvm/lib/AsmParser/</b></tt></dt>
1074   <dd>This directory holds the source code for the LLVM assembly language parser 
1075   library.</dd>
1076
1077   <dt><tt><b>llvm/lib/ByteCode/</b></tt></dt>
1078   <dd>This directory holds code for reading and write LLVM bytecode.</dd>
1079
1080   <dt><tt><b>llvm/lib/Analysis/</b></tt><dd>This directory contains a variety of
1081   different program analyses, such as Dominator Information, Call Graphs,
1082   Induction Variables, Interval Identification, Natural Loop Identification,
1083   etc.</dd>
1084
1085   <dt><tt><b>llvm/lib/Transforms/</b></tt></dt>
1086   <dd> This directory contains the source code for the LLVM to LLVM program 
1087   transformations, such as Aggressive Dead Code Elimination, Sparse Conditional 
1088   Constant Propagation, Inlining, Loop Invariant Code Motion, Dead Global 
1089   Elimination, and many others.</dd>
1090
1091   <dt><tt><b>llvm/lib/Target/</b></tt></dt>
1092   <dd> This directory contains files that describe various target architectures
1093   for code generation.  For example, the <tt>llvm/lib/Target/SparcV9</tt> 
1094   directory holds the Sparc machine description while
1095   <tt>llvm/lib/Target/CBackend</tt> implements the LLVM-to-C converter</dd>
1096     
1097   <dt><tt><b>llvm/lib/CodeGen/</b></tt></dt>
1098   <dd> This directory contains the major parts of the code generator: Instruction 
1099   Selector, Instruction Scheduling, and Register Allocation.</dd>
1100
1101   <dt><tt><b>llvm/lib/Debugger/</b></tt></dt>
1102   <dd> This directory contains the source level debugger library that makes 
1103   it possible to instrument LLVM programs so that a debugger could identify 
1104   source code locations at which the program is executing.</dd>
1105
1106   <dt><tt><b>llvm/lib/ExecutionEngine/</b></tt></dt>
1107   <dd> This directory contains libraries for executing LLVM bytecode directly 
1108   at runtime in both interpreted and JIT compiled fashions.</dd>
1109
1110   <dt><tt><b>llvm/lib/Support/</b></tt></dt>
1111   <dd> This directory contains the source code that corresponds to the header 
1112   files located in <tt>llvm/include/Support/</tt>.</dd>
1113
1114   <dt><tt><b>llvm/lib/System/</b></tt></dt>
1115   <dd>This directory contains the operating system abstraction layer that
1116   shields LLVM from platform-specific coding.</dd>
1117 </dl>
1118
1119 </div>
1120
1121 <!-- ======================================================================= -->
1122 <div class="doc_subsection"><a name="projects"><tt>llvm/projects</tt></a></div>
1123 <div class="doc_text">
1124   <p>This directory contains projects that are not strictly part of LLVM but are
1125   shipped with LLVM. This is also the directory where you should create your own
1126   LLVM-based projects. See <tt>llvm/projects/sample</tt> for an example of how
1127   to set up your own project. See <tt>llvm/projects/Stacker</tt> for a fully 
1128   functional example of a compiler front end.</p>
1129 </div>
1130
1131 <!-- ======================================================================= -->
1132 <div class="doc_subsection"><a name="runtime"><tt>llvm/runtime</tt></a></div>
1133 <div class="doc_text">
1134
1135 <p>This directory contains libraries which are compiled into LLVM bytecode and
1136 used when linking programs with the GCC front end.  Most of these libraries are
1137 skeleton versions of real libraries; for example, libc is a stripped down
1138 version of glibc.</p>
1139
1140 <p>Unlike the rest of the LLVM suite, this directory needs the LLVM GCC front
1141 end to compile.</p>
1142
1143 </div>
1144
1145 <!-- ======================================================================= -->
1146 <div class="doc_subsection"><a name="test"><tt>llvm/test</tt></a></div>
1147 <div class="doc_text">
1148   <p>This directory contains feature and regression tests and other basic sanity
1149   checks on the LLVM infrastructure. These are intended to run quickly and cover
1150   a lot of territory without being exhaustive.</p>
1151 </div>
1152
1153 <!-- ======================================================================= -->
1154 <div class="doc_subsection"><a name="llvmtest"><tt>llvm-test</tt></a></div>
1155 <div class="doc_text">
1156   <p>This is not a directory in the normal llvm module; it is a separate CVS
1157   module that must be checked out (usually to <tt>projects/llvm-test</tt>). This
1158   module contains a comprehensive correctness, performance, and benchmarking
1159   test
1160   suite for LLVM. It is a separate CVS module because not every LLVM user is
1161   interested in downloading or building such a comprehensive test. For further
1162   details on this test suite, please see the 
1163   <a href="TestingGuide.html">Testing Guide</a> document.</p>
1164 </div>
1165
1166 <!-- ======================================================================= -->
1167 <div class="doc_subsection"><a name="tools"><tt>llvm/tools</tt></a></div>
1168 <div class="doc_text">
1169
1170 <p>The <b>tools</b> directory contains the executables built out of the
1171 libraries above, which form the main part of the user interface.  You can
1172 always get help for a tool by typing <tt>tool_name --help</tt>.  The
1173 following is a brief introduction to the most important tools.  More detailed
1174 information is in the <a href="CommandGuide/index.html">Command Guide</a>.</p>
1175
1176 <dl>
1177   <dt><tt><b>analyze</b></tt></dt>
1178   <dd><tt>analyze</tt> is used to run a specific
1179   analysis on an input LLVM bytecode file and print out the results.  It is
1180   primarily useful for debugging analyses, or familiarizing yourself with
1181   what an analysis does.</dd>
1182
1183   <dt><tt><b>bugpoint</b></tt></dt>
1184   <dd><tt>bugpoint</tt> is used to debug
1185   optimization passes or code generation backends by narrowing down the
1186   given test case to the minimum number of passes and/or instructions that
1187   still cause a problem, whether it is a crash or miscompilation. See <a
1188   href="HowToSubmitABug.html">HowToSubmitABug.html</a> for more information
1189   on using <tt>bugpoint</tt>.</dd>
1190
1191   <dt><tt><b>llvmc</b></tt></dt>
1192   <dd>The LLVM Compiler Driver. This program can
1193   be configured to utilize both LLVM and non-LLVM compilation tools to enable
1194   pre-processing, translation, optimization, assembly, and linking of programs
1195   all from one command line. <tt>llvmc</tt> also takes care of processing the
1196   dependent libraries found in bytecode. This reduces the need to get the
1197   traditional <tt>-l&lt;name&gt;</tt> options right on the command line. Please
1198   note that this tool is new in 1.4 and considered experimental. It will be
1199   fully supported in 1.5.</dd>
1200
1201   <dt><tt><b>llvm-ar</b></tt></dt>
1202   <dd>The archiver produces an archive containing
1203   the given LLVM bytecode files, optionally with an index for faster
1204   lookup.</dd>
1205   
1206   <dt><tt><b>llvm-as</b></tt></dt>
1207   <dd>The assembler transforms the human readable LLVM assembly to LLVM 
1208   bytecode.</dd>
1209
1210   <dt><tt><b>llvm-dis</b></tt></dt>
1211   <dd>The disassembler transforms the LLVM bytecode to human readable 
1212   LLVM assembly.</dd>
1213
1214   <dt><tt><b>llvm-ld</b></tt></dt>
1215   <dd><tt>llvm-ld</tt> is very similar to gccld and provides a general purpose
1216   and extensible linker for LLVM. This is the linker invoked by <tt>llvmc</tt>.
1217   It allows optimization modules to be loaded so that language specific
1218   optimizations can be applied at link time. Please note that this tool is new
1219   in LLVM 1.4 and still considered experimental. It will be fully supported in
1220   LLVM 1.5.</dd>
1221
1222   <dt><tt><b>llvm-link</b></tt></dt>
1223   <dd><tt>llvm-link</tt>, not surprisingly, links multiple LLVM modules into 
1224   a single program.</dd>
1225   
1226   <dt><tt><b>lli</b></tt></dt>
1227   <dd><tt>lli</tt> is the LLVM interpreter, which
1228   can directly execute LLVM bytecode (although very slowly...). In addition
1229   to a simple interpreter, <tt>lli</tt> also has a tracing mode (entered by
1230   specifying <tt>-trace</tt> on the command line). Finally, for
1231   architectures that support it (currently only x86 and Sparc), by default,
1232   <tt>lli</tt> will function as a Just-In-Time compiler (if the
1233   functionality was compiled in), and will execute the code <i>much</i>
1234   faster than the interpreter.</dd>
1235
1236   <dt><tt><b>llc</b></tt></dt>
1237   <dd> <tt>llc</tt> is the LLVM backend compiler, which
1238   translates LLVM bytecode to a SPARC or x86 assembly file, or to C code (with
1239   the -march=c option).</dd>
1240
1241   <dt><tt><b>llvmgcc</b></tt></dt>
1242   <dd><tt>llvmgcc</tt> is a GCC-based C frontend
1243   that has been retargeted to emit LLVM code as the machine code output.  It
1244   works just like any other GCC compiler, taking the typical <tt>-c, -S, -E,
1245   -o</tt> options that are typically used.  The source code for the
1246   <tt>llvmgcc</tt> tool is currently not included in the LLVM CVS tree
1247   because it is quite large and not very interesting.
1248   <blockquote>
1249     <dl>
1250       <dt><tt><b>gccas</b></tt></dt>
1251       <dd>This tool is invoked by the <tt>llvmgcc</tt> frontend as the 
1252       "assembler" part of the compiler.  This tool actually assembles LLVM 
1253       assembly to LLVM bytecode, performs a variety of optimizations, and 
1254       outputs LLVM bytecode.  Thus when you invoke 
1255       <tt>llvmgcc -c x.c -o x.o</tt>, you are causing <tt>gccas</tt> to be 
1256       run, which writes the <tt>x.o</tt> file (which is an LLVM bytecode file 
1257       that can be disassembled or manipulated just like any other bytecode 
1258       file).  The command line interface to <tt>gccas</tt> is designed to be 
1259       as close as possible to the <b>system</b> `<tt>as</tt>' utility so that 
1260       the gcc frontend itself did not have to be modified to interface to 
1261       a "weird" assembler.</dd>
1262
1263       <dt><tt><b>gccld</b></tt></dt>
1264       <dd><tt>gccld</tt> links together several LLVM bytecode files into one 
1265       bytecode file and does some optimization.  It is the linker invoked by 
1266       the GCC frontend when multiple .o files need to be linked together.  
1267       Like <tt>gccas</tt>, the command line interface of <tt>gccld</tt> is 
1268       designed to match the system linker, to aid interfacing with the GCC 
1269       frontend.</dd>
1270     </dl>
1271   </blockquote>
1272   </dd>
1273
1274   <dt><tt><b>opt</b></tt></dt>
1275   <dd><tt>opt</tt> reads LLVM bytecode, applies a
1276   series of LLVM to LLVM transformations (which are specified on the command
1277   line), and then outputs the resultant bytecode.  The '<tt>opt --help</tt>'
1278   command is a good way to get a list of the program transformations
1279   available in LLVM.</dd>
1280 </dl>
1281 </div>
1282
1283 <!-- ======================================================================= -->
1284 <div class="doc_subsection"><a name="utils"><tt>llvm/utils</tt></a></div>
1285 <div class="doc_text">
1286
1287 <p>This directory contains utilities for working with LLVM source code, and some
1288 of the utilities are actually required as part of the build process because they
1289 are code generators for parts of LLVM infrastructure.</p>
1290
1291 <dl>
1292   <dt><tt><b>Burg/</b></tt> <dd><tt>Burg</tt> is an instruction selector
1293   generator -- it builds trees on which it then performs pattern-matching to
1294   select instructions according to the patterns the user has specified. Burg
1295   is currently used in the Sparc V9 backend.<p>
1296
1297   <dt><tt><b>codegen-diff</b></tt> <dd><tt>codegen-diff</tt> is a script
1298   that finds differences between code that LLC generates and code that LLI
1299   generates. This is a useful tool if you are debugging one of them,
1300   assuming that the other generates correct output. For the full user
1301   manual, run <tt>`perldoc codegen-diff'</tt>.<p>
1302
1303   <dt><tt><b>cvsupdate</b></tt> <dd><tt>cvsupdate</tt> is a script that will
1304   update your CVS tree, but produce a much cleaner and more organized output
1305   than simply running <tt>`cvs -z3 up -dP'</tt> will. For example, it will group
1306   together all the new and updated files and modified files in separate
1307   sections, so you can see at a glance what has changed. If you are at the
1308   top of your LLVM CVS tree, running <tt>utils/cvsupdate</tt> is the
1309   preferred way of updating the tree.<p>
1310
1311   <dt><tt><b>emacs/</b></tt> <dd>The <tt>emacs</tt> directory contains
1312   syntax-highlighting files which will work with Emacs and XEmacs editors,
1313   providing syntax highlighting support for LLVM assembly files and TableGen
1314   description files. For information on how to use the syntax files, consult
1315   the <tt>README</tt> file in that directory.<p>
1316
1317   <dt><tt><b>getsrcs.sh</b></tt> <dd>The <tt>getsrcs.sh</tt> script finds
1318   and outputs all non-generated source files, which is useful if one wishes
1319   to do a lot of development across directories and does not want to
1320   individually find each file. One way to use it is to run, for example:
1321   <tt>xemacs `utils/getsources.sh`</tt> from the top of your LLVM source
1322   tree.<p>
1323   
1324   <dt><tt><b>llvmgrep</b></tt></dt>
1325   <dd>This little tool performs an "egrep -H -n" on each source file in LLVM and
1326   passes to it a regular expression provided on <tt>llvmgrep</tt>'s command
1327   line. This is a very efficient way of searching the source base for a
1328   particular regular expression.</dd>
1329
1330   <dt><tt><b>makellvm</b></tt> <dd>The <tt>makellvm</tt> script compiles all
1331   files in the current directory and then compiles and links the tool that
1332   is the first argument. For example, assuming you are in the directory
1333   <tt>llvm/lib/Target/Sparc</tt>, if <tt>makellvm</tt> is in your path,
1334   simply running <tt>makellvm llc</tt> will make a build of the current
1335   directory, switch to directory <tt>llvm/tools/llc</tt> and build it,
1336   causing a re-linking of LLC.<p>
1337
1338   <dt><tt><b>NightlyTest.pl</b></tt> and
1339   <tt><b>NightlyTestTemplate.html</b></tt> <dd>These files are used in a
1340   cron script to generate nightly status reports of the functionality of
1341   tools, and the results can be seen by following the appropriate link on
1342   the <a href="http://llvm.cs.uiuc.edu/">LLVM homepage</a>.<p>
1343
1344   <dt><tt><b>TableGen/</b></tt> <dd>The <tt>TableGen</tt> directory contains
1345   the tool used to generate register descriptions, instruction set
1346   descriptions, and even assemblers from common TableGen description
1347   files.<p>
1348
1349   <dt><tt><b>vim/</b></tt> <dd>The <tt>vim</tt> directory contains
1350   syntax-highlighting files which will work with the VIM editor, providing
1351   syntax highlighting support for LLVM assembly files and TableGen
1352   description files. For information on how to use the syntax files, consult
1353   the <tt>README</tt> file in that directory.<p>
1354
1355 </dl>
1356
1357 </div>
1358
1359 <!-- ======================================================================= -->
1360 <div class="doc_subsection"><a name="win32"><tt>llvm/win32</tt></a></div>
1361 <div class="doc_text">
1362   <p>This directory contains build scripts and project files for use with 
1363   Visual C++. This allows developers on Windows to build LLVM without the need
1364   for Cygwin. The contents of this directory should be considered experimental
1365   at this time.
1366   </p>
1367 </div>
1368 <!-- *********************************************************************** -->
1369 <div class="doc_section">
1370   <a name="tutorial">An Example Using the LLVM Tool Chain</a>
1371 </div>
1372 <!-- *********************************************************************** -->
1373
1374 <div class="doc_text">
1375
1376 <ol>
1377   <li>First, create a simple C file, name it 'hello.c':
1378        <pre>
1379    #include &lt;stdio.h&gt;
1380    int main() {
1381      printf("hello world\n");
1382      return 0;
1383    }
1384        </pre></li>
1385
1386   <li><p>Next, compile the C file into a LLVM bytecode file:</p>
1387       <p><tt>% llvmgcc hello.c -o hello</tt></p>
1388
1389       <p>Note that you should have already built the tools and they have to be
1390       in your path, at least <tt>gccas</tt> and <tt>gccld</tt>.</p>
1391
1392       <p>This will create two result files: <tt>hello</tt> and
1393       <tt>hello.bc</tt>. The <tt>hello.bc</tt> is the LLVM bytecode that
1394       corresponds the the compiled program and the library facilities that it
1395       required.  <tt>hello</tt> is a simple shell script that runs the bytecode
1396       file with <tt>lli</tt>, making the result directly executable.  Note that
1397       all LLVM optimizations are enabled by default, so there is no need for a 
1398       "-O3" switch.</p></li>
1399
1400   <li><p>Run the program. To make sure the program ran, execute one of the
1401       following commands:</p>
1402       
1403       <p><tt>% ./hello</tt></p>
1404  
1405       <p>or</p>
1406
1407       <p><tt>% lli hello.bc</tt></p></li>
1408
1409   <li><p>Use the <tt>llvm-dis</tt> utility to take a look at the LLVM assembly
1410       code:</p>
1411
1412       <p><tt>% llvm-dis &lt; hello.bc | less</tt><p></li>
1413
1414   <li><p>Compile the program to native assembly using the LLC code
1415       generator:</p>
1416
1417       <p><tt>% llc hello.bc -o hello.s</tt></p>
1418
1419   <li><p>Assemble the native assembly language file into a program:</p>
1420
1421       <p><b>Solaris:</b><tt>% /opt/SUNWspro/bin/cc -xarch=v9 hello.s -o hello.native</tt></p>
1422       <p><b>Others:</b><tt>% gcc hello.s -o hello.native</tt></p>
1423
1424   <li><p>Execute the native code program:</p>
1425
1426       <p><tt>% ./hello.native</tt></p></li>
1427
1428 </ol>
1429
1430 </div>
1431
1432 <!-- *********************************************************************** -->
1433 <div class="doc_section">
1434   <a name="problems">Common Problems</a>
1435 </div>
1436 <!-- *********************************************************************** -->
1437
1438 <div class="doc_text">
1439
1440 <p>If you are having problems building or using LLVM, or if you have any other
1441 general questions about LLVM, please consult the <a href="FAQ.html">Frequently
1442 Asked Questions</a> page.</p>
1443
1444 </div>
1445
1446 <!-- *********************************************************************** -->
1447 <div class="doc_section">
1448   <a name="links">Links</a>
1449 </div>
1450 <!-- *********************************************************************** -->
1451
1452 <div class="doc_text">
1453
1454 <p>This document is just an <b>introduction</b> to how to use LLVM to do
1455 some simple things... there are many more interesting and complicated things
1456 that you can do that aren't documented here (but we'll gladly accept a patch
1457 if you want to write something up!).  For more information about LLVM, check
1458 out:</p>
1459
1460 <ul>
1461   <li><a href="http://llvm.cs.uiuc.edu/">LLVM homepage</a></li>
1462   <li><a href="http://llvm.cs.uiuc.edu/doxygen/">LLVM doxygen tree</a></li>
1463   <li><a href="http://llvm.cs.uiuc.edu/docs/Projects.html">Starting a Project
1464   that Uses LLVM</a></li>
1465 </ul>
1466
1467 </div>
1468
1469 <!-- *********************************************************************** -->
1470
1471 <hr>
1472 <address>
1473   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
1474   src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
1475   <a href="http://validator.w3.org/check/referer"><img
1476   src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
1477
1478   <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
1479   <a href="http://llvm.x10sys.com/rspencer/">Reid Spencer</a><br>
1480   <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a><br>
1481   Last modified: $Date$
1482 </address>
1483 </body>
1484 </html>