This contains the foundation for the new binding as well as early work on Module and Type.
54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
import sys, os
|
|
from distutils.core import setup, Extension
|
|
|
|
llvm_config = os.environ.get('LLVM_CONFIG_PATH')
|
|
|
|
def run_llvm_config(args):
|
|
cmd = llvm_config + ' ' + ' '.join(args)
|
|
return os.popen(cmd).read().rstrip()
|
|
|
|
def get_libs_and_objs(components):
|
|
parts = run_llvm_config(['--libs'] + components).split()
|
|
libs = []
|
|
objs = []
|
|
for part in parts:
|
|
if part.startswith('-l'):
|
|
libs.append(part[2:])
|
|
elif part.endswith('.o'):
|
|
objs.append(part)
|
|
return libs, objs
|
|
|
|
incdir = run_llvm_config(['--includedir'])
|
|
libdir = run_llvm_config(['--libdir'])
|
|
ldflags = run_llvm_config(['--ldflags'])
|
|
macros = [('__STDC_CONSTANT_MACROS', None),
|
|
('__STDC_LIMIT_MACROS', None)]
|
|
|
|
extra_link_args = ldflags.split()
|
|
|
|
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'])
|
|
|
|
ext_modules = [Extension(name='_api',
|
|
sources=['api.cpp'],
|
|
include_dirs = ['include', incdir],
|
|
library_dirs = [libdir],
|
|
libraries = libs_core,
|
|
define_macros = macros,
|
|
extra_objects = objs_core,
|
|
extra_link_args = extra_link_args),
|
|
Extension(name='_capsule',
|
|
sources=['capsule.cpp'],
|
|
include_dirs = ['include'],),
|
|
]
|
|
|
|
|
|
setup(name = 'llvmpy2',
|
|
description = 'Python bindings for LLVM',
|
|
author = 'Siu Kwan Lam',
|
|
ext_modules = ext_modules,
|
|
license = "BSD")
|