X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=scons%2Fllvm.py;h=6282cb5382faeba571ab8584aefb6db77a65cebe;hb=6f0e2731e862d1c2d8d21927040bead5049a2d68;hp=c8e50c5916d1e0fd54d06a363e411cb1a7158228;hpb=3ce4375912c8ea488460e593e07c5bb15b92dca9;p=mesa.git diff --git a/scons/llvm.py b/scons/llvm.py index c8e50c5916d..6282cb5382f 100644 --- a/scons/llvm.py +++ b/scons/llvm.py @@ -38,6 +38,8 @@ import SCons.Util def generate(env): + env['llvm'] = False + try: llvm_dir = os.environ['LLVM'] except KeyError: @@ -63,6 +65,7 @@ def generate(env): if env['platform'] == 'windows': # XXX: There is no llvm-config on Windows, so assume a standard layout if llvm_dir is None: + print 'scons: LLVM environment variable must be specified when building for windows' return # Try to determine the LLVM version from llvm/Config/config.h @@ -82,11 +85,6 @@ def generate(env): print 'scons: could not determine the LLVM version from %s' % llvm_config return - if llvm_version >= distutils.version.LooseVersion('2.7'): - print 'scons: Ignoring unsupported LLVM version %s' % llvm_version - print 'scons: See http://www.llvm.org/bugs/show_bug.cgi?id=6429' - return - env.Prepend(CPPPATH = [os.path.join(llvm_dir, 'include')]) env.AppendUnique(CPPDEFINES = [ '__STDC_LIMIT_MACROS', @@ -94,7 +92,45 @@ def generate(env): 'HAVE_STDINT_H', ]) env.Prepend(LIBPATH = [os.path.join(llvm_dir, 'lib')]) - if llvm_version >= distutils.version.LooseVersion('2.7'): + if llvm_version >= distutils.version.LooseVersion('3.2'): + # 3.2 + env.Prepend(LIBS = [ + 'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser', + 'LLVMX86CodeGen', 'LLVMX86Desc', 'LLVMSelectionDAG', + 'LLVMAsmPrinter', 'LLVMMCParser', 'LLVMX86AsmPrinter', + 'LLVMX86Utils', 'LLVMX86Info', 'LLVMJIT', + 'LLVMExecutionEngine', 'LLVMCodeGen', 'LLVMScalarOpts', + 'LLVMInstCombine', 'LLVMTransformUtils', 'LLVMipa', + 'LLVMAnalysis', 'LLVMTarget', 'LLVMMC', 'LLVMCore', + 'LLVMSupport', 'LLVMRuntimeDyld', 'LLVMObject' + ]) + elif llvm_version >= distutils.version.LooseVersion('3.0'): + # 3.0 + env.Prepend(LIBS = [ + 'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser', + 'LLVMX86CodeGen', 'LLVMX86Desc', 'LLVMSelectionDAG', + 'LLVMAsmPrinter', 'LLVMMCParser', 'LLVMX86AsmPrinter', + 'LLVMX86Utils', 'LLVMX86Info', 'LLVMJIT', + 'LLVMExecutionEngine', 'LLVMCodeGen', 'LLVMScalarOpts', + 'LLVMInstCombine', 'LLVMTransformUtils', 'LLVMipa', + 'LLVMAnalysis', 'LLVMTarget', 'LLVMMC', 'LLVMCore', + 'LLVMSupport' + ]) + elif llvm_version >= distutils.version.LooseVersion('2.9'): + # 2.9 + env.Prepend(LIBS = [ + 'LLVMObject', 'LLVMMCJIT', 'LLVMMCDisassembler', + 'LLVMLinker', 'LLVMipo', 'LLVMInterpreter', + 'LLVMInstrumentation', 'LLVMJIT', 'LLVMExecutionEngine', + 'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser', + 'LLVMMCParser', 'LLVMX86AsmPrinter', 'LLVMX86CodeGen', + 'LLVMSelectionDAG', 'LLVMX86Utils', 'LLVMX86Info', 'LLVMAsmPrinter', + 'LLVMCodeGen', 'LLVMScalarOpts', 'LLVMInstCombine', + 'LLVMTransformUtils', 'LLVMipa', 'LLVMAsmParser', + 'LLVMArchive', 'LLVMBitReader', 'LLVMAnalysis', 'LLVMTarget', + 'LLVMCore', 'LLVMMC', 'LLVMSupport', + ]) + elif llvm_version >= distutils.version.LooseVersion('2.7'): # 2.7 env.Prepend(LIBS = [ 'LLVMLinker', 'LLVMipo', 'LLVMInterpreter', @@ -123,38 +159,57 @@ def generate(env): env.Append(LIBS = [ 'imagehlp', 'psapi', + 'shell32', + 'advapi32' ]) if env['msvc']: # Some of the LLVM C headers use the inline keyword without # defining it. env.Append(CPPDEFINES = [('inline', '__inline')]) - if env['debug']: + if env['build'] in ('debug', 'checked'): # 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']) - elif env.Detect('llvm-config'): + else: + if not env.Detect('llvm-config'): + print 'scons: llvm-config script not found' + return + llvm_version = env.backtick('llvm-config --version').rstrip() llvm_version = distutils.version.LooseVersion(llvm_version) - if llvm_version >= distutils.version.LooseVersion('2.7'): - print 'scons: Ignoring unsupported LLVM version %s' % llvm_version - print 'scons: See http://www.llvm.org/bugs/show_bug.cgi?id=6429' - return - try: - env.ParseConfig('llvm-config --cppflags') - env.ParseConfig('llvm-config --libs jit interpreter nativecodegen bitwriter') + # Treat --cppflags specially to prevent NDEBUG from disabling + # assertion failures in debug builds. + cppflags = env.ParseFlags('!llvm-config --cppflags') + try: + cppflags['CPPDEFINES'].remove('NDEBUG') + except ValueError: + pass + env.MergeFlags(cppflags) + + # Match llvm --fno-rtti flag + cxxflags = env.backtick('llvm-config --cxxflags').split() + if '-fno-rtti' in cxxflags: + env.Append(CXXFLAGS = ['-fno-rtti']) + + components = ['engine', 'bitwriter', 'x86asmprinter'] + + if llvm_version >= distutils.version.LooseVersion('3.1'): + components.append('mcjit') + + env.ParseConfig('llvm-config --libs ' + ' '.join(components)) env.ParseConfig('llvm-config --ldflags') + if llvm_version >= distutils.version.LooseVersion('3.5'): + env.ParseConfig('llvm-config --system-libs') except OSError: - print 'llvm-config version %s failed' % llvm_version - else: - env['LINK'] = env['CXX'] - else: - return + print 'scons: llvm-config version %s failed' % llvm_version + return assert llvm_version is not None + env['llvm'] = True print 'scons: Found LLVM version %s' % llvm_version env['LLVM_VERSION'] = llvm_version