Skip to content
forked from numba/llvmlite

A lightweight LLVM python binding for writing JIT compilers

License

Notifications You must be signed in to change notification settings

rj-jesus/llvmlite

This branch is 1 commit ahead of, 125 commits behind numba/llvmlite:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

fae7c7f · Oct 7, 2024
May 10, 2024
Aug 7, 2024
Aug 13, 2024
Sep 19, 2024
Aug 8, 2024
Sep 19, 2024
Oct 7, 2024
Apr 12, 2022
May 2, 2016
Mar 9, 2016
Feb 6, 2023
Dec 15, 2020
Feb 14, 2023
Apr 27, 2022
Jul 5, 2024
Mar 9, 2016
Feb 14, 2023
Jun 14, 2024
Oct 23, 2014
Dec 6, 2023
Mar 9, 2016
Dec 4, 2023
Aug 7, 2024
May 2, 2016
Mar 9, 2016
Jun 26, 2017
Dec 4, 2023
Apr 28, 2015

Repository files navigation

llvmlite

Azure Pipelines Code Climate Coveralls.io Readthedocs.io

A Lightweight LLVM Python Binding for Writing JIT Compilers

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.

Why llvmlite

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.

Key Benefits

  • 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).

Compatibility

llvmlite has been tested with Python 3.9 -- 3.12 and is likely to work with greater versions.

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 aarch64 only)
0.33.0 9.0.x
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

Documentation

You'll find the documentation at http://llvmlite.pydata.org

Pre-built binaries

We recommend you use the binaries provided by the Numba team for the Conda package manager. You can find them in Numba's anaconda.org channel. For example:

$ conda install --channel=numba llvmlite

(or, simply, the official llvmlite package provided in the Anaconda distribution)

Other build methods

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

About

A lightweight LLVM python binding for writing JIT compilers

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 75.4%
  • C++ 19.9%
  • Shell 2.2%
  • Batchfile 1.2%
  • LLVM 0.5%
  • CMake 0.4%
  • Other 0.4%