import os
import os.path
+import sys
import SCons.Errors
import SCons.Util
llvm_dir = os.environ['LLVM']
except KeyError:
# Do nothing -- use the system headers/libs
- pass
+ llvm_dir = None
else:
if not os.path.isdir(llvm_dir):
raise SCons.Errors.InternalError, "Specified LLVM directory not found"
llvm_bin_dir = os.path.join(llvm_dir, llvm_subdir, 'bin')
if not os.path.isdir(llvm_bin_dir):
- raise SCons.Errors.InternalError, "LLVM build directory not found"
+ llvm_bin_dir = os.path.join(llvm_dir, 'bin')
+ if not os.path.isdir(llvm_bin_dir):
+ raise SCons.Errors.InternalError, "LLVM binary directory not found"
env.PrependENVPath('PATH', llvm_bin_dir)
- if env.Detect('llvm-config'):
+ if env['platform'] == 'windows':
+ # XXX: There is no llvm-config on Windows, so assume a standard layout
+ if llvm_dir is not None:
+ env.Prepend(CPPPATH = [os.path.join(llvm_dir, 'include')])
+ env.AppendUnique(CPPDEFINES = [
+ '__STDC_LIMIT_MACROS',
+ '__STDC_CONSTANT_MACROS',
+ 'HAVE_STDINT_H',
+ ])
+ env.Prepend(LIBPATH = [os.path.join(llvm_dir, 'lib')])
+ env.Prepend(LIBS = [
+ 'LLVMX86AsmParser',
+ 'LLVMX86AsmPrinter',
+ 'LLVMX86CodeGen',
+ 'LLVMX86Info',
+ 'LLVMLinker',
+ 'LLVMipo',
+ 'LLVMInterpreter',
+ 'LLVMInstrumentation',
+ 'LLVMJIT',
+ 'LLVMExecutionEngine',
+ 'LLVMDebugger',
+ 'LLVMBitWriter',
+ 'LLVMAsmParser',
+ 'LLVMArchive',
+ 'LLVMBitReader',
+ 'LLVMSelectionDAG',
+ 'LLVMAsmPrinter',
+ 'LLVMCodeGen',
+ 'LLVMScalarOpts',
+ 'LLVMTransformUtils',
+ 'LLVMipa',
+ 'LLVMAnalysis',
+ 'LLVMTarget',
+ 'LLVMMC',
+ 'LLVMCore',
+ 'LLVMSupport',
+ 'LLVMSystem',
+ 'imagehlp',
+ 'psapi',
+ ])
+ if env['msvc']:
+ # Some of the LLVM C headers use the inline keyword without
+ # defining it.
+ env.Append(CPPDEFINES = [('inline', '__inline')])
+ if env['debug']:
+ # LLVM libraries are static, build with /MT, and they
+ # automatically link agains LIBCMT. When we're doing a
+ # debug build we'll be linking against LIBCMTD, so disable
+ # that.
+ env.Append(LINKFLAGS = ['/nodefaultlib:LIBCMT'])
+ env['LLVM_VERSION'] = '2.6'
+ return
+ elif env.Detect('llvm-config'):
version = env.backtick('llvm-config --version').rstrip()
try:
except OSError:
print 'llvm-config version %s failed' % version
else:
+ if env['platform'] == 'windows':
+ env.Append(LIBS = ['imagehlp', 'psapi'])
env['LINK'] = env['CXX']
env['LLVM_VERSION'] = version