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<h1>Advice on Packaging LLVM</h1> 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<h2><a name="overview">Overview</a></h2> 21<!--=========================================================================--> 22<div> 23 24<p>LLVM sets certain default configure options to make sure our developers don't 25break things for constrained platforms. These settings are not optimal for most 26desktop systems, and we hope that packagers (e.g., Redhat, Debian, MacPorts, 27etc.) 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 31example, both LLVM-2.6 and LLVM-2.7 installed at the same time to support apps 32developed against each. 33</p> 34</div> 35 36<!--=========================================================================--> 37<h2><a name="compilation">Compile Flags</a></h2> 38<!--=========================================================================--> 39<div> 40 41<p>LLVM runs much more quickly when it's optimized and assertions are removed. 42However, such a build is currently incompatible with users who build without 43defining NDEBUG, and the lack of assertions makes it hard to debug problems in 44user code. We recommend allowing users to install both optimized and debug 45versions 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<h2><a name="cxx-features">C++ Features</a></h2> 69<!--=========================================================================--> 70<div> 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<h2><a name="shared-library">Shared Library</a></h2> 82<!--=========================================================================--> 83<div> 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 87against it. This saves lots of binary size at the cost of some startup time. 88</p> 89</div> 90 91<!--=========================================================================--> 92<h2><a name="deps">Dependencies</a></h2> 93<!--=========================================================================--> 94<div> 95 96<dl> 97<dt><tt>--enable-libffi</tt></dt><dd>Depend on <a 98href="http://sources.redhat.com/libffi/">libffi</a> to allow the LLVM 99interpreter to call external functions.</dd> 100<dt><tt>--with-oprofile</tt></dt><dd>Depend on <a 101href="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 103line 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> 119