llvmlite is a project originally tailored for Numba's needs, using the following approach:
- A small C wrapper around the parts of the LLVM C++ API we need that are not already exposed by the LLVM C API.
- A ctypes Python wrapper around the C API.
- A pure Python implementation of the subset of the LLVM IR builder that we need for Numba.
The old llvmpy binding exposes a lot of LLVM APIs but the mapping of C++-style memory management to Python is error prone. Numba and many JIT compilers do not need a full LLVM API. Only the IR builder, optimizer, and JIT compiler APIs are necessary.
- The IR builder is pure Python code and decoupled from LLVM's frequently-changing C++ APIs.
- Materializing a LLVM module calls LLVM's IR parser which provides better error messages than step-by-step IR building through the C++ API (no more segfaults or process aborts).
- Most of llvmlite uses the LLVM C API which is small but very stable (low maintenance when changing LLVM version).
- The binding is not a Python C-extension, but a plain DLL accessed using ctypes (no need to wrestle with Python's compiler requirements and C++ 11 compatibility).
- The Python binding layer has sane memory management.
- llvmlite is faster than llvmpy thanks to a much simpler architecture (the Numba test suite is twice faster than it was).
llvmlite works with Python 3.8 and greater. We attempt to test with the latest Python version, this can be checked by looking at the public CI builds.
As of version 0.41.0, llvmlite requires LLVM 14.x.x on all architectures
Historical compatibility table:
|llvmlite versions||compatible LLVM versions|
|0.41.0 - ...||14.x.x|
|0.40.0 - 0.40.1||11.x.x and 14.x.x (12.x.x and 13.x.x untested but may work)|
|0.37.0 - 0.39.1||11.x.x|
|0.34.0 - 0.36.0||10.0.x (9.0.x for
|0.29.0 - 0.32.0||7.0.x, 7.1.x, 8.0.x|
|0.27.0 - 0.28.0||7.0.x|
|0.23.0 - 0.26.0||6.0.x|
|0.21.0 - 0.22.0||5.0.x|
|0.17.0 - 0.20.0||4.0.x|
|0.16.0 - 0.17.0||3.9.x|
|0.13.0 - 0.15.0||3.8.x|
|0.9.0 - 0.12.1||3.7.x|
|0.6.0 - 0.8.0||3.6.x|
|0.1.0 - 0.5.1||3.5.x|
You'll find the documentation at http://llvmlite.pydata.org
$ conda install --channel=numba llvmlite
(or, simply, the official llvmlite package provided in the Anaconda distribution)
If you don't want to use our pre-built packages, you can compile and install llvmlite yourself. The documentation will teach you how: http://llvmlite.pydata.org/en/latest/install/index.html