Hopefully added clang support, going to need to resync scripts against SM soon.

This commit is contained in:
Asher Baker 2012-05-31 12:13:04 +01:00
parent 376bf28f76
commit 93dd6d47aa

View File

@ -46,15 +46,18 @@ class SM:
#Set up defines #Set up defines
cxx = self.compiler.cxx cxx = self.compiler.cxx
if isinstance(cxx, Cpp.GCC): if isinstance(cxx, Cpp.CompatGCC):
self.vendor = 'gcc' if isinstance(cxx, Cpp.GCC):
self.vendor = 'gcc'
elif isinstance(cxx, Cpp.Clang):
self.vendor = 'clang'
self.compiler.AddToListVar('CDEFINES', 'stricmp=strcasecmp') self.compiler.AddToListVar('CDEFINES', 'stricmp=strcasecmp')
self.compiler.AddToListVar('CDEFINES', '_stricmp=strcasecmp') self.compiler.AddToListVar('CDEFINES', '_stricmp=strcasecmp')
self.compiler.AddToListVar('CDEFINES', '_snprintf=snprintf') self.compiler.AddToListVar('CDEFINES', '_snprintf=snprintf')
self.compiler.AddToListVar('CDEFINES', '_vsnprintf=vsnprintf') self.compiler.AddToListVar('CDEFINES', '_vsnprintf=vsnprintf')
self.compiler.AddToListVar('CFLAGS', '-pipe') self.compiler.AddToListVar('CFLAGS', '-pipe')
self.compiler.AddToListVar('CFLAGS', '-fno-strict-aliasing') self.compiler.AddToListVar('CFLAGS', '-fno-strict-aliasing')
if cxx.majorVersion >= 4: if (self.vendor == 'gcc' and cxx.majorVersion >= 4) or self.vendor == 'clang':
self.compiler.AddToListVar('CFLAGS', '-fvisibility=hidden') self.compiler.AddToListVar('CFLAGS', '-fvisibility=hidden')
self.compiler.AddToListVar('CXXFLAGS', '-fvisibility-inlines-hidden') self.compiler.AddToListVar('CXXFLAGS', '-fvisibility-inlines-hidden')
self.compiler.AddToListVar('CFLAGS', '-Wall') self.compiler.AddToListVar('CFLAGS', '-Wall')
@ -71,7 +74,14 @@ class SM:
self.compiler.AddToListVar('CXXFLAGS', '-fno-rtti') self.compiler.AddToListVar('CXXFLAGS', '-fno-rtti')
self.compiler.AddToListVar('CXXFLAGS', '-fno-threadsafe-statics') self.compiler.AddToListVar('CXXFLAGS', '-fno-threadsafe-statics')
self.compiler.AddToListVar('CXXFLAGS', '-Wno-non-virtual-dtor') self.compiler.AddToListVar('CXXFLAGS', '-Wno-non-virtual-dtor')
self.compiler.AddToListVar('CXXFLAGS', '-Wno-overloaded-virtual')
if (self.vendor == 'gcc' and cxx.majorVersion >= 4 and cxx.minorVersion >= 7) or \
(self.vendor == 'clang' and cxx.majorVersion >= 3):
self.compiler.AddToListVar('CXXFLAGS', '-Wno-delete-non-virtual-dtor')
self.compiler.AddToListVar('CDEFINES', 'HAVE_STDINT_H') self.compiler.AddToListVar('CDEFINES', 'HAVE_STDINT_H')
self.compiler.AddToListVar('CDEFINES', 'GNUC')
if self.vendor == 'gcc':
self.compiler.AddToListVar('CFLAGS', '-mfpmath=sse')
elif isinstance(cxx, Cpp.MSVC): elif isinstance(cxx, Cpp.MSVC):
self.vendor = 'msvc' self.vendor = 'msvc'
if AMBuild.options.debug == '1': if AMBuild.options.debug == '1':
@ -107,7 +117,7 @@ class SM:
#Optimization #Optimization
if AMBuild.options.opt == '1': if AMBuild.options.opt == '1':
self.compiler.AddToListVar('CDEFINES', 'NDEBUG') self.compiler.AddToListVar('CDEFINES', 'NDEBUG')
if self.vendor == 'gcc': if self.vendor == 'gcc' or self.vendor == 'clang':
self.compiler.AddToListVar('CFLAGS', '-O3') self.compiler.AddToListVar('CFLAGS', '-O3')
elif self.vendor == 'msvc': elif self.vendor == 'msvc':
self.compiler.AddToListVar('CFLAGS', '/Ox') self.compiler.AddToListVar('CFLAGS', '/Ox')
@ -118,7 +128,7 @@ class SM:
if AMBuild.options.debug == '1': if AMBuild.options.debug == '1':
self.compiler.AddToListVar('CDEFINES', 'DEBUG') self.compiler.AddToListVar('CDEFINES', 'DEBUG')
self.compiler.AddToListVar('CDEFINES', '_DEBUG') self.compiler.AddToListVar('CDEFINES', '_DEBUG')
if self.vendor == 'gcc': if self.vendor == 'gcc' or self.vendor == 'clang':
self.compiler.AddToListVar('CFLAGS', '-g3') self.compiler.AddToListVar('CFLAGS', '-g3')
elif self.vendor == 'msvc': elif self.vendor == 'msvc':
self.compiler.AddToListVar('CFLAGS', '/Od') self.compiler.AddToListVar('CFLAGS', '/Od')
@ -126,29 +136,31 @@ class SM:
#Platform-specifics #Platform-specifics
if AMBuild.target['platform'] == 'linux': if AMBuild.target['platform'] == 'linux':
self.compiler.AddToListVar('CDEFINES', '_LINUX') self.compiler.AddToListVar('CDEFINES', '_LINUX')
elif AMBuild.target['platform'] == 'darwin': if self.vendor == 'gcc':
self.compiler.AddToListVar('CFLAGS', ['-isysroot', self.compiler.AddToListVar('POSTLINKFLAGS', '-static-libgcc')
'/Developer/SDKs/MacOSX10.5.sdk']) if self.vendor == 'clang':
self.compiler.AddToListVar('POSTLINKFLAGS', '-mmacosx-version-min=10.5') self.compiler.AddToListVar('POSTLINKFLAGS', '-lgcc_eh')
self.compiler.AddToListVar('POSTLINKFLAGS', ['-arch', 'i386']) elif AMBuild.target['platform'] == 'darwin':
self.compiler.AddToListVar('POSTLINKFLAGS', '-lstdc++') self.compiler.AddToListVar('POSTLINKFLAGS', '-mmacosx-version-min=10.5')
self.compiler.AddToListVar('POSTLINKFLAGS', ['-arch', 'i386'])
self.compiler.AddToListVar('POSTLINKFLAGS', '-lstdc++')
# For OS X dylib versioning # For OS X dylib versioning
import re import re
productFile = open(os.path.join(AMBuild.sourceFolder, 'buildbot', 'product.version'), 'r') productFile = open(os.path.join(AMBuild.sourceFolder, 'product.version'), 'r')
productContents = productFile.read() productContents = productFile.read()
productFile.close() productFile.close()
m = re.match('(\d+)\.(\d+)\.(\d+).*', productContents) m = re.match('(\d+)\.(\d+)\.(\d+).*', productContents)
if m == None: if m == None:
self.version = '1.0.0' self.version = '1.0.0'
else: else:
major, minor, release = m.groups() major, minor, release = m.groups()
self.version = '{0}.{1}.{2}'.format(major, minor, release) self.version = '{0}.{1}.{2}'.format(major, minor, release)
AMBuild.cache.CacheVariable('version', self.version) AMBuild.cache.CacheVariable('version', self.version)
elif AMBuild.target['platform'] == 'windows': elif AMBuild.target['platform'] == 'windows':
self.compiler.AddToListVar('CDEFINES', 'WIN32') self.compiler.AddToListVar('CDEFINES', 'WIN32')
self.compiler.AddToListVar('CDEFINES', '_WINDOWS') self.compiler.AddToListVar('CDEFINES', '_WINDOWS')
#Finish up #Finish up
self.compiler.AddToListVar('CDEFINES', 'SOURCEMOD_BUILD') self.compiler.AddToListVar('CDEFINES', 'SOURCEMOD_BUILD')