GithubHelp home page GithubHelp logo

dhomeier / llvmlite Goto Github PK

View Code? Open in Web Editor NEW

This project forked from numba/llvmlite

0.0 3.0 0.0 401 KB

A lightweight LLVM python binding for writing JIT compilers

License: BSD 2-Clause "Simplified" License

Python 89.33% Shell 2.10% C++ 8.36% C 0.21%

llvmlite's Introduction

llvmlite

A lightweight LLVM python binding for writing JIT compilers

Old llvmpy binding exposes a lot of LLVM but the mapping of C++ style memory management to python is error prone. Numba and many JIT compiler does not need a full LLVM API. Only the IR builder, optimizer, and JIT compiler APIs are necessary.

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.

Key Benefits

  • llvmlite IR builder is pure python
  • llvmlite uses LLVM assembly parser which provide better error messages (no more segfault due to bad IR construction)
  • Most of llvmlite uses the LLVM C API which is small but very stable and backward compatible (low maintenance when changing LLVM version)
  • The binding is not a python C-extension (no need to wrestle with Python's compiler requirement and C++11 compatibility)
  • llvmlite binding memory management is explicit obj.close() or with-context
  • llvmlite is quite faster in early benchmarks (the Numba test suite is twice faster)

LLVMPY Compatibility Layer

llvmlite.llvmpy.* provides a minimal LLVMPY compatibility layer.

Dependencies

You need Python 2.6 or greater (including Python 3.3 or greater).

Build dependencies

  • LLVM 3.5
  • A C compiler, and possibly other tools (see below)

Runtime dependencies

  • For Python versions before 3.4, the enum34 package is required

Build

Run python setup.py build. This will build the llvmlite C wrapper, which will contain a statically-linked copy of the required subset of LLVM.

If your LLVM is installed in a non-standard location, first point the LLVM_CONFIG environment variable to the path of the corresponding llvm-config executable.

Unix requirements

You must have a LLVM 3.5 build (libraries and header files) available somewhere. If it is not installed in a standard location, you may have to tweak the build script. Under Ubuntu 14.10 and Debian unstable, you can install llvm-3.5-dev. Versions shipped with earlier versions (Ubuntu 14.04, Debian stable) may not be good enough.

When building on Ubuntu, the linker may report an error if the development version of libedit is not installed. Install libedit-dev if you run into this problem.

Windows requirements

You must have Visual Studio 2012 or later (the free Express edition is ok). In addition, you must have cmake installed, and LLVM should have been built using cmake, in Release mode. Be careful to use the right bitness (32- or 64-bit) for your Python installation.

Run tests

Run python runtests.py or python -m llvmlite.tests.

Install

Run python setup.py install.

llvmlite's People

Contributors

pitrou avatar sklam avatar yaniv256 avatar seibert avatar eliben avatar lungothrin avatar

Watchers

Derek Homeier avatar James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.