git-svn-id: http://llvm-py.googlecode.com/svn/trunk@40 8d1e9007-1d4e-0410-b67e-1979fd6579aa
105 lines
2.7 KiB
Python
105 lines
2.7 KiB
Python
#!/usr/bin/env python
|
|
|
|
import sys, os
|
|
from distutils.core import setup, Extension
|
|
|
|
|
|
def _run(cmd):
|
|
return os.popen(cmd).read().rstrip()
|
|
|
|
|
|
def get_libs_and_objs(llvm_config, components):
|
|
parts = _run(llvm_config + ' --libs ' + ' '.join(components)).split()
|
|
libs = []
|
|
objs = []
|
|
for part in parts:
|
|
if part.startswith('-l'):
|
|
libs.append(part[2:])
|
|
else:
|
|
assert part.endswith('.o')
|
|
# objs.append(part[:-2])
|
|
objs.append(part) # eh, looks like we need the .o after all
|
|
return (libs, objs)
|
|
|
|
|
|
def get_llvm_config():
|
|
|
|
# get from command-line, or use default
|
|
lc = 'llvm-config'
|
|
i = 0
|
|
while i < len(sys.argv):
|
|
arg = sys.argv[i]
|
|
if arg.startswith('--llvm-config='):
|
|
del sys.argv[i]
|
|
lc = arg.split('=')[1]
|
|
else:
|
|
i += 1
|
|
|
|
# see if it works
|
|
version = _run(lc + ' --version')
|
|
if version == '':
|
|
return (lc, False) # didn't work
|
|
|
|
return (lc, True)
|
|
|
|
|
|
def call_setup(llvm_config):
|
|
|
|
incdir = _run(llvm_config + ' --includedir')
|
|
libdir = _run(llvm_config + ' --libdir')
|
|
ldflags = _run(llvm_config + ' --ldflags')
|
|
libs_core, objs_core = get_libs_and_objs(llvm_config,
|
|
['core', 'analysis', 'scalaropts', 'executionengine',
|
|
'jit', 'native', 'interpreter', 'bitreader', 'bitwriter',
|
|
'instrumentation', 'ipa', 'ipo', 'transformutils',
|
|
'asmparser' ])
|
|
|
|
std_libs = [ 'pthread', 'm' ]
|
|
if not sys.platform.startswith("openbsd"):
|
|
std_libs.append("dl")
|
|
|
|
ext_core = Extension(
|
|
'llvm._core',
|
|
['llvm/_core.c', 'llvm/wrap.c', 'llvm/extra.cpp'],
|
|
define_macros = [
|
|
('__STDC_LIMIT_MACROS', None),
|
|
('_GNU_SOURCE', None)],
|
|
include_dirs = [incdir],
|
|
library_dirs = [libdir],
|
|
libraries = std_libs + libs_core,
|
|
extra_objects = objs_core,
|
|
extra_link_args = ["-fPIC"])
|
|
|
|
setup(
|
|
name='llvm-py',
|
|
version='0.4',
|
|
description='Python Bindings for LLVM',
|
|
author='Mahadevan R',
|
|
author_email='mdevan.foobar@gmail.com',
|
|
url='http://mdevan.nfshost.com/llvm-py/',
|
|
packages=['llvm'],
|
|
py_modules = [ 'llvm.core' ],
|
|
ext_modules = [ ext_core ],)
|
|
|
|
|
|
def main():
|
|
|
|
# get llvm config
|
|
llvm_config, is_good = get_llvm_config()
|
|
if is_good:
|
|
print "Using llvm-config=" + llvm_config
|
|
else:
|
|
print "Cannot invoke llvm-config (tried '%s')." % llvm_config
|
|
print "Try again with --llvm-config=/path/to/llvm-config."
|
|
return 1
|
|
|
|
# setup
|
|
call_setup(llvm_config)
|
|
|
|
# done
|
|
return 0
|
|
|
|
|
|
ev = main()
|
|
sys.exit(ev)
|
|
|