| ======================== | |
| 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 svn 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. |