| ======================== |
| Advice on Packaging LLVM |
| ======================== |
| |
| .. contents:: |
| :local: |
| |
| 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 setting ``DISABLE_ASSERTIONS=0|1`` in ``make``'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 setting ``DEBUG_SYMBOLS=0|1`` in |
| ``make``'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 setting ``ENABLE_OPTIMIZED=0|1`` in |
| ``make``'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 running ``make`` 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 <http://sources.redhat.com/libffi/>`_ to allow the LLVM |
| interpreter to call external functions. |
| |
| ``--with-oprofile`` |
| |
| Depend on `libopagent |
| <http://oprofile.sourceforge.net/doc/devel/index.html>`_ (>=version 0.9.4) |
| to let the LLVM JIT tell oprofile about function addresses and line |
| numbers. |