[llvm-dev] llvmcpy: yet another Python binding for LLVM
Philip Reames via llvm-dev
llvm-dev at lists.llvm.org
Thu Jan 12 17:30:09 PST 2017
Using something like CFFI to autogenerate bindings is definitely a good
approach to this problem. It'll produce bindings which aren't entirely
idiomatic for python, but they'll at least be reasonable likely to
remain in sync. This also has the nice property that new additions to
the C API get picked up without manual work; this should serve to
incentive contribution in this area.
You mention in your readme that you had to slightly modify the LLVM C
headers to get this approach to work. Can you point out a couple of
example changes? Maybe these are things we should consider taking upstream.
I've not familiar with the details of CFFI. Are the bindings it
generates for a particular set of headers specific to the machine it's
generated on? Or could the resulting bindings be published and reused
directly? If so, hosting a set of bindings for previous releases would
be a useful service.
On 01/12/2017 11:44 AM, Alessandro Di Federico via llvm-dev wrote:
> Hi, I wrote yet another [1,2] Python binding for LLVM! I'm doing this
> because llvmlite has some serious limitations: 1) it cannot parse an
> existing IR, only create new modules , 2) it keeps its own
> representation of the IR (which is less memory efficient than the LLVM
> one), and 3) each llvmlite version supports a single LLVM version.
> Considering that my need is to load modules of hundreds of MiB, this
> is was kind of a problem.
> So I've come up with a "Python API generator". Basically it uses CFFI
>  to parse the LLVM-C API headers and automatically generate (using
> some heuristics) a Pythonic API, with classes, properties and the like.
> I've quickly tested it with LLVM 3.4, 3.8 and 3.9, and, for its
> simplicity, does a good job. It also supports multiple LLVM
> installations (it uses the one of the first llvm-config in path).
> I'd be happy to have some feedback, give it a look:
> Alessandro Di Federico
> PhD student at Politecnico di Milano
>  http://www.llvmpy.org/
>  https://github.com/numba/llvmlite
>  https://github.com/numba/llvmlite/issues/157
>  http://cffi.readthedocs.io/en/latest/
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
More information about the llvm-dev