blob: 69c552f82f991570640cba89813b2f677a57e78a [file] [log] [blame]
Misha Brukman00c73d22003-11-07 19:43:14 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
Guochun Shif4688a82002-07-17 23:05:56 +00003<html>
Misha Brukman00c73d22003-11-07 19:43:14 +00004<head>
5 <title>Getting Started with LLVM System</title>
6 <link rel="stylesheet" href="llvm.css" type="text/css">
7</head>
8<body>
John Criswell85ed3612003-06-12 19:34:44 +00009
Misha Brukman00c73d22003-11-07 19:43:14 +000010<div class="doc_title">
11 Getting Started with the LLVM System
12</div>
John Criswell85ed3612003-06-12 19:34:44 +000013
Misha Brukman00c73d22003-11-07 19:43:14 +000014<ul>
15 <li><a href="#overview">Overview</a>
16 <li><a href="#quickstart">Getting Started Quickly (A Summary)</a>
17 <li><a href="#requirements">Requirements</a>
Chris Lattner96768ea2003-02-14 04:22:13 +000018 <ol>
Misha Brukman00c73d22003-11-07 19:43:14 +000019 <li><a href="#hardware">Hardware</a>
20 <li><a href="#software">Software</a>
21 </ol></li>
John Criswell7a73b802003-06-30 21:59:07 +000022
Misha Brukman00c73d22003-11-07 19:43:14 +000023 <li><a href="#starting">Getting Started with LLVM</a>
John Criswell0b459202003-07-08 20:35:59 +000024 <ol>
Misha Brukman00c73d22003-11-07 19:43:14 +000025 <li><a href="#terminology">Terminology and Notation</a>
26 <li><a href="#environment">Setting Up Your Environment</a>
27 <li><a href="#unpack">Unpacking the LLVM Archives</a>
28 <li><a href="#checkout">Checkout LLVM from CVS</a>
29 <li><a href="#installcf">Install the GCC Front End</a>
30 <li><a href="#config">Local LLVM Configuration</a>
31 <li><a href="#compile">Compiling the LLVM Suite Source Code</a>
32 <li><a href="#objfiles">The Location of LLVM Object Files</a>
Chris Lattnera553f622004-03-25 20:38:40 +000033 <li><a href="#optionalconfig">Optional Configuration Items</a>
Misha Brukman00c73d22003-11-07 19:43:14 +000034 </ol></li>
John Criswell0b459202003-07-08 20:35:59 +000035
Misha Brukman00c73d22003-11-07 19:43:14 +000036 <li><a href="#layout">Program layout</a>
37 <ol>
38 <li><a href="#cvsdir"><tt>CVS</tt> directories</a>
39 <li><a href="#include"><tt>llvm/include</tt></a>
40 <li><a href="#lib"><tt>llvm/lib</tt></a>
41 <li><a href="#runtime"><tt>llvm/runtime</tt></a>
42 <li><a href="#test"><tt>llvm/test</tt></a>
43 <li><a href="#tools"><tt>llvm/tools</tt></a>
44 <li><a href="#utils"><tt>llvm/utils</tt></a>
45 </ol></li>
John Criswell0f6d7c02003-10-27 18:18:16 +000046
Misha Brukman00c73d22003-11-07 19:43:14 +000047 <li><a href="#tutorial">An Example Using the LLVM Tool Chain</a>
48 <li><a href="#problems">Common Problems</a>
49 <li><a href="#links">Links</a>
50</ul>
51
52<p>By:
Misha Brukman00c73d22003-11-07 19:43:14 +000053 <a href="mailto:criswell@uiuc.edu">John Criswell</a>,
Chris Lattnera553f622004-03-25 20:38:40 +000054 <a href="mailto:sabre@nondot.org">Chris Lattner</a>,
55 <a href="http://misha.brukman.net">Misha Brukman</a>,
56 <a href="http://www.cs.uiuc.edu/~vadve">Vikram Adve</a>, and
57 <a href="mailto:gshi1@uiuc.edu">Guochun Shi</a>.</p>
Misha Brukman00c73d22003-11-07 19:43:14 +000058
59
60<!-- *********************************************************************** -->
61<div class="doc_section">
62 <a name="overview"><b>Overview</b></a>
63</div>
64<!-- *********************************************************************** -->
65
66<div class="doc_text">
67
68<p>Welcome to LLVM! In order to get started, you first need to know some
69basic information.</p>
70
71<p>First, LLVM comes in two pieces. The first piece is the LLVM suite. This
72contains all of the tools, libraries, and header files needed to use the low
73level virtual machine. It contains an assembler, disassembler, bytecode
74analyzer, and bytecode optimizer. It also contains a test suite that can be
75used to test the LLVM tools and the GCC front end.</p>
76
77<p>The second piece is the GCC front end. This component provides a version of
78GCC that compiles C and C++ code into LLVM bytecode. Currently, the GCC front
79end is a modified version of GCC 3.4 (we track the GCC 3.4 development). Once
80compiled into LLVM bytecode, a program can be manipulated with the LLVM tools
81from the LLVM suite.</p>
82
83</div>
84
85<!-- *********************************************************************** -->
86<div class="doc_section">
87 <a name="quickstart"><b>Getting Started Quickly (A Summary)</b></a>
88</div>
89<!-- *********************************************************************** -->
90
91<div class="doc_text">
92
93<p>Here's the short story for getting up and running quickly with LLVM:</p>
94
95<ol>
96 <li>Install the GCC front end:
97 <ol>
98 <li><tt>cd <i>where-you-want-the-C-front-end-to-live</i></tt>
99 <li><tt>gunzip --stdout cfrontend.<i>platform</i>.tar.gz | tar -xvf -</tt>
John Criswell364cec42004-03-12 20:31:37 +0000100 <li><b>Sparc and MacOS X Only:</b><br>
101 <tt>cd cfrontend/<i>platform</i><br>
Misha Brukman00c73d22003-11-07 19:43:14 +0000102 ./fixheaders</tt>
103 </ol></li>
104
105 <li>Get the Source Code
106 <ul>
107 <li>With the distributed files:
108 <ol>
109 <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
John Criswell364cec42004-03-12 20:31:37 +0000110 <li><tt>gunzip --stdout llvm-<i>version</i>.tar.gz | tar -xvf -</tt>
Misha Brukman00c73d22003-11-07 19:43:14 +0000111 <li><tt>cd llvm</tt>
112 </ol></li>
113
114 <li>With anonymous CVS access:
115 <ol>
116 <li><tt>cd <i>where-you-want-llvm-to-live</i></tt></li>
117 <li><tt>cvs -d
118 :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm login</tt></li>
119 <li>Hit the return key when prompted for the password.
120 <li><tt>cvs -z3 -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm
121 co llvm</tt></li>
122 <li><tt>cd llvm</tt></li>
123 </ol></li>
124 </ul></li>
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. Useful options include:
131 <ul>
132 <li><tt>--with-llvmgccdir=<i>directory</i></tt>
John Criswelld000e1d2003-12-18 16:43:17 +0000133 <p>Specify the full pathname of where the LLVM GCC frontend is
134 installed.</p></li>
Misha Brukman00c73d22003-11-07 19:43:14 +0000135 <li><tt>--enable-spec2000=<i>directory</i></tt>
136 <p>Enable the SPEC2000 benchmarks for testing. The SPEC2000
137 benchmarks should be available in
138 <tt><i>directory</i></tt>.</p></li>
139 </ul>
140 </ol></li>
141
142 <li>Build the LLVM Suite:
143 <ol>
144 <li>Set your LLVM_LIB_SEARCH_PATH environment variable.
145 <li><tt>gmake -k |& tee gnumake.out
146 &nbsp;&nbsp;&nbsp;# this is csh or tcsh syntax</tt>
147 </ol>
148
149</ol>
150
151<p>Consult the <a href="starting">Getting Started with LLVM</a> section for
152detailed information on configuring and compiling LLVM. See <a
153href="#environment">Setting Up Your Environment</a> for tips that simplify
154working with the GCC front end and LLVM tools. Go to <a href="#layout">Program
155Layout</a> to learn about the layout of the source code tree.</p>
156
157</div>
158
159<!-- *********************************************************************** -->
160<div class="doc_section">
161 <a name="requirements"><b>Requirements</b></a>
162</div>
163<!-- *********************************************************************** -->
164
165<div class="doc_text">
166
167<p>Before you begin to use the LLVM system, review the requirements given below.
168This may save you some trouble by knowing ahead of time what hardware and
169software you will need.</p>
170
171</div>
172
173<!-- ======================================================================= -->
174<div class="doc_subsection">
175 <a name="hardware"><b>Hardware</b></a>
176</div>
177
178<div class="doc_text">
179
180<p>LLVM is known to work on the following platforms:</p>
181
182<ul>
183
184 <li>Linux on x86 (Pentium and above)
185 <ul>
John Criswelld1799612004-03-29 20:23:11 +0000186 <li>Approximately 1.02 GB of Free Disk Space
Misha Brukman00c73d22003-11-07 19:43:14 +0000187 <ul>
John Criswelld1799612004-03-29 20:23:11 +0000188 <li>Source code: 45 MB</li>
189 <li>Object code: 956 MB</li>
John Criswelld000e1d2003-12-18 16:43:17 +0000190 <li>GCC front end: 40 MB</li>
Misha Brukman00c73d22003-11-07 19:43:14 +0000191 </ul></li>
John Criswelld000e1d2003-12-18 16:43:17 +0000192 </ul>
193 </li>
194
Misha Brukman00c73d22003-11-07 19:43:14 +0000195 <li>Solaris on SparcV9 (Ultrasparc)
196 <ul>
John Criswelld1799612004-03-29 20:23:11 +0000197 <li>Approximately 1.75 GB of Free Disk Space
Misha Brukman00c73d22003-11-07 19:43:14 +0000198 <ul>
John Criswelld1799612004-03-29 20:23:11 +0000199 <li>Source code: 45 MB</li>
200 <li>Object code: 1705 MB</li>
John Criswelld000e1d2003-12-18 16:43:17 +0000201 <li>GCC front end: 50 MB</li>
Misha Brukman00c73d22003-11-07 19:43:14 +0000202 </ul></li>
John Criswelld000e1d2003-12-18 16:43:17 +0000203 </ul>
204 </li>
Misha Brukman00c73d22003-11-07 19:43:14 +0000205
John Criswelld000e1d2003-12-18 16:43:17 +0000206 <li>FreeBSD on x86 (Pentium and above)
207 <ul>
John Criswelld1799612004-03-29 20:23:11 +0000208 <li>Approximately 935 MB of Free Disk Space
John Criswelld000e1d2003-12-18 16:43:17 +0000209 <ul>
John Criswelld1799612004-03-29 20:23:11 +0000210 <li>Source code: 45 MB</li>
John Criswelld000e1d2003-12-18 16:43:17 +0000211 <li>Object code: 850 MB</li>
212 <li>GCC front end: 40 MB</li>
213 </ul></li>
214 </ul>
215 </li>
216
John Criswelld000e1d2003-12-18 16:43:17 +0000217 <li>MacOS X on PowerPC
218 <ul>
219 <li>No native code generation
John Criswelld1799612004-03-29 20:23:11 +0000220 <li>Approximately 1.25 GB of Free Disk Space
John Criswelld000e1d2003-12-18 16:43:17 +0000221 <ul>
John Criswelld1799612004-03-29 20:23:11 +0000222 <li>Source code: 45 MB</li>
John Criswelld000e1d2003-12-18 16:43:17 +0000223 <li>Object code: 1160 MB</li>
224 <li>GCC front end: 40 MB</li>
225 </ul></li>
226 </ul>
227
228 </li>
Misha Brukman00c73d22003-11-07 19:43:14 +0000229</ul>
230
231<p>The LLVM suite <i>may</i> compile on other platforms, but it is not
232guaranteed to do so. If compilation is successful, the LLVM utilities should be
233able to assemble, disassemble, analyze, and optimize LLVM bytecode. Code
234generation should work as well, although the generated native code may not work
235on your platform.</p>
236
237<p>The GCC front end is not very portable at the moment. If you want to get it
238to work on another platform, you can download a copy of the source and try to
239compile it on your platform.</p>
240
241</div>
242
243<!-- ======================================================================= -->
244<div class="doc_subsection">
245 <a name="software"><b>Software</b></a>
246</div>
247
248<div class="doc_text">
249
250<p>Compiling LLVM requires that you have several software packages
251installed:</p>
252
253<ul>
254 <li><a href="http://gcc.gnu.org">GCC 3.x with C and C++ language
255 support</a></li>
256
257 <li><a href="http://savannah.gnu.org/projects/make">GNU Make</a></li>
258
259 <li><a href="http://www.gnu.org/software/flex">Flex</a></li>
260
261 <li><a href="http://www.gnu.org/software/bison/bison.html">Bison</a></li>
262</ul>
263
264<p>There are some additional tools that you may want to have when working with
265LLVM:</p>
266
267<ul>
Brian Gaeke5c681b62004-02-08 07:49:04 +0000268 <li><A href="http://www.gnu.org/software/automake">GNU Automake</A></li>
269 <li><A href="http://www.gnu.org/software/autoconf">GNU Autoconf</A></li>
Misha Brukman00c73d22003-11-07 19:43:14 +0000270 <li><A href="http://savannah.gnu.org/projects/m4">GNU M4</A>
271
272 <p>If you want to make changes to the configure scripts, you will need GNU
273 autoconf (2.57 or higher), and consequently, GNU M4 (version 1.4 or
Brian Gaeke5c681b62004-02-08 07:49:04 +0000274 higher). You will also need automake. Any old version of
275 automake from 1.4p5 on should work; we only use aclocal from that
276 package.</p></li>
Misha Brukman00c73d22003-11-07 19:43:14 +0000277
John Criswelld1799612004-03-29 20:23:11 +0000278 <li><A href="http://www.codesourcery.com/qm/qmtest">QMTest 2.0.3</A></li>
Misha Brukman00c73d22003-11-07 19:43:14 +0000279 <li><A href="http://www.python.org">Python</A>
280
John Criswelld1799612004-03-29 20:23:11 +0000281 <p>
282 These are needed to use the LLVM test suite. Please note that newer
283 versions of QMTest may not work with the LLVM test suite. QMTest 2.0.3
284 can be retrieved from the QMTest CVS repository using the following
Misha Brukmanb9be2bf2004-05-12 19:25:59 +0000285 commands:</p>
John Criswelld1799612004-03-29 20:23:11 +0000286 <ul>
287 <li><tt>cvs -d :pserver:anoncvs@cvs.codesourcery.com:/home/qm/Repository login</tt>
288 </li>
289 <li>When prompted, use <tt>anoncvs</tt> as the password.
290 </li>
291 <li><tt>cvs -d :pserver:anoncvs@cvs.codesourcery.com:/home/qm/Repository co -r release-2-0-3 qm</tt>
292 </li>
293 </ul>
Misha Brukmanb9be2bf2004-05-12 19:25:59 +0000294 </li>
Misha Brukman00c73d22003-11-07 19:43:14 +0000295
296</ul>
297
Misha Brukman00c73d22003-11-07 19:43:14 +0000298<p>The remainder of this guide is meant to get you up and running with
299LLVM and to give you some basic information about the LLVM environment.
300A <a href="#starting">complete guide to installation</a> is provided in the
301next section.</p>
302
303<p>The later sections of this guide describe the <a
304href="#layout">general layout</a> of the the LLVM source tree, a <a
305href="#tutorial">simple example</a> using the LLVM tool chain, and <a
306href="#links">links</a> to find more information about LLVM or to get
307help via e-mail.</p>
308
309</div>
310
311<!-- *********************************************************************** -->
312<div class="doc_section">
313 <a name="starting"><b>Getting Started with LLVM</b></a>
314</div>
315<!-- *********************************************************************** -->
316
317<!-- ======================================================================= -->
318<div class="doc_subsection">
319 <a name="terminology">Terminology and Notation</a>
320</div>
321
322<div class="doc_text">
323
324<p>Throughout this manual, the following names are used to denote paths
325specific to the local system and working environment. <i>These are not
326environment variables you need to set but just strings used in the rest
327of this document below</i>. In any of the examples below, simply replace
328each of these names with the appropriate pathname on your local system.
329All these paths are absolute:</p>
330
Misha Brukman54111c42004-01-20 00:20:17 +0000331<dl>
Misha Brukman00c73d22003-11-07 19:43:14 +0000332 <dt>SRC_ROOT
333 <dd>
334 This is the top level directory of the LLVM source tree.
John Criswell0f6d7c02003-10-27 18:18:16 +0000335 <p>
336
Misha Brukman00c73d22003-11-07 19:43:14 +0000337 <dt>OBJ_ROOT
338 <dd>
339 This is the top level directory of the LLVM object tree (i.e. the
340 tree where object files and compiled programs will be placed. It
341 can be the same as SRC_ROOT).
342 <p>
343
344 <dt>LLVMGCCDIR
345 <dd>
346 This is the where the LLVM GCC Front End is installed.
347 <p>
348 For the pre-built GCC front end binaries, the LLVMGCCDIR is
349 <tt>cfrontend/<i>platform</i>/llvm-gcc</tt>.
350</dl>
351
352</div>
353
354<!-- ======================================================================= -->
355<div class="doc_subsection">
356 <a name="environment">Setting Up Your Environment</a>
357</div>
358
359<div class="doc_text">
360
361<p>
362In order to compile and use LLVM, you will need to set some environment
363variables. There are also some shell aliases which you may find useful.
364You can set these on the command line, or better yet, set them in your
365<tt>.cshrc</tt> or <tt>.profile</tt>.
366
Misha Brukman54111c42004-01-20 00:20:17 +0000367<dl>
Misha Brukman00c73d22003-11-07 19:43:14 +0000368 <dt><tt>LLVM_LIB_SEARCH_PATH</tt>=<tt><i>LLVMGCCDIR</i>/bytecode-libs</tt>
369 <dd>
370 This environment variable helps the LLVM GCC front end find bytecode
371 libraries that it will need for compilation.
372 <p>
373
374 <dt>alias llvmgcc <i>LLVMGCCDIR</i><tt>/bin/gcc</tt>
375 <dt>alias llvmg++ <i>LLVMGCCDIR</i><tt>/bin/g++</tt>
376 <dd>
377 This alias allows you to use the LLVM C and C++ front ends without putting
378 them in your <tt>PATH</tt> or typing in their complete pathnames.
379</dl>
380
381</div>
382
383<!-- ======================================================================= -->
384<div class="doc_subsection">
Misha Brukman54111c42004-01-20 00:20:17 +0000385 <a name="unpack">Unpacking the LLVM Archives</a>
Misha Brukman00c73d22003-11-07 19:43:14 +0000386</div>
387
388<div class="doc_text">
389
390<p>
391If you have the LLVM distribution, you will need to unpack it before you
John Criswelld000e1d2003-12-18 16:43:17 +0000392can begin to compile it. LLVM is distributed as a set of two files: the LLVM
393suite and the LLVM GCC front end compiled for your platform. Each
Misha Brukman00c73d22003-11-07 19:43:14 +0000394file is a TAR archive that is compressed with the gzip program.
395</p>
396
John Criswelld000e1d2003-12-18 16:43:17 +0000397<p> The files are as follows:
Misha Brukman54111c42004-01-20 00:20:17 +0000398<dl>
John Criswell364cec42004-03-12 20:31:37 +0000399 <dt>llvm-1.2.tar.gz
Misha Brukman00c73d22003-11-07 19:43:14 +0000400 <dd>This is the source code to the LLVM suite.
401 <p>
402
John Criswell364cec42004-03-12 20:31:37 +0000403 <dt>cfrontend-1.2.sparc-sun-solaris2.8.tar.gz
Misha Brukman00c73d22003-11-07 19:43:14 +0000404 <dd>This is the binary release of the GCC front end for Solaris/Sparc.
405 <p>
406
John Criswell364cec42004-03-12 20:31:37 +0000407 <dt>cfrontend-1.2.i686-redhat-linux-gnu.tar.gz
Misha Brukman00c73d22003-11-07 19:43:14 +0000408 <dd>This is the binary release of the GCC front end for Linux/x86.
John Criswelld000e1d2003-12-18 16:43:17 +0000409 <p>
410
John Criswell364cec42004-03-12 20:31:37 +0000411 <dt>cfrontend-1.2.i386-unknown-freebsd5.1.tar.gz
John Criswelld000e1d2003-12-18 16:43:17 +0000412 <dd>This is the binary release of the GCC front end for FreeBSD/x86.
413 <p>
414
John Criswell364cec42004-03-12 20:31:37 +0000415 <dt>cfrontend-1.2.powerpc-apple-darwin7.0.0.tar.gz
John Criswelld000e1d2003-12-18 16:43:17 +0000416 <dd>This is the binary release of the GCC front end for MacOS X/PPC.
Misha Brukman00c73d22003-11-07 19:43:14 +0000417</dl>
418
419</div>
420
421<!-- ======================================================================= -->
422<div class="doc_subsection">
Misha Brukman54111c42004-01-20 00:20:17 +0000423 <a name="checkout">Checkout LLVM from CVS</a>
Misha Brukman00c73d22003-11-07 19:43:14 +0000424</div>
425
426<div class="doc_text">
427
428<p>If you have access to our CVS repository, you can get a fresh copy of
429the entire source code. All you need to do is check it out from CVS as
430follows:</p>
431
432<ul>
433<li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
434 <li><tt>cvs -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm login</tt>
435 <li>Hit the return key when prompted for the password.
436 <li><tt>cvs -z3 -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm co
437 llvm</tt>
438</ul>
439
440<p>This will create an '<tt>llvm</tt>' directory in the current
441directory and fully populate it with the LLVM source code, Makefiles,
442test directories, and local copies of documentation files.</p>
443
Misha Brukman54111c42004-01-20 00:20:17 +0000444<p>If you want to get a specific release (as opposed to the most recent
445revision), you can specify a label. The following releases have the following
446label:</p>
447
John Criswelld000e1d2003-12-18 16:43:17 +0000448<ul>
Misha Brukmanb9be2bf2004-05-12 19:25:59 +0000449<li>Release 1.2: <b>RELEASE_12</b></li>
450<li>Release 1.1: <b>RELEASE_11</b></li>
451<li>Release 1.0: <b>RELEASE_1</b></li>
John Criswelld000e1d2003-12-18 16:43:17 +0000452</ul>
John Criswelld000e1d2003-12-18 16:43:17 +0000453
Misha Brukmanb9be2bf2004-05-12 19:25:59 +0000454<p>If you would like to get the GCC front end source code, you can also get it
455from the CVS repository:</p>
456
457<pre>cvs -z3 -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm co llvm-gcc
458</pre>
Misha Brukman00c73d22003-11-07 19:43:14 +0000459
460</div>
461
462<!-- ======================================================================= -->
463<div class="doc_subsection">
Misha Brukman54111c42004-01-20 00:20:17 +0000464 <a name="installcf">Install the GCC Front End</a>
Misha Brukman00c73d22003-11-07 19:43:14 +0000465</div>
466
467<div class="doc_text">
468
469<p>Before configuring and compiling the LLVM suite, you need to extract the LLVM
470GCC front end from the binary distribution. It is used for building the
471bytecode libraries later used by the GCC front end for linking programs, and its
472location must be specified when the LLVM suite is configured.</p>
473
474<p>To install the GCC front end, do the following:</p>
475
476<ol>
477 <li><tt>cd <i>where-you-want-the-front-end-to-live</i></tt></li>
John Criswelld000e1d2003-12-18 16:43:17 +0000478 <li><tt>gunzip --stdout cfrontend-<i>version</i>.<i>platform</i>.tar.gz | tar -xvf
Misha Brukman00c73d22003-11-07 19:43:14 +0000479 -</tt></li>
480</ol>
481
John Criswelld000e1d2003-12-18 16:43:17 +0000482<p>If you are using Solaris/Sparc or MacOS X/PPC, you will need to fix the
483header files:</p>
Misha Brukman00c73d22003-11-07 19:43:14 +0000484
John Criswell364cec42004-03-12 20:31:37 +0000485<p><tt>cd cfrontend/<i>platform</i><br>
Misha Brukman00c73d22003-11-07 19:43:14 +0000486 ./fixheaders</tt></p>
487
488<p>The binary versions of the GCC front end may not suit all of your needs. For
489example, the binary distribution may include an old version of a system header
490file, not "fix" a header file that needs to be fixed for GCC, or it may be
491linked with libraries not available on your system.</p>
492
493<p>In cases like these, you may want to try <a
494href="CFEBuildInstrs.html">building the GCC front end from source.</a> This is
495not for the faint of heart, so be forewarned.</p>
496
497</div>
498
499<!-- ======================================================================= -->
500<div class="doc_subsection">
501 <a name="config">Local LLVM Configuration</a>
502</div>
503
504<div class="doc_text">
505
506<p>Once checked out from the CVS repository, the LLVM suite source code must be
507configured via the <tt>configure</tt> script. This script sets variables in
508<tt>llvm/Makefile.config</tt> and <tt>llvm/include/Config/config.h</tt>. It
John Criswelld000e1d2003-12-18 16:43:17 +0000509also populates <i>OBJ_ROOT</i> with the Makefiles needed to begin building
510LLVM.</p>
Misha Brukman00c73d22003-11-07 19:43:14 +0000511
512<p>The following environment variables are used by the <tt>configure</tt>
513script to configure the build system:</p>
514
515<table border=1>
516 <tr>
517 <th>Variable</th>
518 <th>Purpose</th>
519 </tr>
520
521 <tr>
522 <td>CC</td>
523 <td>Tells <tt>configure</tt> which C compiler to use. By default,
524 <tt>configure</tt> will look for the first GCC C compiler in
525 <tt>PATH</tt>. Use this variable to override
526 <tt>configure</tt>'s default behavior.</td>
527 </tr>
528
529 <tr>
530 <td>CXX</td>
531 <td>Tells <tt>configure</tt> which C++ compiler to use. By default,
532 <tt>configure</tt> will look for the first GCC C++ compiler in
533 <tt>PATH</tt>. Use this variable to override
534 <tt>configure</tt>'s default behavior.</td>
535 </tr>
536</table>
537
538<p>The following options can be used to set or enable LLVM specific options:</p>
539
Misha Brukman54111c42004-01-20 00:20:17 +0000540<dl>
Misha Brukman00c73d22003-11-07 19:43:14 +0000541 <dt><i>--with-llvmgccdir=LLVMGCCDIR</i>
542 <dd>
John Criswell364cec42004-03-12 20:31:37 +0000543 Path to the location where the LLVM GCC front end binaries and
John Criswelld000e1d2003-12-18 16:43:17 +0000544 associated libraries were installed. This must be specified as an
545 absolute pathname.
Misha Brukman00c73d22003-11-07 19:43:14 +0000546 <p>
547 <dt><i>--enable-optimized</i>
548 <dd>
549 Enables optimized compilation by default (debugging symbols are removed
550 and GCC optimization flags are enabled). The default is to use an
551 unoptimized build (also known as a debug build).
552 <p>
553 <dt><i>--enable-jit</i>
554 <dd>
John Criswelld000e1d2003-12-18 16:43:17 +0000555 Compile the Just In Time (JIT) compiler functionality. This is not
556 available
Misha Brukman00c73d22003-11-07 19:43:14 +0000557 on all platforms. The default is dependent on platform, so it is best
558 to explicitly enable it if you want it.
559 <p>
560 <dt><i>--enable-spec2000</i>
561 <dt><i>--enable-spec2000=&lt;<tt>directory</tt>&gt;</i>
562 <dd>
563 Enable the use of SPEC2000 when testing LLVM. This is disabled by default
564 (unless <tt>configure</tt> finds SPEC2000 installed). By specifying
565 <tt>directory</tt>, you can tell configure where to find the SPEC2000
566 benchmarks. If <tt>directory</tt> is left unspecified, <tt>configure</tt>
567 uses the default value
568 <tt>/home/vadve/shared/benchmarks/speccpu2000/benchspec</tt>.
John Criswell364cec42004-03-12 20:31:37 +0000569 <p>
570 <dt><i>--enable-spec95</i>
571 <dt><i>--enable-spec95=&lt;<tt>directory</tt>&gt;</i>
572 <dd>
573 Enable the use of SPEC95 when testing LLVM. It is similar to the
574 <i>--enable-spec2000</i> option.
575 <p>
576 <dt><i>--enable-povray</i>
577 <dt><i>--enable-povray=&lt;<tt>directory</tt>&gt;</i>
578 <dd>
579 Enable the use of Povray as an external test. Versions of Povray written
580 in C should work. This option is similar to the <i>--enable-spec2000</i>
581 option.
Misha Brukman00c73d22003-11-07 19:43:14 +0000582</dl>
583
584<p>To configure LLVM, follow these steps:</p>
585
586<ol>
587 <li>Change directory into the object root directory:
John Criswell0f6d7c02003-10-27 18:18:16 +0000588 <br>
Misha Brukman00c73d22003-11-07 19:43:14 +0000589 <tt>cd <i>OBJ_ROOT</i></tt>
John Criswell0f6d7c02003-10-27 18:18:16 +0000590 <p>
John Criswell0f6d7c02003-10-27 18:18:16 +0000591
Misha Brukman00c73d22003-11-07 19:43:14 +0000592 <li>Run the <tt>configure</tt> script located in the LLVM source tree:
593 <br>
594 <tt><i>SRC_ROOT</i>/configure</tt>
John Criswell0f6d7c02003-10-27 18:18:16 +0000595 <p>
Misha Brukman00c73d22003-11-07 19:43:14 +0000596</ol>
John Criswell85ed3612003-06-12 19:34:44 +0000597
Misha Brukman00c73d22003-11-07 19:43:14 +0000598<p>In addition to running <tt>configure</tt>, you must set the
599<tt>LLVM_LIB_SEARCH_PATH</tt> environment variable in your startup scripts.
600This environment variable is used to locate "system" libraries like
601"<tt>-lc</tt>" and "<tt>-lm</tt>" when linking. This variable should be set to
John Criswelld000e1d2003-12-18 16:43:17 +0000602the absolute path of the <tt>bytecode-libs</tt> subdirectory of the GCC front
603end, or <i>LLVMGCCDIR</i>/<tt>bytecode-libs</tt>. For example, one might set
Misha Brukman00c73d22003-11-07 19:43:14 +0000604<tt>LLVM_LIB_SEARCH_PATH</tt> to
John Criswelld000e1d2003-12-18 16:43:17 +0000605<tt>/home/vadve/lattner/local/x86/llvm-gcc/bytecode-libs</tt> for the x86
Misha Brukman00c73d22003-11-07 19:43:14 +0000606version of the GCC front end on our research machines.</p>
John Criswell7a73b802003-06-30 21:59:07 +0000607
Misha Brukman00c73d22003-11-07 19:43:14 +0000608</div>
John Criswell85ed3612003-06-12 19:34:44 +0000609
Misha Brukman00c73d22003-11-07 19:43:14 +0000610<!-- ======================================================================= -->
611<div class="doc_subsection">
612 <a name="compile">Compiling the LLVM Suite Source Code</a>
613</div>
John Criswell85ed3612003-06-12 19:34:44 +0000614
Misha Brukman00c73d22003-11-07 19:43:14 +0000615<div class="doc_text">
John Criswell0b459202003-07-08 20:35:59 +0000616
Misha Brukman00c73d22003-11-07 19:43:14 +0000617<p>Once you have configured LLVM, you can build it. There are three types of
618builds:</p>
John Criswell0b459202003-07-08 20:35:59 +0000619
Misha Brukman54111c42004-01-20 00:20:17 +0000620<dl>
Misha Brukman00c73d22003-11-07 19:43:14 +0000621 <dt>Debug Builds
John Criswellce760f62003-07-03 16:01:38 +0000622 <dd>
Misha Brukman00c73d22003-11-07 19:43:14 +0000623 These builds are the default when one types <tt>gmake</tt> (unless the
624 <tt>--enable-optimized</tt> option was used during configuration). The
625 build system will compile the tools and libraries with debugging
626 information.
627 <p>
628
629 <dt>Release (Optimized) Builds
John Criswellce760f62003-07-03 16:01:38 +0000630 <dd>
Misha Brukman00c73d22003-11-07 19:43:14 +0000631 These builds are enabled with the <tt>--enable-optimized</tt> option to
632 <tt>configure</tt> or by specifying <tt>ENABLE_OPTIMIZED=1</tt> on the
633 <tt>gmake</tt> command line. For these builds, the build system will
634 compile the tools and libraries with GCC optimizations enabled and strip
635 debugging information from the libraries and executables it generates.
636 <p>
637
638 <dt>Profile Builds
John Criswellce760f62003-07-03 16:01:38 +0000639 <dd>
Misha Brukman00c73d22003-11-07 19:43:14 +0000640 These builds are for use with profiling. They compile profiling
641 information into the code for use with programs like <tt>gprof</tt>.
642 Profile builds must be started by specifying <tt>ENABLE_PROFILING=1</tt>
643 on the <tt>gmake</tt> command line.
644</dl>
John Criswell7a73b802003-06-30 21:59:07 +0000645
Misha Brukman00c73d22003-11-07 19:43:14 +0000646<p>Once you have LLVM configured, you can build it by entering the
647<i>OBJ_ROOT</i> directory and issuing the following command:</p>
John Criswell20d2d3e2003-10-10 14:26:14 +0000648
Misha Brukman00c73d22003-11-07 19:43:14 +0000649<p><tt>gmake</tt></p>
John Criswell20d2d3e2003-10-10 14:26:14 +0000650
Misha Brukman00c73d22003-11-07 19:43:14 +0000651<p>If you have multiple processors in your machine, you may wish to use some of
652the parallel build options provided by GNU Make. For example, you could use the
653command:</p>
John Criswell85ed3612003-06-12 19:34:44 +0000654
Misha Brukman00c73d22003-11-07 19:43:14 +0000655<p><tt>gmake -j2</tt></p>
John Criswellce760f62003-07-03 16:01:38 +0000656
Misha Brukman00c73d22003-11-07 19:43:14 +0000657<p>There are several special targets which are useful when working with the LLVM
658source code:</p>
John Criswellce760f62003-07-03 16:01:38 +0000659
Misha Brukman54111c42004-01-20 00:20:17 +0000660<dl>
Misha Brukman00c73d22003-11-07 19:43:14 +0000661 <dt><tt>gmake clean</tt>
662 <dd>
663 Removes all files generated by the build. This includes object files,
664 generated C/C++ files, libraries, and executables.
665 <p>
John Criswellce760f62003-07-03 16:01:38 +0000666
Misha Brukman00c73d22003-11-07 19:43:14 +0000667 <dt><tt>gmake distclean</tt>
668 <dd>
669 Removes everything that <tt>gmake clean</tt> does, but also removes
670 files generated by <tt>configure</tt>. It attempts to return the
671 source tree to the original state in which it was shipped.
672 <p>
John Criswellce760f62003-07-03 16:01:38 +0000673
Misha Brukman00c73d22003-11-07 19:43:14 +0000674 <dt><tt>gmake install</tt>
675 <dd>
676 Installs LLVM files into the proper location. For the most part,
677 this does nothing, but it does install bytecode libraries into the
678 GCC front end's bytecode library directory. If you need to update
679 your bytecode libraries, this is the target to use once you've built
680 them.
681 <p>
682</dl>
John Criswellce760f62003-07-03 16:01:38 +0000683
Misha Brukman00c73d22003-11-07 19:43:14 +0000684<p>It is also possible to override default values from <tt>configure</tt> by
685declaring variables on the command line. The following are some examples:</p>
John Criswellce760f62003-07-03 16:01:38 +0000686
Misha Brukman54111c42004-01-20 00:20:17 +0000687<dl>
Misha Brukman00c73d22003-11-07 19:43:14 +0000688 <dt><tt>gmake ENABLE_OPTIMIZED=1</tt>
689 <dd>
690 Perform a Release (Optimized) build.
691 <p>
John Criswellce760f62003-07-03 16:01:38 +0000692
Misha Brukman00c73d22003-11-07 19:43:14 +0000693 <dt><tt>gmake ENABLE_PROFILING=1</tt>
694 <dd>
695 Perform a Profiling build.
696 <p>
John Criswellce760f62003-07-03 16:01:38 +0000697
Misha Brukman00c73d22003-11-07 19:43:14 +0000698 <dt><tt>gmake VERBOSE=1</tt>
699 <dd>
700 Print what <tt>gmake</tt> is doing on standard output.
701 <p>
702</dl>
John Criswellce760f62003-07-03 16:01:38 +0000703
Misha Brukman00c73d22003-11-07 19:43:14 +0000704<p>Every directory in the LLVM object tree includes a <tt>Makefile</tt> to build
705it and any subdirectories that it contains. Entering any directory inside the
706LLVM object tree and typing <tt>gmake</tt> should rebuild anything in or below
707that directory that is out of date.</p>
John Criswellce760f62003-07-03 16:01:38 +0000708
Misha Brukman00c73d22003-11-07 19:43:14 +0000709</div>
John Criswell20d2d3e2003-10-10 14:26:14 +0000710
Misha Brukman00c73d22003-11-07 19:43:14 +0000711<!-- ======================================================================= -->
712<div class="doc_subsection">
713 <a name="objfiles">The Location of LLVM Object Files</a>
714</div>
John Criswell20d2d3e2003-10-10 14:26:14 +0000715
Misha Brukman00c73d22003-11-07 19:43:14 +0000716<div class="doc_text">
John Criswellce760f62003-07-03 16:01:38 +0000717
Misha Brukman00c73d22003-11-07 19:43:14 +0000718<p>The LLVM build system is capable of sharing a single LLVM source tree among
719several LLVM builds. Hence, it is possible to build LLVM for several different
720platforms or configurations using the same source tree.</p>
John Criswellce760f62003-07-03 16:01:38 +0000721
Misha Brukman00c73d22003-11-07 19:43:14 +0000722<p>This is accomplished in the typical autoconf manner:</p>
John Criswellce760f62003-07-03 16:01:38 +0000723
Misha Brukman00c73d22003-11-07 19:43:14 +0000724<ul>
725 <li><p>Change directory to where the LLVM object files should live:</p>
John Criswellce760f62003-07-03 16:01:38 +0000726
Misha Brukman00c73d22003-11-07 19:43:14 +0000727 <p><tt>cd <i>OBJ_ROOT</i></tt></p></li>
John Criswellce760f62003-07-03 16:01:38 +0000728
Misha Brukman00c73d22003-11-07 19:43:14 +0000729 <li><p>Run the <tt>configure</tt> script found in the LLVM source
730 directory:</p>
John Criswellce760f62003-07-03 16:01:38 +0000731
Misha Brukman00c73d22003-11-07 19:43:14 +0000732 <p><tt><i>SRC_ROOT</i>/configure</tt></p></li>
733</ul>
John Criswell85ed3612003-06-12 19:34:44 +0000734
Misha Brukman00c73d22003-11-07 19:43:14 +0000735<p>The LLVM build will place files underneath <i>OBJ_ROOT</i> in directories
736named after the build type:</p>
John Criswell85ed3612003-06-12 19:34:44 +0000737
Misha Brukman54111c42004-01-20 00:20:17 +0000738<dl>
Misha Brukman00c73d22003-11-07 19:43:14 +0000739 <dt>Debug Builds
740 <dd>
Misha Brukman54111c42004-01-20 00:20:17 +0000741 <dl>
Misha Brukman00c73d22003-11-07 19:43:14 +0000742 <dt>Tools
743 <dd><tt><i>OBJ_ROOT</i>/tools/Debug</tt>
744 <dt>Libraries
745 <dd><tt><i>OBJ_ROOT</i>/lib/Debug</tt>
746 </dl>
747 <p>
John Criswell85ed3612003-06-12 19:34:44 +0000748
Misha Brukman00c73d22003-11-07 19:43:14 +0000749 <dt>Release Builds
750 <dd>
Misha Brukman54111c42004-01-20 00:20:17 +0000751 <dl>
Misha Brukman00c73d22003-11-07 19:43:14 +0000752 <dt>Tools
753 <dd><tt><i>OBJ_ROOT</i>/tools/Release</tt>
754 <dt>Libraries
755 <dd><tt><i>OBJ_ROOT</i>/lib/Release</tt>
756 </dl>
757 <p>
John Criswell85ed3612003-06-12 19:34:44 +0000758
Misha Brukman00c73d22003-11-07 19:43:14 +0000759 <dt>Profile Builds
760 <dd>
Misha Brukman54111c42004-01-20 00:20:17 +0000761 <dl>
Misha Brukman00c73d22003-11-07 19:43:14 +0000762 <dt>Tools
763 <dd><tt><i>OBJ_ROOT</i>/tools/Profile</tt>
764 <dt>Libraries
765 <dd><tt><i>OBJ_ROOT</i>/lib/Profile</tt>
766 </dl>
767</dl>
John Criswell85ed3612003-06-12 19:34:44 +0000768
Misha Brukman00c73d22003-11-07 19:43:14 +0000769</div>
Chris Lattner7fe7f812002-07-24 19:51:14 +0000770
Chris Lattnera553f622004-03-25 20:38:40 +0000771<!-- ======================================================================= -->
772<div class="doc_subsection">
773 <a name="optionalconfig">Optional Configuration Items</a>
774</div>
775
776<div class="doc_text">
777
778<p>
779If you're running on a linux system that supports the "<a
780href="http://www.tat.physik.uni-tuebingen.de/~rguenth/linux/binfmt_misc.html">binfmt_misc</a>"
781module, and you have root access on the system, you can set your system up to
782execute LLVM bytecode files directly. To do this, use commands like this (the
783first command may not be required if you are already using the module):</p>
784
785<pre>
786 $ mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
787 $ echo ':llvm:M::llvm::/path/to/lli:' > /proc/sys/fs/binfmt_misc/register
788 $ chmod u+x hello.bc (if needed)
789 $ ./hello.bc
790</pre>
791
792<p>
793This allows you to execute LLVM bytecode files directly. Thanks to Jack
794Cummings for pointing this out!
795</p>
796
797</div>
798
799
Misha Brukman00c73d22003-11-07 19:43:14 +0000800<!-- *********************************************************************** -->
801<div class="doc_section">
802 <a name="layout"><b>Program Layout</b></a>
803</div>
804<!-- *********************************************************************** -->
John Criswell85ed3612003-06-12 19:34:44 +0000805
Misha Brukman00c73d22003-11-07 19:43:14 +0000806<div class="doc_text">
John Criswell85ed3612003-06-12 19:34:44 +0000807
Misha Brukman00c73d22003-11-07 19:43:14 +0000808<p>One useful source of information about the LLVM source base is the LLVM <a
John Criswell364cec42004-03-12 20:31:37 +0000809href="http://www.doxygen.org">doxygen</a> documentation available at <tt><a
Misha Brukman00c73d22003-11-07 19:43:14 +0000810href="http://llvm.cs.uiuc.edu/doxygen/">http://llvm.cs.uiuc.edu/doxygen/</a></tt>.
811The following is a brief introduction to code layout:</p>
John Criswell85ed3612003-06-12 19:34:44 +0000812
Misha Brukman00c73d22003-11-07 19:43:14 +0000813</div>
John Criswell85ed3612003-06-12 19:34:44 +0000814
Misha Brukman00c73d22003-11-07 19:43:14 +0000815<!-- ======================================================================= -->
816<div class="doc_subsection">
817 <a name="cvsdir"><tt>CVS</tt> directories</a>
818</div>
John Criswell85ed3612003-06-12 19:34:44 +0000819
Misha Brukman00c73d22003-11-07 19:43:14 +0000820<div class="doc_text">
John Criswell85ed3612003-06-12 19:34:44 +0000821
Misha Brukman00c73d22003-11-07 19:43:14 +0000822<p>Every directory checked out of CVS will contain a <tt>CVS</tt> directory; for
823the most part these can just be ignored.</p>
John Criswell85ed3612003-06-12 19:34:44 +0000824
Misha Brukman00c73d22003-11-07 19:43:14 +0000825</div>
John Criswell85ed3612003-06-12 19:34:44 +0000826
Misha Brukman00c73d22003-11-07 19:43:14 +0000827<!-- ======================================================================= -->
828<div class="doc_subsection">
829 <a name="include"><tt>llvm/include</tt></a>
830</div>
831
832<div class="doc_text">
833
834<p>This directory contains public header files exported from the LLVM
835library. The three main subdirectories of this directory are:</p>
836
837<ol>
838 <li><tt>llvm/include/llvm</tt> - This directory contains all of the LLVM
839 specific header files. This directory also has subdirectories for
840 different portions of LLVM: <tt>Analysis</tt>, <tt>CodeGen</tt>,
841 <tt>Target</tt>, <tt>Transforms</tt>, etc...</li>
842
843 <li><tt>llvm/include/Support</tt> - This directory contains generic
844 support libraries that are independent of LLVM, but are used by LLVM.
845 For example, some C++ STL utilities and a Command Line option processing
846 library store their header files here.</li>
847
848 <li><tt>llvm/include/Config</tt> - This directory contains header files
849 configured by the <tt>configure</tt> script. They wrap "standard" UNIX
850 and C header files. Source code can include these header files which
851 automatically take care of the conditional #includes that the
852 <tt>configure</tt> script generates.</li>
853</ol>
854
855</div>
856
857<!-- ======================================================================= -->
858<div class="doc_subsection">
859 <a name="lib"><tt>llvm/lib</tt></a>
860</div>
861
862<div class="doc_text">
863
864<p>This directory contains most of the source files of the LLVM system. In LLVM,
865almost all code exists in libraries, making it very easy to share code among the
866different <a href="#tools">tools</a>.</p>
867
Misha Brukman54111c42004-01-20 00:20:17 +0000868<dl>
Misha Brukman00c73d22003-11-07 19:43:14 +0000869 <dt><tt>llvm/lib/VMCore/</tt><dd> This directory holds the core LLVM
870 source files that implement core classes like Instruction and BasicBlock.
871
872 <dt><tt>llvm/lib/AsmParser/</tt><dd> This directory holds the source code
873 for the LLVM assembly language parser library.
874
875 <dt><tt>llvm/lib/ByteCode/</tt><dd> This directory holds code for reading
876 and write LLVM bytecode.
877
878 <dt><tt>llvm/lib/CWriter/</tt><dd> This directory implements the LLVM to C
879 converter.
880
881 <dt><tt>llvm/lib/Analysis/</tt><dd> This directory contains a variety of
882 different program analyses, such as Dominator Information, Call Graphs,
883 Induction Variables, Interval Identification, Natural Loop Identification,
884 etc...
885
886 <dt><tt>llvm/lib/Transforms/</tt><dd> This directory contains the source
887 code for the LLVM to LLVM program transformations, such as Aggressive Dead
888 Code Elimination, Sparse Conditional Constant Propagation, Inlining, Loop
889 Invariant Code Motion, Dead Global Elimination, and many others...
890
891 <dt><tt>llvm/lib/Target/</tt><dd> This directory contains files that
892 describe various target architectures for code generation. For example,
John Criswelld1799612004-03-29 20:23:11 +0000893 the llvm/lib/Target/SparcV9 directory holds the Sparc machine
Misha Brukman00c73d22003-11-07 19:43:14 +0000894 description.<br>
895
896 <dt><tt>llvm/lib/CodeGen/</tt><dd> This directory contains the major parts
897 of the code generator: Instruction Selector, Instruction Scheduling, and
898 Register Allocation.
John Criswell85ed3612003-06-12 19:34:44 +0000899
Misha Brukman00c73d22003-11-07 19:43:14 +0000900 <dt><tt>llvm/lib/Support/</tt><dd> This directory contains the source code
901 that corresponds to the header files located in
902 <tt>llvm/include/Support/</tt>.
903</dl>
John Criswell7a73b802003-06-30 21:59:07 +0000904
Misha Brukman00c73d22003-11-07 19:43:14 +0000905</div>
John Criswell85ed3612003-06-12 19:34:44 +0000906
Misha Brukman00c73d22003-11-07 19:43:14 +0000907<!-- ======================================================================= -->
908<div class="doc_subsection">
909 <a name="runtime"><tt>llvm/runtime</tt></a>
910</div>
John Criswell85ed3612003-06-12 19:34:44 +0000911
Misha Brukman00c73d22003-11-07 19:43:14 +0000912<div class="doc_text">
John Criswell85ed3612003-06-12 19:34:44 +0000913
Misha Brukman00c73d22003-11-07 19:43:14 +0000914<p>This directory contains libraries which are compiled into LLVM bytecode and
915used when linking programs with the GCC front end. Most of these libraries are
916skeleton versions of real libraries; for example, libc is a stripped down
917version of glibc.</p>
John Criswell85ed3612003-06-12 19:34:44 +0000918
Misha Brukman00c73d22003-11-07 19:43:14 +0000919<p>Unlike the rest of the LLVM suite, this directory needs the LLVM GCC front
920end to compile.</p>
John Criswell85ed3612003-06-12 19:34:44 +0000921
Misha Brukman00c73d22003-11-07 19:43:14 +0000922</div>
John Criswell85ed3612003-06-12 19:34:44 +0000923
Misha Brukman00c73d22003-11-07 19:43:14 +0000924<!-- ======================================================================= -->
925<div class="doc_subsection">
926 <a name="test"><tt>llvm/test</tt></a>
927</div>
John Criswell85ed3612003-06-12 19:34:44 +0000928
Misha Brukman00c73d22003-11-07 19:43:14 +0000929<div class="doc_text">
John Criswell85ed3612003-06-12 19:34:44 +0000930
Misha Brukman00c73d22003-11-07 19:43:14 +0000931<p>This directory contains regression tests and source code that is used to test
932the LLVM infrastructure.</p>
John Criswell85ed3612003-06-12 19:34:44 +0000933
Misha Brukman00c73d22003-11-07 19:43:14 +0000934</div>
John Criswell85ed3612003-06-12 19:34:44 +0000935
Misha Brukman00c73d22003-11-07 19:43:14 +0000936<!-- ======================================================================= -->
937<div class="doc_subsection">
938 <a name="tools"><tt>llvm/tools</tt></a>
939</div>
John Criswell85ed3612003-06-12 19:34:44 +0000940
Misha Brukman00c73d22003-11-07 19:43:14 +0000941<div class="doc_text">
John Criswell20d2d3e2003-10-10 14:26:14 +0000942
Misha Brukman00c73d22003-11-07 19:43:14 +0000943<p>The <b>tools</b> directory contains the executables built out of the
944libraries above, which form the main part of the user interface. You can
945always get help for a tool by typing <tt>tool_name --help</tt>. The
John Criswell364cec42004-03-12 20:31:37 +0000946following is a brief introduction to the most important tools:</p>
John Criswell20d2d3e2003-10-10 14:26:14 +0000947
Misha Brukman54111c42004-01-20 00:20:17 +0000948<dl>
949 <dt><tt><b>analyze</b></tt> <dd><tt>analyze</tt> is used to run a specific
Misha Brukman00c73d22003-11-07 19:43:14 +0000950 analysis on an input LLVM bytecode file and print out the results. It is
951 primarily useful for debugging analyses, or familiarizing yourself with
952 what an analysis does.<p>
John Criswell85ed3612003-06-12 19:34:44 +0000953
Misha Brukman54111c42004-01-20 00:20:17 +0000954 <dt><tt><b>bugpoint</b></tt> <dd><tt>bugpoint</tt> is used to debug
Misha Brukman00c73d22003-11-07 19:43:14 +0000955 optimization passes or code generation backends by narrowing down the
956 given test case to the minimum number of passes and/or instructions that
957 still cause a problem, whether it is a crash or miscompilation. See <a
958 href="HowToSubmitABug.html">HowToSubmitABug.html</a> for more information
959 on using <tt>bugpoint</tt>.<p>
John Criswell85ed3612003-06-12 19:34:44 +0000960
Misha Brukman54111c42004-01-20 00:20:17 +0000961 <dt><tt><b>llvm-ar</b></tt> <dd>The archiver produces an archive containing
Misha Brukman00c73d22003-11-07 19:43:14 +0000962 the given LLVM bytecode files, optionally with an index for faster
963 lookup.<p>
964
Misha Brukman54111c42004-01-20 00:20:17 +0000965 <dt><tt><b>llvm-as</b></tt> <dd>The assembler transforms the human readable
Misha Brukman00c73d22003-11-07 19:43:14 +0000966 LLVM assembly to LLVM bytecode.<p>
John Criswell85ed3612003-06-12 19:34:44 +0000967
Misha Brukman00c73d22003-11-07 19:43:14 +0000968 <dt><tt><b>llvm-dis</b></tt><dd>The disassembler transforms the LLVM
Chris Lattner036e6392004-02-14 01:07:17 +0000969 bytecode to human readable LLVM assembly.<p>
John Criswell85ed3612003-06-12 19:34:44 +0000970
Misha Brukman00c73d22003-11-07 19:43:14 +0000971 <dt><tt><b>llvm-link</b></tt><dd> <tt>llvm-link</tt>, not surprisingly,
972 links multiple LLVM modules into a single program.<p>
973
974 <dt><tt><b>lli</b></tt><dd> <tt>lli</tt> is the LLVM interpreter, which
975 can directly execute LLVM bytecode (although very slowly...). In addition
976 to a simple interpreter, <tt>lli</tt> also has a tracing mode (entered by
977 specifying <tt>-trace</tt> on the command line). Finally, for
978 architectures that support it (currently only x86 and Sparc), by default,
979 <tt>lli</tt> will function as a Just-In-Time compiler (if the
980 functionality was compiled in), and will execute the code <i>much</i>
981 faster than the interpreter.<p>
Misha Brukmanef0ad412003-10-06 19:23:34 +0000982
Chris Lattner036e6392004-02-14 01:07:17 +0000983 <dt><tt><b>llc</b></tt><dd> <tt>llc</tt> is the LLVM backend compiler, which
984 translates LLVM bytecode to a SPARC or x86 assembly file, or to C code (with
985 the -march=c option).<p>
Misha Brukmanef0ad412003-10-06 19:23:34 +0000986
Misha Brukman00c73d22003-11-07 19:43:14 +0000987 <dt><tt><b>llvmgcc</b></tt><dd> <tt>llvmgcc</tt> is a GCC-based C frontend
988 that has been retargeted to emit LLVM code as the machine code output. It
989 works just like any other GCC compiler, taking the typical <tt>-c, -S, -E,
990 -o</tt> options that are typically used. The source code for the
991 <tt>llvmgcc</tt> tool is currently not included in the LLVM CVS tree
992 because it is quite large and not very interesting.<p>
Misha Brukmanef0ad412003-10-06 19:23:34 +0000993
Misha Brukman54111c42004-01-20 00:20:17 +0000994 <blockquote>
995 <dl>
996 <dt><tt><b>gccas</b></tt> <dd>This tool is invoked by the
Misha Brukman00c73d22003-11-07 19:43:14 +0000997 <tt>llvmgcc</tt> frontend as the "assembler" part of the compiler. This
998 tool actually assembles LLVM assembly to LLVM bytecode,
999 performs a variety of optimizations, and outputs LLVM bytecode. Thus
1000 when you invoke <tt>llvmgcc -c x.c -o x.o</tt>, you are causing
1001 <tt>gccas</tt> to be run, which writes the <tt>x.o</tt> file (which is
1002 an LLVM bytecode file that can be disassembled or manipulated just like
1003 any other bytecode file). The command line interface to <tt>gccas</tt>
1004 is designed to be as close as possible to the <b>system</b>
1005 `<tt>as</tt>' utility so that the gcc frontend itself did not have to be
1006 modified to interface to a "weird" assembler.<p>
John Criswell85ed3612003-06-12 19:34:44 +00001007
Misha Brukman54111c42004-01-20 00:20:17 +00001008 <dt><tt><b>gccld</b></tt> <dd><tt>gccld</tt> links together several LLVM
Misha Brukman00c73d22003-11-07 19:43:14 +00001009 bytecode files into one bytecode file and does some optimization. It is
1010 the linker invoked by the GCC frontend when multiple .o files need to be
1011 linked together. Like <tt>gccas</tt>, the command line interface of
1012 <tt>gccld</tt> is designed to match the system linker, to aid
Misha Brukman54111c42004-01-20 00:20:17 +00001013 interfacing with the GCC frontend.</dl><p>
1014 </blockquote>
John Criswell85ed3612003-06-12 19:34:44 +00001015
Misha Brukman00c73d22003-11-07 19:43:14 +00001016 <dt><tt><b>opt</b></tt><dd> <tt>opt</tt> reads LLVM bytecode, applies a
1017 series of LLVM to LLVM transformations (which are specified on the command
1018 line), and then outputs the resultant bytecode. The '<tt>opt --help</tt>'
1019 command is a good way to get a list of the program transformations
Misha Brukman54111c42004-01-20 00:20:17 +00001020 available in LLVM.
John Criswell85ed3612003-06-12 19:34:44 +00001021
Misha Brukman00c73d22003-11-07 19:43:14 +00001022</dl>
John Criswell85ed3612003-06-12 19:34:44 +00001023
Misha Brukman00c73d22003-11-07 19:43:14 +00001024</div>
John Criswell85ed3612003-06-12 19:34:44 +00001025
Misha Brukman00c73d22003-11-07 19:43:14 +00001026<!-- ======================================================================= -->
1027<div class="doc_subsection">
1028 <a name="utils"><tt>llvm/utils</tt></a>
1029</div>
John Criswell85ed3612003-06-12 19:34:44 +00001030
Misha Brukman00c73d22003-11-07 19:43:14 +00001031<div class="doc_text">
John Criswell85ed3612003-06-12 19:34:44 +00001032
Misha Brukman00c73d22003-11-07 19:43:14 +00001033<p>This directory contains utilities for working with LLVM source code, and some
1034of the utilities are actually required as part of the build process because they
1035are code generators for parts of LLVM infrastructure.</p>
John Criswell85ed3612003-06-12 19:34:44 +00001036
Misha Brukman54111c42004-01-20 00:20:17 +00001037<dl>
1038 <dt><tt><b>Burg/</b></tt> <dd><tt>Burg</tt> is an instruction selector
Misha Brukman00c73d22003-11-07 19:43:14 +00001039 generator -- it builds trees on which it then performs pattern-matching to
1040 select instructions according to the patterns the user has specified. Burg
1041 is currently used in the Sparc V9 backend.<p>
John Criswell0b459202003-07-08 20:35:59 +00001042
Misha Brukman54111c42004-01-20 00:20:17 +00001043 <dt><tt><b>codegen-diff</b></tt> <dd><tt>codegen-diff</tt> is a script
Misha Brukman00c73d22003-11-07 19:43:14 +00001044 that finds differences between code that LLC generates and code that LLI
1045 generates. This is a useful tool if you are debugging one of them,
1046 assuming that the other generates correct output. For the full user
1047 manual, run <tt>`perldoc codegen-diff'</tt>.<p>
Misha Brukmanc103adf2003-08-11 18:45:46 +00001048
Misha Brukman54111c42004-01-20 00:20:17 +00001049 <dt><tt><b>cvsupdate</b></tt> <dd><tt>cvsupdate</tt> is a script that will
Misha Brukman00c73d22003-11-07 19:43:14 +00001050 update your CVS tree, but produce a much cleaner and more organized output
1051 than simply running <tt>`cvs -z3 up -dP'</tt> will. For example, it will group
1052 together all the new and updated files and modified files in separate
1053 sections, so you can see at a glance what has changed. If you are at the
1054 top of your LLVM CVS tree, running <tt>utils/cvsupdate</tt> is the
1055 preferred way of updating the tree.<p>
Misha Brukmanc103adf2003-08-11 18:45:46 +00001056
Misha Brukman54111c42004-01-20 00:20:17 +00001057 <dt><tt><b>emacs/</b></tt> <dd>The <tt>emacs</tt> directory contains
Misha Brukman00c73d22003-11-07 19:43:14 +00001058 syntax-highlighting files which will work with Emacs and XEmacs editors,
1059 providing syntax highlighting support for LLVM assembly files and TableGen
1060 description files. For information on how to use the syntax files, consult
1061 the <tt>README</tt> file in that directory.<p>
Misha Brukmanc103adf2003-08-11 18:45:46 +00001062
Misha Brukman54111c42004-01-20 00:20:17 +00001063 <dt><tt><b>getsrcs.sh</b></tt> <dd>The <tt>getsrcs.sh</tt> script finds
Misha Brukman00c73d22003-11-07 19:43:14 +00001064 and outputs all non-generated source files, which is useful if one wishes
1065 to do a lot of development across directories and does not want to
1066 individually find each file. One way to use it is to run, for example:
1067 <tt>xemacs `utils/getsources.sh`</tt> from the top of your LLVM source
1068 tree.<p>
1069
Misha Brukman54111c42004-01-20 00:20:17 +00001070 <dt><tt><b>makellvm</b></tt> <dd>The <tt>makellvm</tt> script compiles all
Misha Brukman00c73d22003-11-07 19:43:14 +00001071 files in the current directory and then compiles and links the tool that
1072 is the first argument. For example, assuming you are in the directory
1073 <tt>llvm/lib/Target/Sparc</tt>, if <tt>makellvm</tt> is in your path,
1074 simply running <tt>makellvm llc</tt> will make a build of the current
1075 directory, switch to directory <tt>llvm/tools/llc</tt> and build it,
1076 causing a re-linking of LLC.<p>
Misha Brukmanc103adf2003-08-11 18:45:46 +00001077
Misha Brukman00c73d22003-11-07 19:43:14 +00001078 <dt><tt><b>NightlyTest.pl</b></tt> and
Misha Brukman54111c42004-01-20 00:20:17 +00001079 <tt><b>NightlyTestTemplate.html</b></tt> <dd>These files are used in a
Misha Brukman00c73d22003-11-07 19:43:14 +00001080 cron script to generate nightly status reports of the functionality of
1081 tools, and the results can be seen by following the appropriate link on
1082 the <a href="http://llvm.cs.uiuc.edu/">LLVM homepage</a>.<p>
Misha Brukmanc103adf2003-08-11 18:45:46 +00001083
Misha Brukman54111c42004-01-20 00:20:17 +00001084 <dt><tt><b>TableGen/</b></tt> <dd>The <tt>TableGen</tt> directory contains
Misha Brukman00c73d22003-11-07 19:43:14 +00001085 the tool used to generate register descriptions, instruction set
1086 descriptions, and even assemblers from common TableGen description
1087 files.<p>
Misha Brukmanc103adf2003-08-11 18:45:46 +00001088
Misha Brukman54111c42004-01-20 00:20:17 +00001089 <dt><tt><b>vim/</b></tt> <dd>The <tt>vim</tt> directory contains
Misha Brukman00c73d22003-11-07 19:43:14 +00001090 syntax-highlighting files which will work with the VIM editor, providing
1091 syntax highlighting support for LLVM assembly files and TableGen
1092 description files. For information on how to use the syntax files, consult
1093 the <tt>README</tt> file in that directory.<p>
Misha Brukmanc103adf2003-08-11 18:45:46 +00001094
Misha Brukman00c73d22003-11-07 19:43:14 +00001095</dl>
Misha Brukmanc103adf2003-08-11 18:45:46 +00001096
Misha Brukman00c73d22003-11-07 19:43:14 +00001097</div>
Misha Brukmanc103adf2003-08-11 18:45:46 +00001098
Misha Brukman00c73d22003-11-07 19:43:14 +00001099<!-- *********************************************************************** -->
1100<div class="doc_section">
1101 <a name="tutorial">An Example Using the LLVM Tool Chain</a>
1102</div>
1103<!-- *********************************************************************** -->
Misha Brukmanc103adf2003-08-11 18:45:46 +00001104
Misha Brukman00c73d22003-11-07 19:43:14 +00001105<div class="doc_text">
John Criswell85ed3612003-06-12 19:34:44 +00001106
Misha Brukman00c73d22003-11-07 19:43:14 +00001107<ol>
1108 <li>First, create a simple C file, name it 'hello.c':
John Criswell85ed3612003-06-12 19:34:44 +00001109 <pre>
1110 #include &lt;stdio.h&gt;
1111 int main() {
1112 printf("hello world\n");
1113 return 0;
1114 }
Misha Brukman00c73d22003-11-07 19:43:14 +00001115 </pre></li>
John Criswell85ed3612003-06-12 19:34:44 +00001116
Misha Brukman00c73d22003-11-07 19:43:14 +00001117 <li><p>Next, compile the C file into a LLVM bytecode file:</p>
1118 <p><tt>% llvmgcc hello.c -o hello</tt></p>
John Criswell85ed3612003-06-12 19:34:44 +00001119
Misha Brukman00c73d22003-11-07 19:43:14 +00001120 <p>This will create two result files: <tt>hello</tt> and
John Criswell85ed3612003-06-12 19:34:44 +00001121 <tt>hello.bc</tt>. The <tt>hello.bc</tt> is the LLVM bytecode that
1122 corresponds the the compiled program and the library facilities that it
1123 required. <tt>hello</tt> is a simple shell script that runs the bytecode
Chris Lattnera19a3db2004-05-01 11:40:07 +00001124 file with <tt>lli</tt>, making the result directly executable. Note that
1125 all LLVM optimizations are enabled by default, so there is no need for a
1126 "-O3" switch.</p></li>
John Criswell85ed3612003-06-12 19:34:44 +00001127
Misha Brukman00c73d22003-11-07 19:43:14 +00001128 <li><p>Run the program. To make sure the program ran, execute one of the
1129 following commands:</p>
John Criswell8df90e02003-06-11 20:46:40 +00001130
Misha Brukman00c73d22003-11-07 19:43:14 +00001131 <p><tt>% ./hello</tt></p>
John Criswell85ed3612003-06-12 19:34:44 +00001132
Misha Brukman00c73d22003-11-07 19:43:14 +00001133 <p>or</p>
John Criswell85ed3612003-06-12 19:34:44 +00001134
Misha Brukman00c73d22003-11-07 19:43:14 +00001135 <p><tt>% lli hello.bc</tt></p></li>
John Criswell85ed3612003-06-12 19:34:44 +00001136
Misha Brukman00c73d22003-11-07 19:43:14 +00001137 <li><p>Use the <tt>llvm-dis</tt> utility to take a look at the LLVM assembly
1138 code:</p>
John Criswell85ed3612003-06-12 19:34:44 +00001139
Misha Brukman00c73d22003-11-07 19:43:14 +00001140 <p><tt>% llvm-dis &lt; hello.bc | less</tt><p></li>
John Criswell85ed3612003-06-12 19:34:44 +00001141
Misha Brukman00c73d22003-11-07 19:43:14 +00001142 <li><p>Compile the program to native Sparc assembly using the code
1143 generator (assuming you are currently on a Sparc system):</p>
John Criswell85ed3612003-06-12 19:34:44 +00001144
Misha Brukman00c73d22003-11-07 19:43:14 +00001145 <p><tt>% llc hello.bc -o hello.s</tt></p>
John Criswell85ed3612003-06-12 19:34:44 +00001146
Misha Brukman00c73d22003-11-07 19:43:14 +00001147 <li><p>Assemble the native sparc assemble file into a program:</p>
John Criswell85ed3612003-06-12 19:34:44 +00001148
Misha Brukman00c73d22003-11-07 19:43:14 +00001149 <p><tt>% /opt/SUNWspro/bin/cc -xarch=v9 hello.s -o hello.sparc</tt></p>
John Criswell85ed3612003-06-12 19:34:44 +00001150
Misha Brukman00c73d22003-11-07 19:43:14 +00001151 <li><p>Execute the native sparc program:</p>
John Criswell85ed3612003-06-12 19:34:44 +00001152
Misha Brukman00c73d22003-11-07 19:43:14 +00001153 <p><tt>% ./hello.sparc</tt></p></li>
John Criswell85ed3612003-06-12 19:34:44 +00001154
Misha Brukman00c73d22003-11-07 19:43:14 +00001155</ol>
John Criswell85ed3612003-06-12 19:34:44 +00001156
Misha Brukman00c73d22003-11-07 19:43:14 +00001157</div>
John Criswell85ed3612003-06-12 19:34:44 +00001158
Misha Brukman00c73d22003-11-07 19:43:14 +00001159<!-- *********************************************************************** -->
1160<div class="doc_section">
1161 <a name="problems">Common Problems</a>
1162</div>
1163<!-- *********************************************************************** -->
John Criswellce760f62003-07-03 16:01:38 +00001164
Misha Brukman00c73d22003-11-07 19:43:14 +00001165<div class="doc_text">
John Criswellce760f62003-07-03 16:01:38 +00001166
Misha Brukman00c73d22003-11-07 19:43:14 +00001167<p>If you are having problems building or using LLVM, or if you have any other
1168general questions about LLVM, please consult the <a href="FAQ.html">Frequently
1169Asked Questions</a> page.</p>
John Criswell85ed3612003-06-12 19:34:44 +00001170
Misha Brukman00c73d22003-11-07 19:43:14 +00001171</div>
John Criswell85ed3612003-06-12 19:34:44 +00001172
Misha Brukman00c73d22003-11-07 19:43:14 +00001173<!-- *********************************************************************** -->
1174<div class="doc_section">
1175 <a name="links">Links</a>
1176</div>
1177<!-- *********************************************************************** -->
John Criswell85ed3612003-06-12 19:34:44 +00001178
Misha Brukman00c73d22003-11-07 19:43:14 +00001179<div class="doc_text">
John Criswell85ed3612003-06-12 19:34:44 +00001180
Misha Brukman00c73d22003-11-07 19:43:14 +00001181<p>This document is just an <b>introduction</b> to how to use LLVM to do
1182some simple things... there are many more interesting and complicated things
1183that you can do that aren't documented here (but we'll gladly accept a patch
1184if you want to write something up!). For more information about LLVM, check
1185out:</p>
John Criswell85ed3612003-06-12 19:34:44 +00001186
Misha Brukman00c73d22003-11-07 19:43:14 +00001187<ul>
1188 <li><a href="http://llvm.cs.uiuc.edu/">LLVM homepage</a></li>
1189 <li><a href="http://llvm.cs.uiuc.edu/doxygen/">LLVM doxygen tree</a></li>
1190 <li><a href="http://llvm.cs.uiuc.edu/docs/Projects.html">Starting a Project
1191 that Uses LLVM</a></li>
1192</ul>
1193
1194</div>
1195
1196<!-- *********************************************************************** -->
1197
1198<hr>
Misha Brukman142207b2003-11-22 01:30:01 +00001199<address>
Misha Brukman54111c42004-01-20 00:20:17 +00001200 <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
1201 src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
1202 <a href="http://validator.w3.org/check/referer"><img
1203 src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
1204
Misha Brukman142207b2003-11-22 01:30:01 +00001205 <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
1206 <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a><br>
Misha Brukman00c73d22003-11-07 19:43:14 +00001207 Last modified: $Date$
Misha Brukman142207b2003-11-22 01:30:01 +00001208</address>
Misha Brukman00c73d22003-11-07 19:43:14 +00001209
1210</body>
Guochun Shif4688a82002-07-17 23:05:56 +00001211</html>