I plan to release a version of dragonegg based on llvm-2.7 shortly
[oota-llvm.git] / docs / Packaging.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2                       "http://www.w3.org/TR/html4/strict.dtd">
3 <html>
4 <head>
5   <title>Advice on Packaging LLVM</title>
6   <link rel="stylesheet" href="llvm.css" type="text/css">
7 </head>
8 <body>
9
10 <div class="doc_title">Advice on Packaging LLVM</div>
11 <ol>
12   <li><a href="#overview">Overview</a></li>
13   <li><a href="#compilation">Compile Flags</a></li>
14   <li><a href="#cxx-features">C++ Features</a></li>
15   <li><a href="#shared-library">Shared Library</a></li>
16   <li><a href="#deps">Dependencies</a></li>
17 </ol>
18
19 <!--=========================================================================-->
20 <div class="doc_section"><a name="overview">Overview</a></div>
21 <!--=========================================================================-->
22 <div class="doc_text">
23
24 <p>LLVM sets certain default configure options to make sure our developers don't
25 break things for constrained platforms.  These settings are not optimal for most
26 desktop systems, and we hope that packagers (e.g., Redhat, Debian, MacPorts,
27 etc.) will tweak them.  This document lists settings we suggest you tweak.
28 </p>
29
30 <p>LLVM's API changes with each release, so users are likely to want, for
31 example, both LLVM-2.6 and LLVM-2.7 installed at the same time to support apps
32 developed against each.
33 </p>
34 </div>
35
36 <!--=========================================================================-->
37 <div class="doc_section"><a name="compilation">Compile Flags</a></div>
38 <!--=========================================================================-->
39 <div class="doc_text">
40
41 <p>LLVM runs much more quickly when it's optimized and assertions are removed.
42 However, such a build is currently incompatible with users who build without
43 defining NDEBUG, and the lack of assertions makes it hard to debug problems in
44 user code.  We recommend allowing users to install both optimized and debug
45 versions of LLVM in parallel.  The following configure flags are relevant:
46 </p>
47
48 <dl>
49   <dt><tt>--disable-assertions</tt></dt><dd>Builds LLVM with <tt>NDEBUG</tt>
50   defined.  Changes the LLVM ABI.  Also available by setting
51   <tt>DISABLE_ASSERTIONS=0|1</tt> in <tt>make</tt>'s environment.  This defaults
52   to enabled regardless of the optimization setting, but it slows things
53   down.</dd>
54
55   <dt><tt>--enable-debug-symbols</tt></dt><dd>Builds LLVM with <tt>-g</tt>.
56   Also available by setting <tt>DEBUG_SYMBOLS=0|1</tt> in <tt>make</tt>'s
57   environment.  This defaults to disabled when optimizing, so you should turn it
58   back on to let users debug their programs.</dd>
59
60   <dt><tt>--enable-optimized</tt></dt><dd>(For svn checkouts) Builds LLVM with
61   <tt>-O2</tt> and, by default, turns off debug symbols.  Also available by
62   setting <tt>ENABLE_OPTIMIZED=0|1</tt> in <tt>make</tt>'s environment.  This
63   defaults to enabled when not in a checkout.</dd>
64 </dl>
65 </div>
66
67 <!--=========================================================================-->
68 <div class="doc_section"><a name="cxx-features">C++ Features</a></div>
69 <!--=========================================================================-->
70 <div class="doc_text">
71
72 <dl>
73   <dt>RTTI</dt><dd>LLVM disables RTTI by default.  Add <tt>REQUIRES_RTTI=1</tt>
74   to your environment while running <tt>make</tt> to re-enable it.  This will
75   allow users to build with RTTI enabled and still inherit from LLVM
76   classes.</dd>
77 </dl>
78 </div>
79
80 <!--=========================================================================-->
81 <div class="doc_section"><a name="shared-library">Shared Library</a></div>
82 <!--=========================================================================-->
83 <div class="doc_text">
84
85 <p>Configure with <tt>--enable-shared</tt> to build
86 <tt>libLLVM-<var>major</var>.<var>minor</var>.(so|dylib)</tt> and link the tools
87 against it.  This saves lots of binary size at the cost of some startup time.
88 </p>
89 </div>
90
91 <!--=========================================================================-->
92 <div class="doc_section"><a name="deps">Dependencies</a></div>
93 <!--=========================================================================-->
94 <div class="doc_text">
95
96 <dl>
97 <dt><tt>--enable-libffi</tt></dt><dd>Depend on <a
98 href="http://sources.redhat.com/libffi/">libffi</a> to allow the LLVM
99 interpreter to call external functions.</dd>
100 <dt><tt>--with-oprofile</tt></dt><dd>Depend on <a
101 href="http://oprofile.sourceforge.net/doc/devel/index.html">libopagent</a>
102 (>=version 0.9.4) to let the LLVM JIT tell oprofile about function addresses and
103 line numbers.</dd>
104 </dl>
105 </div>
106
107 <!-- *********************************************************************** -->
108 <hr>
109 <address>
110   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
111   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
112   <a href="http://validator.w3.org/check/referer"><img
113   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
114   <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
115   Last modified: $Date$
116 </address>
117 </body>
118 </html>