Advice on Packaging LLVM
Overview
LLVM sets certain default configure options to make sure our developers don't break things for constrained platforms. These settings are not optimal for most desktop systems, and we hope that packagers (e.g., Redhat, Debian, MacPorts, etc.) will tweak them. This document lists settings we suggest you tweak.
LLVM's API changes with each release, so users are likely to want, for example, both LLVM-2.6 and LLVM-2.7 installed at the same time to support apps developed against each.
Compile Flags
LLVM runs much more quickly when it's optimized and assertions are removed.
However, such a build is currently incompatible with users who build without
defining NDEBUG
, and the lack of assertions makes it hard to debug problems
in user code. We recommend allowing users to install both optimized and debug
versions of LLVM in parallel. The following configure flags are relevant:
--disable-assertions
- Builds LLVM with
NDEBUG
defined. Changes the LLVM ABI. Also available by settingDISABLE_ASSERTIONS=0|1
inmake
's environment. This defaults to enabled regardless of the optimization setting, but it slows things down. --enable-debug-symbols
- Builds LLVM with
-g
. Also available by settingDEBUG_SYMBOLS=0|1
inmake
's environment. This defaults to disabled when optimizing, so you should turn it back on to let users debug their programs. --enable-optimized
- (For git checkouts) Builds LLVM with
-O2
and, by default, turns off debug symbols. Also available by settingENABLE_OPTIMIZED=0|1
inmake
's environment. This defaults to enabled when not in a checkout.
C++ Features
- RTTI
- LLVM disables RTTI by default. Add
REQUIRES_RTTI=1
to your environment while runningmake
to re-enable it. This will allow users to build with RTTI enabled and still inherit from LLVM classes.
Shared Library
Configure with --enable-shared
to build
libLLVM-<major>.<minor>.(so|dylib)
and link the tools against it. This
saves lots of binary size at the cost of some startup time.
Dependencies
--enable-libffi
- Depend on libffi to allow the LLVM interpreter to call external functions.
--with-oprofile
Depend on libopagent (>=version 0.9.4) to let the LLVM JIT tell oprofile about function addresses and line numbers.