1836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca"""llvm 2836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 3836a9f0ae6e03d2f92dc024703015c25a5b3c353José FonsecaTool-specific initialization for LLVM 4836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 5836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca""" 6836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 7836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# 8836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# Copyright (c) 2009 VMware, Inc. 9836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# 10836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# Permission is hereby granted, free of charge, to any person obtaining 11836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# a copy of this software and associated documentation files (the 12836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# "Software"), to deal in the Software without restriction, including 13836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# without limitation the rights to use, copy, modify, merge, publish, 14836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# distribute, sublicense, and/or sell copies of the Software, and to 15836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# permit persons to whom the Software is furnished to do so, subject to 16836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# the following conditions: 17836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# 18836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# The above copyright notice and this permission notice shall be included 19836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# in all copies or substantial portions of the Software. 20836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# 21836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY 22836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 23836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 25836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 26836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 27836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 28836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# 29836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 30836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonsecaimport os 31836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonsecaimport os.path 328edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonsecaimport re 33bf48447cafc8069839ad41c9c11078c794f4b307José Fonsecaimport sys 348edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonsecaimport distutils.version 35836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 36836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonsecaimport SCons.Errors 37836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonsecaimport SCons.Util 38836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 39836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 40836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonsecadef generate(env): 41601498ae73e654c2de997ea75075613a694d604dJosé Fonseca env['llvm'] = False 42601498ae73e654c2de997ea75075613a694d604dJosé Fonseca 43836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca try: 44836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca llvm_dir = os.environ['LLVM'] 45836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca except KeyError: 46836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca # Do nothing -- use the system headers/libs 47bf48447cafc8069839ad41c9c11078c794f4b307José Fonseca llvm_dir = None 48836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca else: 49836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca if not os.path.isdir(llvm_dir): 50836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca raise SCons.Errors.InternalError, "Specified LLVM directory not found" 51836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 52836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca if env['debug']: 53836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca llvm_subdir = 'Debug' 54836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca else: 55836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca llvm_subdir = 'Release' 56836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 57836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca llvm_bin_dir = os.path.join(llvm_dir, llvm_subdir, 'bin') 58836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca if not os.path.isdir(llvm_bin_dir): 59459ea0095c31eff835b25dd3eef48a4c073d05f9José Fonseca llvm_bin_dir = os.path.join(llvm_dir, 'bin') 60459ea0095c31eff835b25dd3eef48a4c073d05f9José Fonseca if not os.path.isdir(llvm_bin_dir): 61459ea0095c31eff835b25dd3eef48a4c073d05f9José Fonseca raise SCons.Errors.InternalError, "LLVM binary directory not found" 62836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 63836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca env.PrependENVPath('PATH', llvm_bin_dir) 64836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 659e3728c858e0f84b05a24f858f6aeba53fa4e7cbJosé Fonseca if env['platform'] == 'windows': 66bf48447cafc8069839ad41c9c11078c794f4b307José Fonseca # XXX: There is no llvm-config on Windows, so assume a standard layout 678edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca if llvm_dir is None: 68ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca print 'scons: LLVM environment variable must be specified when building for windows' 69601498ae73e654c2de997ea75075613a694d604dJosé Fonseca return 708edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 718edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca # Try to determine the LLVM version from llvm/Config/config.h 728edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca llvm_config = os.path.join(llvm_dir, 'include/llvm/Config/config.h') 738edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca if not os.path.exists(llvm_config): 748edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca print 'scons: could not find %s' % llvm_config 75601498ae73e654c2de997ea75075613a694d604dJosé Fonseca return 768edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca llvm_version_re = re.compile(r'^#define PACKAGE_VERSION "([^"]*)"') 778edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca llvm_version = None 788edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca for line in open(llvm_config, 'rt'): 798edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca mo = llvm_version_re.match(line) 808edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca if mo: 818edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca llvm_version = mo.group(1) 8219a633310feb3283d979c4ab4cb11a53dcfb6af6José Fonseca llvm_version = distutils.version.LooseVersion(llvm_version) 838edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca break 848edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca if llvm_version is None: 858edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca print 'scons: could not determine the LLVM version from %s' % llvm_config 86601498ae73e654c2de997ea75075613a694d604dJosé Fonseca return 878edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 888edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca env.Prepend(CPPPATH = [os.path.join(llvm_dir, 'include')]) 898edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca env.AppendUnique(CPPDEFINES = [ 908edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca '__STDC_LIMIT_MACROS', 918edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca '__STDC_CONSTANT_MACROS', 928edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'HAVE_STDINT_H', 938edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca ]) 948edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca env.Prepend(LIBPATH = [os.path.join(llvm_dir, 'lib')]) 95a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca if llvm_version >= distutils.version.LooseVersion('3.0'): 96a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca # 3.0 97a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca env.Prepend(LIBS = [ 98a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca 'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser', 99a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca 'LLVMX86CodeGen', 'LLVMX86Desc', 'LLVMSelectionDAG', 100a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca 'LLVMAsmPrinter', 'LLVMMCParser', 'LLVMX86AsmPrinter', 101a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca 'LLVMX86Utils', 'LLVMX86Info', 'LLVMJIT', 102a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca 'LLVMExecutionEngine', 'LLVMCodeGen', 'LLVMScalarOpts', 103a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca 'LLVMInstCombine', 'LLVMTransformUtils', 'LLVMipa', 104a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca 'LLVMAnalysis', 'LLVMTarget', 'LLVMMC', 'LLVMCore', 105a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca 'LLVMSupport' 106a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca ]) 107a1482b21cb438c271cf20e7d52cb9e4e0537344cJosé Fonseca elif llvm_version >= distutils.version.LooseVersion('2.9'): 1087be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca # 2.9 1097be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca env.Prepend(LIBS = [ 1107be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca 'LLVMObject', 'LLVMMCJIT', 'LLVMMCDisassembler', 1117be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca 'LLVMLinker', 'LLVMipo', 'LLVMInterpreter', 1127be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca 'LLVMInstrumentation', 'LLVMJIT', 'LLVMExecutionEngine', 1137be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca 'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser', 1147be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca 'LLVMMCParser', 'LLVMX86AsmPrinter', 'LLVMX86CodeGen', 1157be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca 'LLVMSelectionDAG', 'LLVMX86Utils', 'LLVMX86Info', 'LLVMAsmPrinter', 1167be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca 'LLVMCodeGen', 'LLVMScalarOpts', 'LLVMInstCombine', 1177be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca 'LLVMTransformUtils', 'LLVMipa', 'LLVMAsmParser', 1187be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca 'LLVMArchive', 'LLVMBitReader', 'LLVMAnalysis', 'LLVMTarget', 1197be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca 'LLVMCore', 'LLVMMC', 'LLVMSupport', 1207be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca ]) 1217be4cf9c63d3dcacce8a6bf47c471a9aab09b1d7José Fonseca elif llvm_version >= distutils.version.LooseVersion('2.7'): 1228edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca # 2.7 1238edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca env.Prepend(LIBS = [ 1248edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMLinker', 'LLVMipo', 'LLVMInterpreter', 1258edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMInstrumentation', 'LLVMJIT', 'LLVMExecutionEngine', 1268edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser', 1278edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMMCParser', 'LLVMX86AsmPrinter', 'LLVMX86CodeGen', 1288edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMSelectionDAG', 'LLVMX86Info', 'LLVMAsmPrinter', 1298edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMCodeGen', 'LLVMScalarOpts', 'LLVMInstCombine', 1308edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMTransformUtils', 'LLVMipa', 'LLVMAsmParser', 1318edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMArchive', 'LLVMBitReader', 'LLVMAnalysis', 'LLVMTarget', 1328edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMMC', 'LLVMCore', 'LLVMSupport', 'LLVMSystem', 1339e3728c858e0f84b05a24f858f6aeba53fa4e7cbJosé Fonseca ]) 1348edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca else: 1358edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca # 2.6 136bf48447cafc8069839ad41c9c11078c794f4b307José Fonseca env.Prepend(LIBS = [ 1378edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMX86AsmParser', 'LLVMX86AsmPrinter', 'LLVMX86CodeGen', 1388edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMX86Info', 'LLVMLinker', 'LLVMipo', 'LLVMInterpreter', 1398edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMInstrumentation', 'LLVMJIT', 'LLVMExecutionEngine', 1408edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMDebugger', 'LLVMBitWriter', 'LLVMAsmParser', 1418edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMArchive', 'LLVMBitReader', 'LLVMSelectionDAG', 1428edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMAsmPrinter', 'LLVMCodeGen', 'LLVMScalarOpts', 1438edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMTransformUtils', 'LLVMipa', 'LLVMAnalysis', 1448edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'LLVMTarget', 'LLVMMC', 'LLVMCore', 'LLVMSupport', 1459e3728c858e0f84b05a24f858f6aeba53fa4e7cbJosé Fonseca 'LLVMSystem', 146bf48447cafc8069839ad41c9c11078c794f4b307José Fonseca ]) 1478edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca env.Append(LIBS = [ 1488edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'imagehlp', 1498edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 'psapi', 1503d1af78fdc4319b04f9cf324106f127b498b962dBrian Paul 'shell32', 1513d1af78fdc4319b04f9cf324106f127b498b962dBrian Paul 'advapi32' 1528edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca ]) 1538edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca if env['msvc']: 1548edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca # Some of the LLVM C headers use the inline keyword without 1558edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca # defining it. 1568edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca env.Append(CPPDEFINES = [('inline', '__inline')]) 157e3a3a5378e4a1b45f30fcb26730d6c73e623cfacJosé Fonseca if env['build'] in ('debug', 'checked'): 1588edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca # LLVM libraries are static, build with /MT, and they 1598edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca # automatically link agains LIBCMT. When we're doing a 1608edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca # debug build we'll be linking against LIBCMTD, so disable 1618edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca # that. 1628edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca env.Append(LINKFLAGS = ['/nodefaultlib:LIBCMT']) 163ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca else: 164ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca if not env.Detect('llvm-config'): 165ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca print 'scons: llvm-config script not found' % llvm_version 166601498ae73e654c2de997ea75075613a694d604dJosé Fonseca return 167ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca 1688edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca llvm_version = env.backtick('llvm-config --version').rstrip() 16919a633310feb3283d979c4ab4cb11a53dcfb6af6José Fonseca llvm_version = distutils.version.LooseVersion(llvm_version) 170836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 17179f48c9f9e739a1f6b0810072e41bc826f2b789dVinson Lee try: 172acf82194ce4383308d1e8939d1778594bf5547c5José Fonseca # Treat --cppflags specially to prevent NDEBUG from disabling 173acf82194ce4383308d1e8939d1778594bf5547c5José Fonseca # assertion failures in debug builds. 174acf82194ce4383308d1e8939d1778594bf5547c5José Fonseca cppflags = env.ParseFlags('!llvm-config --cppflags') 175acf82194ce4383308d1e8939d1778594bf5547c5José Fonseca try: 176acf82194ce4383308d1e8939d1778594bf5547c5José Fonseca cppflags['CPPDEFINES'].remove('NDEBUG') 177acf82194ce4383308d1e8939d1778594bf5547c5José Fonseca except ValueError: 178acf82194ce4383308d1e8939d1778594bf5547c5José Fonseca pass 179acf82194ce4383308d1e8939d1778594bf5547c5José Fonseca env.MergeFlags(cppflags) 180acf82194ce4383308d1e8939d1778594bf5547c5José Fonseca 1813469715a8a171512cf9b528702e70393f01c6041José Fonseca components = ['engine', 'bitwriter', 'x86asmprinter'] 1823469715a8a171512cf9b528702e70393f01c6041José Fonseca 1833469715a8a171512cf9b528702e70393f01c6041José Fonseca if llvm_version >= distutils.version.LooseVersion('3.1'): 1843469715a8a171512cf9b528702e70393f01c6041José Fonseca components.append('mcjit') 1853469715a8a171512cf9b528702e70393f01c6041José Fonseca 1863469715a8a171512cf9b528702e70393f01c6041José Fonseca env.ParseConfig('llvm-config --libs ' + ' '.join(components)) 18779f48c9f9e739a1f6b0810072e41bc826f2b789dVinson Lee env.ParseConfig('llvm-config --ldflags') 18879f48c9f9e739a1f6b0810072e41bc826f2b789dVinson Lee except OSError: 189ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca print 'scons: llvm-config version %s failed' % llvm_version 190601498ae73e654c2de997ea75075613a694d604dJosé Fonseca return 1918edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 1928edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca assert llvm_version is not None 193601498ae73e654c2de997ea75075613a694d604dJosé Fonseca env['llvm'] = True 1948edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 1958edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca print 'scons: Found LLVM version %s' % llvm_version 1968edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca env['LLVM_VERSION'] = llvm_version 1978edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca 1988edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca # Define HAVE_LLVM macro with the major/minor version number (e.g., 0x0206 for 2.6) 1998edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca llvm_version_major = int(llvm_version.version[0]) 2008edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca llvm_version_minor = int(llvm_version.version[1]) 2018edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca llvm_version_hex = '0x%02x%02x' % (llvm_version_major, llvm_version_minor) 2028edc6b0bfca5b1e159f4d6c024922d5d3ef59e15José Fonseca env.Prepend(CPPDEFINES = [('HAVE_LLVM', llvm_version_hex)]) 203836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 204836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonsecadef exists(env): 205836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca return True 206836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca 207836a9f0ae6e03d2f92dc024703015c25a5b3c353José Fonseca# vim:set ts=4 sw=4 et: 208