Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

132 lines (111 sloc) 4.189 kb
import sys
import os
import re
from distutils.core import setup, Extension
# On win32, there is a fake llvm-config since llvm doesn't supply one
if sys.platform == 'win32':
default_llvm_config = 'python'
default_llvm_config = 'llvm-config'
llvm_config = os.environ.get('LLVM_CONFIG_PATH', default_llvm_config)
# set LLVMPY_DYNLINK=1, if you want to link dynamically to
dynlink = int(os.environ.get('LLVMPY_DYNLINK', 0))
def run_llvm_config(args):
cmd = llvm_config + ' ' + ' '.join(args)
return os.popen(cmd).read().rstrip()
if run_llvm_config(['--version']) == '':
print("Cannot invoke llvm-config.")
print("Try setting LLVM_CONFIG_PATH=/path/to/llvm-config")
def get_libs_and_objs(components):
parts = run_llvm_config(['--libs'] + components).split()
libs = []
objs = []
for part in parts:
if part.startswith('-l'):
elif part.endswith('.o'):
return libs, objs
def get_llvm_version():
# get version number; treat it as fixed point
pat = re.compile(r'(\d+)\.(\d+)')
m =[' --version']))
if m is None:
sys.exit('could not determine llvm version')
return tuple(map(int, m.groups()))
def auto_intrinsic_gen(incdir):
# let's do auto intrinsic generation
print("Generate intrinsic IDs")
from tools import intrgen
path = "%s/llvm/Intrinsics.gen" % incdir
with open('llvm/', 'w') as fout:
intrgen.gen(path, fout)
incdir = run_llvm_config(['--includedir'])
libdir = run_llvm_config(['--libdir'])
ldflags = run_llvm_config(['--ldflags'])
llvm_version = get_llvm_version()
print('LLVM version = %d.%d' % llvm_version)
if dynlink:
libs_core = ['LLVM-%d.%d' % llvm_version]
objs_core = []
if sys.platform == 'win32':
# XXX: If found, the PTX components are returned by,
# regardless of whether we ask for them. There should be a better way
# eventually.
print('PTX is included on Win32 at if found by')
ptx_components = []
elif llvm_version <= (3, 1): # select between PTX & NVPTX
print('Using PTX')
ptx_components = ['ptx',
print('Using NVPTX')
ptx_components = ['nvptx',
libs_core, objs_core = get_libs_and_objs(
['core', 'analysis', 'scalaropts', 'executionengine',
'jit', 'native', 'interpreter', 'bitreader', 'bitwriter',
'instrumentation', 'ipa', 'ipo', 'transformutils',
'asmparser', 'linker', 'support', 'vectorize']
+ ptx_components)
macros = [('__STDC_CONSTANT_MACROS', None),
if sys.platform == 'win32':
# If no PTX lib got added, disable PTX in the build
if 'LLVMPTXCodeGen' not in libs_core:
macros.append(('LLVM_DISABLE_PTX', None)),
macros.append(('_GNU_SOURCE', None))
extra_link_args = ldflags.split()
kwds = dict(ext_modules = [Extension(
sources=['llvm/_core.cpp', 'llvm/wrap.cpp', 'llvm/extra.cpp'],
define_macros = macros,
include_dirs = ['/usr/include', incdir],
library_dirs = [libdir],
libraries = libs_core,
extra_objects = objs_core,
extra_link_args = extra_link_args)])
# Read version from llvm/
pat = re.compile(r'__version__\s*=\s*(\S+)', re.M)
data = open('llvm/').read()
kwds['version'] = eval(
name = 'llvm-py',
description = 'Python bindings for LLVM',
author = 'Mahadevan R',
author_email = '',
url = '',
packages = ['llvm'],
py_modules = ['llvm.core'],
Jump to Line
Something went wrong with that request. Please try again.