Add two new bugs
[oota-llvm.git] / docs / GettingStarted.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html>
3   <head>
4     <title>Getting Started with LLVM System</title>
5   </head>
6
7   <body bgcolor=white>
8     <center><h1>Getting Started with the LLVM System<br><font size=3>By: <a
9     href="mailto:gshi1@uiuc.edu">Guochun Shi</a>,
10     <a href="mailto:sabre@nondot.org">Chris Lattner</a>,
11     <a href="mailto:criswell@uiuc.edu">John Criswell</a>, 
12     <a href="http://misha.brukman.net">Misha Brukman</a>, and
13     <a href="http://www.cs.uiuc.edu/~vadve">Vikram Adve</a>
14     </font></h1></center>
15
16     <!--=====================================================================-->
17     <h2><a name="Contents">Contents</a></h2>
18     <!--=====================================================================-->
19
20     <ul>
21       <li><a href="#overview">Overview</a>
22       <li><a href="#quickstart">Getting Started Quickly (A Summary)</a>
23       <li><a href="#requirements">Requirements</a>
24       <ol>
25           <li><a href="#hardware">Hardware</a>
26           <li><a href="#software">Software</a>
27       </ol>
28
29       <li><a href="#starting">Getting Started with LLVM</a>
30         <ol>
31           <li><a href="#terminology">Terminology and Notation</tt></a>
32           <li><a href="#environment">Setting Up Your Environment</a>
33           <li><a href="#unpack">Unpacking the LLVM Archives</a>
34           <li><a href="#checkout">Checkout LLVM from CVS</a>
35           <li><a href="#installcf">Install the GCC Front End</a>
36           <li><a href="#config">Local LLVM Configuration</tt></a>
37           <li><a href="#compile">Compiling the LLVM Suite Source Code</a>
38           <li><a href="#objfiles">The Location of LLVM Object Files</tt></a>
39         </ol>
40       <li><a href="#layout">Program layout</a>
41       <ol>
42         <li><a href="#cvsdir"><tt>CVS</tt> directories</a>
43         <li><a href="#include"><tt>llvm/include</tt></a>
44         <li><a href="#lib"><tt>llvm/lib</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="#tools"><tt>llvm/tools</tt></a>  
48         <li><a href="#utils"><tt>llvm/utils</tt></a>
49         </ol>
50       <li><a href="#tutorial">An Example Using the LLVM Tool Chain</a>
51       <li><a href="#problems">Common Problems</a>
52       <li><a href="#links">Links</a>
53     </ul>
54
55
56     <!--=====================================================================-->
57     <center>
58     <h2><a name="overview"><b>Overview</b></a></h2>
59     </center>
60     <hr>
61     <!--=====================================================================-->
62
63     Welcome to LLVM!  In order to get started, you first need to know some
64     basic information.
65
66     <p>
67     First, LLVM comes in two pieces.  The first piece is the LLVM suite.  This
68     contains all of the tools, libraries, and header files needed to use the
69     low level virtual machine.  It contains an assembler, disassembler,
70     bytecode analyzer, and bytecode optimizer.  It also contains a test suite
71     that can be used to test the LLVM tools and the GCC front end.
72     <p>
73     The second piece is the GCC front end.  This component provides a version
74     of GCC that compiles C  and C++ code into LLVM bytecode.  Currently, the
75     GCC front end is a modified version of GCC 3.4 (we track the GCC 3.4
76     development).  Once compiled into LLVM bytecode, a program can be
77     manipulated with the LLVM tools from the LLVM suite.
78
79     <!--=====================================================================-->
80     <center>
81     <h2><a name="quickstart"><b>Getting Started Quickly (A Summary)</b></a></h2>
82     </center>
83     <hr>
84     <!--=====================================================================-->
85
86     Here's the short story for getting up and running quickly with LLVM:
87     <ol>
88         <li>Install the GCC front end:
89         <ol>
90             <li><tt>cd <i>where-you-want-the-C-front-end-to-live</i></tt>
91             <li><tt>gunzip --stdout cfrontend.<i>platform</i>.tar.gz | tar -xvf
92             -</tt>
93             <li><b>Sparc Only:</b><br>
94             <tt>
95             cd cfrontend/sparc<br>
96             ./fixheaders
97             </tt>
98         </ol>
99
100         <p>
101
102         <li>Get the Source Code
103         <ul>
104             <li>With the distributed files:
105             <ol>
106                 <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
107                 <li><tt>gunzip --stdout llvm.tar.gz | tar -xvf -</tt>
108                 <li><tt>cd llvm</tt>
109             </ol>
110
111             <p>
112
113             <li>With anonymous CVS access:
114             <ol>
115                 <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
116                 <li><tt>cvs -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm login</tt>
117                                 <li>Hit the return key when prompted for the password.
118                 <li><tt>cvs -z3 -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm co llvm</tt>
119                 <li><tt>cd llvm</tt>
120             </ol>
121         </ul>
122         </ul>
123
124         <p>
125
126         <li>Configure the LLVM Build Environment
127         <ol>
128             <li>Change directory to where you want to store the LLVM object
129             files and run <tt>configure</tt> to configure the Makefiles and
130             header files for the default platform.
131             Useful options include:
132                 <ul>
133                     <li><tt>--with-llvmgccdir=<i>directory</i></tt>
134                     <br>
135                     Specify where the LLVM GCC frontend is installed.
136                     <p>
137
138                     <li><tt>--enable-spec2000=<i>directory</i></tt>
139                     <br>
140                     Enable the SPEC2000 benchmarks for testing.  The SPEC2000
141                     benchmarks should be available in <tt><i>directory</i></tt>.
142                 </ul>
143         </ol>
144
145         <p>
146
147         <li>Build the LLVM Suite
148         <ol>
149             <li>Set your LLVM_LIB_SEARCH_PATH environment variable.
150             <li><tt>gmake -k |& tee gnumake.out
151             &nbsp;&nbsp;&nbsp;# this is csh or tcsh syntax</tt>
152         </ol>
153
154         <p>
155
156     </ol>
157
158     <p>
159     Consult the <a href="starting">Getting Started with LLVM</a> section for
160     detailed information on configuring and compiling LLVM.  See
161     <a href="#environment">Setting Up Your Environment</a> for tips that
162     simplify working with the GCC front end and LLVM tools.  Go to
163     <a href="#layout">Program Layout</a> to learn about the layout of the
164     source code tree.
165
166     <!--=====================================================================-->
167     <center>
168     <h2><a name="requirements"><b>Requirements</b></a></h2>
169     </center>
170     <hr>
171     <!--=====================================================================-->
172
173     Before you begin to use the LLVM system, review the requirements given
174     below.  This may save you some trouble by knowing ahead of time what
175     hardware and software you will need.
176
177     <!--=====================================================================-->
178     <h3><a name="hardware"><b>Hardware</b></a></h3>
179     <!--=====================================================================-->
180     LLVM is known to work on the following platforms:
181     <ul>
182         <li> Linux on x86 (Pentium and above)
183         <ul>
184             <li> Approximately 760 MB of Free Disk Space
185             <ul>
186                 <li>Source code: 30 MB
187                 <li>Object code: 670 MB
188                 <li>GCC front end: 60 MB
189             </ul>
190         </ul>
191
192         <p>
193
194         <li> Solaris on SparcV9 (Ultrasparc)
195         <ul>
196             <li> Approximately 1.24 GB of Free Disk Space
197             <ul>
198                 <li>Source code: 30 MB
199                 <li>Object code: 1000 MB
200                 <li>GCC front end: 210 MB
201             </ul>
202         </ul>
203     </ul>
204
205     The LLVM suite <i>may</i> compile on other platforms, but it is not
206     guaranteed to do so.  If compilation is successful, the LLVM utilities
207     should be able to assemble, disassemble, analyze, and optimize LLVM
208     bytecode.  Code generation should work as well, although the generated
209     native code may not work on your platform.
210     <p>
211     The GCC front end is not very portable at the moment.  If you want to get
212     it to work on another platform, you can download a copy of the source
213     and try to compile it on your platform.
214     </p>
215
216     <!--=====================================================================-->
217     <h3><a name="software"><b>Software</b></a></h3>
218     <!--=====================================================================-->
219     <p>
220
221     Compiling LLVM requires that you have several software packages installed:
222
223     <ul compact>
224         <li>
225         <a href="http://gcc.gnu.org">GCC 3.x with C and C++ language support</a>
226
227         <li>
228         <a href="http://savannah.gnu.org/projects/make">GNU Make</a>
229
230         <li>
231         <a href="http://www.gnu.org/software/flex">Flex</a>
232
233         <li>
234         <a href="http://www.gnu.org/software/bison/bison.html">Bison</a>
235     </ul>
236
237     <p>
238     There are some additional tools that you may want to have when working with
239     LLVM:
240     </p>
241
242     <ul>
243         <li><A href="http://www.gnu.org/software/autoconf">GNU Autoconf</A>
244         <li><A href="http://savannah.gnu.org/projects/m4">GNU M4</A>
245         <p>
246         If you want to make changes to the configure scripts, you will need
247         GNU autoconf (2.57 or higher), and consequently, GNU M4 (version 1.4
248         or higher).
249         </p>
250
251                 <li><A href="http://www.codesourcery.com/qm/qmtest">QMTest</A>
252                 <li><A href="http://www.python.org">Python</A>
253         <p>
254         These are needed to use the LLVM test suite.
255     </ul>
256
257
258     <p>The remainder of this guide is meant to get you up and running with
259     LLVM and to give you some basic information about the LLVM environment.
260     A <a href="#starting">complete guide to installation</a> is provided in the
261     next section.
262
263     <p>The later sections of this guide describe the <a
264     href="#layout">general layout</a> of the the LLVM source tree, a <a
265     href="#tutorial">simple example</a> using the LLVM tool chain, and <a
266     href="#links">links</a> to find more information about LLVM or to get
267     help via e-mail.
268
269     <!--=====================================================================-->
270     <center>
271     <h2><a name="starting"><b>Getting Started with LLVM</b></a></h2>
272     </center>
273     <hr>
274     <!--=====================================================================-->
275
276     <!------------------------------------------------------------------------->
277     <h3><a name="terminology">Terminology and Notation</a></h3>
278     <!------------------------------------------------------------------------->
279
280     <p>Throughout this manual, the following names are used to denote paths
281     specific to the local system and working environment.  <i>These are not
282     environment variables you need to set but just strings used in the rest
283     of this document below</i>.  In any of the examples below, simply replace
284     each of these names with the appropriate pathname on your local system.
285     All these paths are absolute:</p>
286     <dl compact>
287         <dt>SRC_ROOT
288         <dd>
289         This is the top level directory of the LLVM source tree.
290         <p>
291
292         <dt>OBJ_ROOT
293         <dd>
294         This is the top level directory of the LLVM object tree (i.e. the
295         tree where object files and compiled programs will be placed.  It
296         can be the same as SRC_ROOT).
297         <p>
298
299         <dt>LLVMGCCDIR
300         <dd>
301         This is the where the LLVM GCC Front End is installed.
302         <p>
303         For the pre-built GCC front end binaries, the LLVMGCCDIR is
304         <tt>cfrontend/<i>platform</i>/llvm-gcc</tt>.
305     </dl>
306
307     <!------------------------------------------------------------------------->
308     <h3><a name="environment">Setting Up Your Environment</a></h3>
309     <!------------------------------------------------------------------------->
310
311     <p>
312     In order to compile and use LLVM, you will need to set some environment
313     variables.  There are also some shell aliases which you may find useful.
314     You can set these on the command line, or better yet, set them in your
315     <tt>.cshrc</tt> or <tt>.profile</tt>.
316
317     <dl compact>
318         <dt><tt>LLVM_LIB_SEARCH_PATH</tt>=<tt><i>LLVMGCCDIR</i>/llvm-gcc/bytecode-libs</tt>
319         <dd>
320         This environment variable helps the LLVM GCC front end find bytecode
321         libraries that it will need for compilation.
322         <p>
323
324         <dt>alias llvmgcc <i>LLVMGCCDIR</i><tt>/llvm-gcc/bin/gcc</tt>
325         <dt>alias llvmg++ <i>LLVMGCCDIR</i><tt>/llvm-gcc/bin/g++</tt>
326         <dd>
327         This alias allows you to use the LLVM C and C++ front ends without putting
328         them in your <tt>PATH</tt> or typing in their complete pathnames.
329     </dl>
330
331     <!------------------------------------------------------------------------->
332     <h3><a name="unpack">Unpacking the LLVM Archives</a></h3>
333     <!------------------------------------------------------------------------->
334
335     <p>
336     If you have the LLVM distribution, you will need to unpack it before you
337     can begin to compile it.  LLVM is distributed as a set of three files.  Each
338     file is a TAR archive that is compressed with the gzip program.
339     </p>
340
341     <p> The three files are as follows:
342     <dl compact>
343         <dt>llvm.tar.gz
344         <dd>This is the source code to the LLVM suite.
345         <p>
346
347         <dt>cfrontend.sparc.tar.gz
348         <dd>This is the binary release of the GCC front end for Solaris/Sparc.
349         <p>
350
351         <dt>cfrontend.x86.tar.gz
352         <dd>This is the binary release of the GCC front end for Linux/x86.
353     </dl>
354
355     <!------------------------------------------------------------------------->
356     <h3><a name="checkout">Checkout LLVM from CVS</a></h3>
357     <!------------------------------------------------------------------------->
358
359     <p>If you have access to our CVS repository, you can get a fresh copy of
360     the entire source code.  All you need to do is check it out from CVS as
361     follows:
362     <ul>
363     <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
364         <li><tt>cvs -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm login</tt>
365         <li>Hit the return key when prompted for the password.
366         <li><tt>cvs -z3 -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm co llvm</tt>
367     </ul>
368
369     <p>This will create an '<tt>llvm</tt>' directory in the current
370     directory and fully populate it with the LLVM source code, Makefiles,
371     test directories, and local copies of documentation files.</p>
372
373     <p>
374     Note that the GCC front end is not included in the CVS repository.  You
375     should have downloaded the binary distribution for your platform.
376     </p>
377
378     <!------------------------------------------------------------------------->
379     <h3><a name="installcf">Install the GCC Front End</a></h3>
380     <!------------------------------------------------------------------------->
381
382     <p>
383     Before configuring and compiling the LLVM suite, you need to extract the
384     LLVM GCC front end from the binary distribution.  It is used for building
385     the
386     bytecode libraries later used by the GCC front end for linking programs, and
387     its location must be specified when the LLVM suite is configured.
388     </p>
389
390     <p>
391     To install the GCC front end, do the following:
392     <ol>
393         <li><tt>cd <i>where-you-want-the-front-end-to-live</i></tt>
394         <li><tt>gunzip --stdout cfrontend.<i>platform</i>.tar.gz | tar -xvf
395         -</tt>
396     </ol>
397
398     If you are on a Sparc/Solaris machine, you will need to fix the header
399     files:
400
401     <p>
402
403     <tt>
404     cd cfrontend/sparc
405     <br>
406     ./fixheaders
407     </tt>
408
409     <p>
410     The binary versions of the GCC front end may not suit all of your needs.
411     For example, the binary distribution may include an old version of a system
412     header file, not "fix" a header file that needs to be fixed for GCC, or it
413     may be linked with libraries not available on your system.
414     </p>
415
416     <p>
417     In cases like these, you may want to try
418     <a href="CFEBuildInstrs.html">building the GCC front end from source.</a>
419     This is not for the faint of heart, so be forewarned.
420     </p>
421     <!------------------------------------------------------------------------->
422     <h3><a name="config">Local LLVM Configuration</a></h3>
423     <!------------------------------------------------------------------------->
424
425     <p>Once checked out from the CVS repository, the LLVM suite source code
426     must be configured via the <tt>configure</tt> script.  This script sets
427     variables in <tt>llvm/Makefile.config</tt> and
428     <tt>llvm/include/Config/config.h</tt>.  It also populates <i>OBJ_ROOT</i>
429     with the Makefiles needed to build LLVM.
430
431     <p>
432     The following environment variables are used by the <tt>configure</tt>
433     script to configure the build system:
434     </p>
435
436     <table border=1>
437         <tr>
438             <th>Variable</th>
439             <th>
440             Purpose
441             </th>
442         </tr>
443
444         <tr>
445             <td>CC</td>
446             <td>
447             Tells <tt>configure</tt> which C compiler to use.  By default,
448             <tt>configure</tt> will look for the first GCC C compiler in
449             <tt>PATH</tt>.  Use this variable to override
450             <tt>configure</tt>'s default behavior.
451             </td>
452         </tr>
453
454         <tr>
455             <td>CXX</td>
456             <td>
457             Tells <tt>configure</tt> which C++ compiler to use.  By default,
458             <tt>configure</tt> will look for the first GCC C++ compiler in
459             <tt>PATH</tt>.  Use this variable to override
460             <tt>configure</tt>'s default behavior.
461             </td>
462         </tr>
463     </table>
464
465     <p>
466     The following options can be used to set or enable LLVM specific options:
467     </p>
468
469     <dl compact>
470     <dt><i>--with-llvmgccdir=LLVMGCCDIR</i>
471     <dd>
472         Path to the location where the LLVM C front end binaries and
473         associated libraries will be installed.
474         <p>
475     <dt><i>--enable-optimized</i>
476     <dd>
477         Enables optimized compilation by default (debugging symbols are removed
478         and GCC optimization flags are enabled).  The default is to use an
479         unoptimized build (also known as a debug build).
480         <p>
481     <dt><i>--enable-jit</i>
482     <dd>
483         Compile the Just In Time (JIT) functionality.  This is not available
484         on all platforms.  The default is dependent on platform, so it is best
485         to explicitly enable it if you want it.
486         <p>
487     <dt><i>--enable-spec2000</i>
488     <dt><i>--enable-spec2000=&lt;<tt>directory</tt>&gt;</i>
489     <dd>
490         Enable the use of SPEC2000 when testing LLVM.  This is disabled by default
491         (unless <tt>configure</tt> finds SPEC2000 installed).  By specifying
492         <tt>directory</tt>, you can tell configure where to find the SPEC2000
493         benchmarks.  If <tt>directory</tt> is left unspecified, <tt>configure</tt>
494         uses the default value
495         <tt>/home/vadve/shared/benchmarks/speccpu2000/benchspec</tt>.
496     </dl>
497
498     <p>
499     To configure LLVM, follow these steps:
500     <ol>
501         <li>Change directory into the object root directory:
502         <br>
503         <tt>cd <i>OBJ_ROOT</i></tt>
504         <p>
505
506         <li>Run the <tt>configure</tt> script located in the LLVM source tree:
507         <br>
508         <tt><i>SRC_ROOT</i>/configure</tt>
509         <p>
510     </ol>
511     </p>
512
513     In addition to running <tt>configure</tt>, you must set the
514     <tt>LLVM_LIB_SEARCH_PATH</tt> environment variable in your startup scripts.
515     This environment variable is used to locate "system" libraries like
516     "<tt>-lc</tt>" and "<tt>-lm</tt>" when linking.  This variable should be set
517     to the absolute path for the bytecode-libs subdirectory of the GCC front end
518     install, or <i>LLVMGCCDIR</i>/llvm-gcc/bytecode-libs.  For example, one might
519     set <tt>LLVM_LIB_SEARCH_PATH</tt> to
520     <tt>/home/vadve/lattner/local/x86/llvm-gcc/bytecode-libs</tt> for the X86
521     version of the GCC front end on our research machines.<p>
522
523     <!------------------------------------------------------------------------->
524     <h3><a name="compile">Compiling the LLVM Suite Source Code</a></h3>
525     <!------------------------------------------------------------------------->
526
527     Once you have configured LLVM, you can build it.  There are three types of
528     builds:
529
530     <dl compact>
531         <dt>Debug Builds
532         <dd>
533         These builds are the default when one types <tt>gmake</tt> (unless the
534         <tt>--enable-optimized</tt> option was used during configuration).  The
535         build system will compile the tools and libraries with debugging
536         information.
537         <p>
538
539         <dt>Release (Optimized) Builds
540         <dd>
541         These builds are enabled with the <tt>--enable-optimized</tt> option to
542         <tt>configure</tt> or by specifying <tt>ENABLE_OPTIMIZED=1</tt> on the
543         <tt>gmake</tt> command line.  For these builds, the build system will
544         compile the tools and libraries with GCC optimizations enabled and strip
545         debugging information from the libraries and executables it generates. 
546         <p>
547
548         <dt>Profile Builds
549         <dd>
550         These builds are for use with profiling.  They compile profiling
551         information into the code for use with programs like <tt>gprof</tt>.
552         Profile builds must be started by specifying <tt>ENABLE_PROFILING=1</tt>
553         on the <tt>gmake</tt> command line.
554     </dl>
555
556     Once you have LLVM configured, you can build it by entering the
557     <i>OBJ_ROOT</i> directory and issuing the following command:
558     <p>
559     <tt>gmake</tt>
560
561     <p>
562     If you have multiple processors in your machine, you may wish to use some
563     of the parallel build options provided by GNU Make.  For example, you could
564     use the command:
565     </p>
566
567     <p>
568     <tt>gmake -j2</tt>
569
570     <p>
571     There are several special targets which are useful when working with the LLVM
572     source code:
573
574     <dl compact>
575         <dt><tt>gmake clean</tt>
576         <dd>
577         Removes all files generated by the build.  This includes object files,
578         generated C/C++ files, libraries, and executables.
579         <p>
580
581         <dt><tt>gmake distclean</tt>
582         <dd>
583         Removes everything that <tt>gmake clean</tt> does, but also removes
584         files generated by <tt>configure</tt>.  It attempts to return the
585         source tree to the original state in which it was shipped.
586         <p>
587
588         <dt><tt>gmake install</tt>
589         <dd>
590         Installs LLVM files into the proper location.  For the most part,
591         this does nothing, but it does install bytecode libraries into the
592         GCC front end's bytecode library directory.  If you need to update
593         your bytecode libraries, this is the target to use once you've built
594         them.
595         <p>
596
597     </dl>
598
599     It is also possible to override default values from <tt>configure</tt> by
600     declaring variables on the command line.  The following are some examples:
601
602     <dl compact>
603         <dt><tt>gmake ENABLE_OPTIMIZED=1</tt>
604         <dd>
605         Perform a Release (Optimized) build.
606         <p>
607
608         <dt><tt>gmake ENABLE_PROFILING=1</tt>
609         <dd>
610         Perform a Profiling build.
611         <p>
612
613         <dt><tt>gmake VERBOSE=1</tt>
614         <dd>
615         Print what <tt>gmake</tt> is doing on standard output.
616         <p>
617     </dl>
618
619     Every directory in the LLVM object tree includes a <tt>Makefile</tt> to
620     build it and any subdirectories that it contains.  Entering any directory
621     inside the LLVM object tree and typing <tt>gmake</tt> should rebuild
622     anything in or below that directory that is out of date.
623
624     <!------------------------------------------------------------------------->
625     <h3><a name="objfiles">The Location of LLVM Object Files</a></h3>
626     <!------------------------------------------------------------------------->
627
628     <p>
629     The LLVM build system is capable of sharing a single LLVM source tree among
630     several LLVM builds.  Hence, it is possible to build LLVM for several
631     different platforms or configurations using the same source tree.
632     <p>
633     This is accomplished in the typical autoconf manner:
634     <ul>
635         <li>Change directory to where the LLVM object files should live:
636         <p>
637         <tt>cd <i>OBJ_ROOT</i></tt>
638
639         <li>Run the <tt>configure</tt> script found in the LLVM source directory:
640         <p>
641         <tt><i>SRC_ROOT</i>/configure</tt>
642     </ul>
643
644     <p>
645     The LLVM build will place files underneath <i>OBJ_ROOT</i> in directories
646     named after the build type:
647     </p>
648
649     <dl compact>
650         <dt>Debug Builds
651         <dd>
652         <dl compact>
653             <dt>Tools
654             <dd><tt><i>OBJ_ROOT</i>/tools/Debug</tt>
655             <dt>Libraries
656             <dd><tt><i>OBJ_ROOT</i>/lib/Debug</tt>
657         </dl>
658         <p>
659
660         <dt>Release Builds
661         <dd>
662         <dl compact>
663             <dt>Tools
664             <dd><tt><i>OBJ_ROOT</i>/tools/Release</tt>
665             <dt>Libraries
666             <dd><tt><i>OBJ_ROOT</i>/lib/Release</tt>
667         </dl>
668         <p>
669
670         <dt>Profile Builds
671         <dd>
672         <dl compact>
673             <dt>Tools
674             <dd><tt><i>OBJ_ROOT</i>/tools/Profile</tt>
675             <dt>Libraries
676             <dd><tt><i>OBJ_ROOT</i>/lib/Profile</tt>
677         </dl>
678     </dl>
679
680     <!--=====================================================================-->
681     <center>
682     <h2><a name="layout"><b>Program Layout</b></a></h2>
683     </center>
684     <hr>
685     <!--=====================================================================-->
686
687     <p>
688     One useful source of information about the LLVM source base is the LLVM <a
689     href="http://www.doxygen.org">doxygen</a> documentation, available at <tt><a
690     href="http://llvm.cs.uiuc.edu/doxygen/">http://llvm.cs.uiuc.edu/doxygen/</a></tt>.
691     The following is a brief introduction to code layout:
692     </p>
693
694     <!------------------------------------------------------------------------->
695     <h3><a name="cvsdir"><tt>CVS</tt> directories</a></h3>
696     <!------------------------------------------------------------------------->
697
698     Every directory checked out of CVS will contain a <tt>CVS</tt> directory;
699     for the most part these can just be ignored.
700
701
702     <!------------------------------------------------------------------------->
703     <h3><a name="include"><tt>llvm/include</tt></a></h3>
704     <!------------------------------------------------------------------------->
705
706     This directory contains public header files exported from the LLVM
707     library. The three main subdirectories of this directory are:<p>
708
709     <ol>
710        <li><tt>llvm/include/llvm</tt> - This directory contains all of the LLVM
711        specific header files.  This directory also has subdirectories for
712        different portions of LLVM: <tt>Analysis</tt>, <tt>CodeGen</tt>,
713        <tt>Target</tt>, <tt>Transforms</tt>, etc...
714
715        <li><tt>llvm/include/Support</tt> - This directory contains generic
716        support libraries that are independent of LLVM, but are used by LLVM.
717        For example, some C++ STL utilities and a Command Line option processing
718        library store their header files here.
719
720        <li><tt>llvm/include/Config</tt> - This directory contains header files
721        configured by the <tt>configure</tt> script.  They wrap "standard" UNIX
722        and C header files.  Source code can include these header files which
723        automatically take care of the conditional #includes that the
724        <tt>configure</tt> script generates.
725     </ol>
726
727     <!------------------------------------------------------------------------->
728     <h3><a name="lib"><tt>llvm/lib</tt></a></h3>
729     <!------------------------------------------------------------------------->
730
731     This directory contains most of the source files of the LLVM system. In
732     LLVM, almost all
733     code exists in libraries, making it very easy to share code among the
734     different <a href="#tools">tools</a>.<p>
735
736      <dl compact>
737       <dt><tt>llvm/lib/VMCore/</tt><dd> This directory holds the core LLVM
738       source files that implement core classes like Instruction and BasicBlock.
739
740       <dt><tt>llvm/lib/AsmParser/</tt><dd> This directory holds the source code
741       for the LLVM assembly language parser library.
742
743       <dt><tt>llvm/lib/ByteCode/</tt><dd> This directory holds code for reading
744       and write LLVM bytecode.
745
746       <dt><tt>llvm/lib/CWriter/</tt><dd> This directory implements the LLVM to C
747       converter.
748
749       <dt><tt>llvm/lib/Analysis/</tt><dd> This directory contains a variety of
750       different program analyses, such as Dominator Information, Call Graphs,
751       Induction Variables, Interval Identification, Natural Loop Identification,
752       etc...
753
754       <dt><tt>llvm/lib/Transforms/</tt><dd> This directory contains the source
755       code for the LLVM to LLVM program transformations, such as Aggressive Dead
756       Code Elimination, Sparse Conditional Constant Propagation, Inlining, Loop
757       Invariant Code Motion, Dead Global Elimination, and many others...
758
759       <dt><tt>llvm/lib/Target/</tt><dd> This directory contains files that
760       describe various target architectures for code generation.  For example,
761       the llvm/lib/Target/Sparc directory holds the Sparc machine
762       description.<br>
763               
764       <dt><tt>llvm/lib/CodeGen/</tt><dd> This directory contains the major parts
765       of the code generator: Instruction Selector, Instruction Scheduling, and
766       Register Allocation.
767
768       <dt><tt>llvm/lib/Support/</tt><dd> This directory contains the source code
769       that corresponds to the header files located in
770       <tt>llvm/include/Support/</tt>.
771     </dl>
772
773     <!------------------------------------------------------------------------->
774     <h3><a name="runtime"><tt>llvm/runtime</tt></a></h3>
775     <!------------------------------------------------------------------------->
776
777     <p>
778     This directory contains libraries which are compiled into LLVM bytecode and
779     used when linking programs with the GCC front end.  Most of these libraries
780     are skeleton versions of real libraries; for example, libc is a stripped down
781     version of glibc.
782     </p>
783
784     <p>
785     Unlike the rest of the LLVM suite, this directory needs the LLVM GCC front end
786     to compile.
787     </p>
788
789     <!------------------------------------------------------------------------->
790     <h3><a name="test"><tt>llvm/test</tt></a></h3>
791     <!------------------------------------------------------------------------->
792
793     <p>This directory contains regression tests and source code that is used to
794     test the LLVM infrastructure.
795     </p>
796
797     <!------------------------------------------------------------------------->
798     <h3><a name="tools"><tt>llvm/tools</tt></a></h3>
799     <!------------------------------------------------------------------------->
800
801     <p>The <b>tools</b> directory contains the executables built out of the
802     libraries above, which form the main part of the user interface.  You can
803     always get help for a tool by typing <tt>tool_name --help</tt>.  The
804     following is a brief introduction to the most important tools.</p>
805
806     <dl compact>
807       <dt>
808
809       <dt><tt><b>analyze</b></tt><dd> <tt>analyze</tt> is used to run a specific
810       analysis on an input LLVM bytecode file and print out the results.  It is
811       primarily useful for debugging analyses, or familiarizing yourself with
812       what an analysis does.<p>
813
814       <dt><tt><b>bugpoint</b></tt><dd> <tt>bugpoint</tt> is used to debug
815       optimization passes or code generation backends by narrowing down the
816       given test case to the minimum number of passes and/or instructions that
817       still cause a problem, whether it is a crash or miscompilation. See <a
818       href="HowToSubmitABug.html">HowToSubmitABug.html</a> for more information
819       on using <tt>bugpoint</tt>.<p>
820
821       <dt><tt><b>llvm-ar</b></tt><dd>The archiver produces an archive containing
822       the given LLVM bytecode files, optionally with an index for faster
823       lookup.<p>
824       
825       <dt><tt><b>llvm-as</b></tt><dd>The assembler transforms the human readable
826       LLVM assembly to LLVM bytecode.<p>
827
828       <dt><tt><b>llvm-dis</b></tt><dd>The disassembler transforms the LLVM
829       bytecode to human readable LLVM assembly.  Additionally, it can convert
830       LLVM bytecode to C, which is enabled with the <tt>-c</tt> option.<p>
831
832       <dt><tt><b>llvm-link</b></tt><dd> <tt>llvm-link</tt>, not surprisingly,
833       links multiple LLVM modules into a single program.<p>
834       
835       <dt><tt><b>lli</b></tt><dd> <tt>lli</tt> is the LLVM interpreter, which
836       can directly execute LLVM bytecode (although very slowly...). In addition
837       to a simple interpreter, <tt>lli</tt> also has a tracing mode (entered by
838       specifying <tt>-trace</tt> on the command line). Finally, for
839       architectures that support it (currently only x86 and Sparc), by default,
840       <tt>lli</tt> will function as a Just-In-Time compiler (if the
841       functionality was compiled in), and will execute the code <i>much</i>
842       faster than the interpreter.<p>
843
844       <dt><tt><b>llc</b></tt><dd> <tt>llc</tt> is the LLVM backend compiler,
845       which translates LLVM bytecode to a SPARC or x86 assembly file.<p>
846
847       <dt><tt><b>llvmgcc</b></tt><dd> <tt>llvmgcc</tt> is a GCC-based C frontend
848       that has been retargeted to emit LLVM code as the machine code output.  It
849       works just like any other GCC compiler, taking the typical <tt>-c, -S, -E,
850       -o</tt> options that are typically used.  The source code for the
851       <tt>llvmgcc</tt> tool is currently not included in the LLVM CVS tree
852       because it is quite large and not very interesting.<p>
853
854       <ol>
855         <dt><tt><b>gccas</b></tt><dd> This tool is invoked by the
856         <tt>llvmgcc</tt> frontend as the "assembler" part of the compiler.  This
857         tool actually assembles LLVM assembly to LLVM bytecode,
858         performs a variety of optimizations, and outputs LLVM bytecode.  Thus
859         when you invoke <tt>llvmgcc -c x.c -o x.o</tt>, you are causing
860         <tt>gccas</tt> to be run, which writes the <tt>x.o</tt> file (which is
861         an LLVM bytecode file that can be disassembled or manipulated just like
862         any other bytecode file).  The command line interface to <tt>gccas</tt>
863         is designed to be as close as possible to the <b>system</b>
864         `<tt>as</tt>' utility so that the gcc frontend itself did not have to be
865         modified to interface to a "weird" assembler.<p>
866
867         <dt><tt><b>gccld</b></tt><dd> <tt>gccld</tt> links together several LLVM
868         bytecode files into one bytecode file and does some optimization.  It is
869         the linker invoked by the GCC frontend when multiple .o files need to be
870         linked together.  Like <tt>gccas</tt>, the command line interface of
871         <tt>gccld</tt> is designed to match the system linker, to aid
872         interfacing with the GCC frontend.<p>
873       </ol>
874
875       <dt><tt><b>opt</b></tt><dd> <tt>opt</tt> reads LLVM bytecode, applies a
876       series of LLVM to LLVM transformations (which are specified on the command
877       line), and then outputs the resultant bytecode.  The '<tt>opt --help</tt>'
878       command is a good way to get a list of the program transformations
879       available in LLVM.<p>
880
881     </dl>
882
883     <!------------------------------------------------------------------------->
884     <h3><a name="utils"><tt>llvm/utils</tt></a></h3>
885     <!------------------------------------------------------------------------->
886
887     This directory contains utilities for working with LLVM source code, and some
888     of the utilities are actually required as part of the build process because
889     they are code generators for parts of LLVM infrastructure.
890
891     <dl compact>
892       <td><tt><b>Burg/</b></tt><dd> <tt>Burg</tt> is an instruction selector
893       generator -- it builds trees on which it then performs pattern-matching to
894       select instructions according to the patterns the user has specified. Burg
895       is currently used in the Sparc V9 backend.<p>
896
897       <dt><tt><b>codegen-diff</b></tt><dd> <tt>codegen-diff</tt> is a script
898       that finds differences between code that LLC generates and code that LLI
899       generates. This is a useful tool if you are debugging one of them,
900       assuming that the other generates correct output. For the full user
901       manual, run <tt>`perldoc codegen-diff'</tt>.<p>
902
903       <dt><tt><b>cvsupdate</b></tt><dd> <tt>cvsupdate</tt> is a script that will
904       update your CVS tree, but produce a much cleaner and more organized output
905       than simply running <tt>`cvs -z3 up -dP'</tt> will. For example, it will group
906       together all the new and updated files and modified files in separate
907       sections, so you can see at a glance what has changed. If you are at the
908       top of your LLVM CVS tree, running <tt>utils/cvsupdate</tt> is the
909       preferred way of updating the tree.<p>
910
911       <dt><tt><b>emacs/</b></tt><dd> The <tt>emacs</tt> directory contains
912       syntax-highlighting files which will work with Emacs and XEmacs editors,
913       providing syntax highlighting support for LLVM assembly files and TableGen
914       description files. For information on how to use the syntax files, consult
915       the <tt>README</tt> file in that directory.<p>
916
917       <dt><tt><b>getsrcs.sh</b></tt><dd> The <tt>getsrcs.sh</tt> script finds
918       and outputs all non-generated source files, which is useful if one wishes
919       to do a lot of development across directories and does not want to
920       individually find each file. One way to use it is to run, for example:
921       <tt>xemacs `utils/getsources.sh`</tt> from the top of your LLVM source
922       tree.<p>
923       
924       <dt><tt><b>makellvm</b></tt><dd> The <tt>makellvm</tt> script compiles all
925       files in the current directory and then compiles and links the tool that
926       is the first argument. For example, assuming you are in the directory
927       <tt>llvm/lib/Target/Sparc</tt>, if <tt>makellvm</tt> is in your path,
928       simply running <tt>makellvm llc</tt> will make a build of the current
929       directory, switch to directory <tt>llvm/tools/llc</tt> and build it,
930       causing a re-linking of LLC.<p>
931
932       <dt><tt><b>NightlyTest.pl</b></tt> and
933       <tt><b>NightlyTestTemplate.html</b></tt><dd> These files are used in a
934       cron script to generate nightly status reports of the functionality of
935       tools, and the results can be seen by following the appropriate link on
936       the <a href="http://llvm.cs.uiuc.edu/">LLVM homepage</a>.<p>
937
938       <dt><tt><b>TableGen/</b></tt><dd> The <tt>TableGen</tt> directory contains
939       the tool used to generate register descriptions, instruction set
940       descriptions, and even assemblers from common TableGen description
941       files.<p>
942
943       <dt><tt><b>vim/</b></tt><dd> The <tt>vim</tt> directory contains
944       syntax-highlighting files which will work with the VIM editor, providing
945       syntax highlighting support for LLVM assembly files and TableGen
946       description files. For information on how to use the syntax files, consult
947       the <tt>README</tt> file in that directory.<p>
948  
949     </dl>
950
951     <!--=====================================================================-->
952     <h2>
953     <center><a name="tutorial">An Example Using the LLVM Tool Chain</center>
954     </h2>
955     <hr>
956     <!--=====================================================================-->
957
958     <ol>
959     <li>First, create a simple C file, name it 'hello.c':
960        <pre>
961    #include &lt;stdio.h&gt;
962    int main() {
963      printf("hello world\n");
964      return 0;
965    }
966        </pre>
967
968     <li>Next, compile the C file into a LLVM bytecode file:<p>
969
970       <tt>% llvmgcc hello.c -o hello</tt><p>
971
972       This will create two result files: <tt>hello</tt> and
973       <tt>hello.bc</tt>. The <tt>hello.bc</tt> is the LLVM bytecode that
974       corresponds the the compiled program and the library facilities that it
975       required.  <tt>hello</tt> is a simple shell script that runs the bytecode
976       file with <tt>lli</tt>, making the result directly executable.<p>
977
978     <li>Run the program. To make sure the program ran, execute one of the
979     following commands:<p>
980       
981       <tt>% ./hello</tt><p>
982  
983       or<p>
984
985       <tt>% lli hello.bc</tt><p>
986
987     <li>Use the <tt>llvm-dis</tt> utility to take a look at the LLVM assembly
988     code:<p>
989
990       <tt>% llvm-dis < hello.bc | less</tt><p>
991
992     <li>Compile the program to native Sparc assembly using the code
993     generator (assuming you are currently on a Sparc system):<p>
994
995       <tt>% llc hello.bc -o hello.s</tt><p>
996
997     <li>Assemble the native sparc assemble file into a program:<p>
998
999       <tt>% /opt/SUNWspro/bin/cc -xarch=v9 hello.s -o hello.sparc</tt><p>
1000
1001     <li>Execute the native sparc program:<p>
1002
1003       <tt>% ./hello.sparc</tt><p>
1004
1005     </ol>
1006
1007
1008     <!--=====================================================================-->
1009     <h2>
1010     <center><a name="problems">Common Problems</a></center>
1011     </h2>
1012     <hr>
1013     <!--=====================================================================-->
1014
1015     If you are having problems building or using LLVM, or if you have any other
1016     general questions about LLVM, please consult the
1017         <a href="FAQ.html">Frequently Asked Questions</a> page.
1018
1019     <!--=====================================================================-->
1020     <h2><center><a name="links">Links</a></center></h2>
1021     <hr>
1022     <!--=====================================================================-->
1023
1024     <p>This document is just an <b>introduction</b> to how to use LLVM to do
1025     some simple things... there are many more interesting and complicated things
1026     that you can do that aren't documented here (but we'll gladly accept a patch
1027     if you want to write something up!).  For more information about LLVM, check
1028     out:</p>
1029
1030     <ul>
1031     <li><a href="http://llvm.cs.uiuc.edu/">LLVM homepage</a></li>
1032     <li><a href="http://llvm.cs.uiuc.edu/doxygen/">LLVM doxygen tree</a></li>
1033     <li><a href="http://llvm.cs.uiuc.edu/docs/Projects.html">Starting a Project that Uses LLVM</a></li>
1034     </ul>
1035
1036     <hr>
1037
1038     If you have any questions or run into any snags (or you have any
1039     additions...), please send an email to
1040     <a href="mailto:sabre@nondot.org">Chris Lattner</a>.</p>
1041     <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a>
1042     <br>
1043
1044         <!-- Created: Mon Jul  1 02:29:02 CDT 2002 -->
1045         <!-- hhmts start -->
1046     Last modified: Mon Oct 27 12:00:00 CDT 2003
1047     <!-- hhmts end -->
1048   </body>
1049 </html>