From 93dd6d47aa76cbe55173cc5f7b3c5fed7bbc060c Mon Sep 17 00:00:00 2001 From: Asher Baker Date: Thu, 31 May 2012 12:13:04 +0100 Subject: [PATCH] Hopefully added clang support, going to need to resync scripts against SM soon. --- AMBuildScript | 68 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 28 deletions(-) diff --git a/AMBuildScript b/AMBuildScript index 293e5bf..697af95 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -46,15 +46,18 @@ class SM: #Set up defines cxx = self.compiler.cxx - if isinstance(cxx, Cpp.GCC): - self.vendor = 'gcc' + if isinstance(cxx, Cpp.CompatGCC): + 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', '_snprintf=snprintf') self.compiler.AddToListVar('CDEFINES', '_vsnprintf=vsnprintf') self.compiler.AddToListVar('CFLAGS', '-pipe') 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('CXXFLAGS', '-fvisibility-inlines-hidden') self.compiler.AddToListVar('CFLAGS', '-Wall') @@ -71,7 +74,14 @@ class SM: self.compiler.AddToListVar('CXXFLAGS', '-fno-rtti') self.compiler.AddToListVar('CXXFLAGS', '-fno-threadsafe-statics') 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', 'GNUC') + if self.vendor == 'gcc': + self.compiler.AddToListVar('CFLAGS', '-mfpmath=sse') elif isinstance(cxx, Cpp.MSVC): self.vendor = 'msvc' if AMBuild.options.debug == '1': @@ -107,7 +117,7 @@ class SM: #Optimization if AMBuild.options.opt == '1': self.compiler.AddToListVar('CDEFINES', 'NDEBUG') - if self.vendor == 'gcc': + if self.vendor == 'gcc' or self.vendor == 'clang': self.compiler.AddToListVar('CFLAGS', '-O3') elif self.vendor == 'msvc': self.compiler.AddToListVar('CFLAGS', '/Ox') @@ -118,7 +128,7 @@ class SM: if AMBuild.options.debug == '1': 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') elif self.vendor == 'msvc': self.compiler.AddToListVar('CFLAGS', '/Od') @@ -126,29 +136,31 @@ class SM: #Platform-specifics if AMBuild.target['platform'] == 'linux': - self.compiler.AddToListVar('CDEFINES', '_LINUX') - elif AMBuild.target['platform'] == 'darwin': - self.compiler.AddToListVar('CFLAGS', ['-isysroot', - '/Developer/SDKs/MacOSX10.5.sdk']) - 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 - import re - productFile = open(os.path.join(AMBuild.sourceFolder, 'buildbot', 'product.version'), 'r') - productContents = productFile.read() - productFile.close() - m = re.match('(\d+)\.(\d+)\.(\d+).*', productContents) - if m == None: - self.version = '1.0.0' - else: - major, minor, release = m.groups() - self.version = '{0}.{1}.{2}'.format(major, minor, release) - AMBuild.cache.CacheVariable('version', self.version) - elif AMBuild.target['platform'] == 'windows': - self.compiler.AddToListVar('CDEFINES', 'WIN32') - self.compiler.AddToListVar('CDEFINES', '_WINDOWS') + self.compiler.AddToListVar('CDEFINES', '_LINUX') + if self.vendor == 'gcc': + self.compiler.AddToListVar('POSTLINKFLAGS', '-static-libgcc') + if self.vendor == 'clang': + self.compiler.AddToListVar('POSTLINKFLAGS', '-lgcc_eh') + elif AMBuild.target['platform'] == 'darwin': + 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 + import re + productFile = open(os.path.join(AMBuild.sourceFolder, 'product.version'), 'r') + productContents = productFile.read() + productFile.close() + m = re.match('(\d+)\.(\d+)\.(\d+).*', productContents) + if m == None: + self.version = '1.0.0' + else: + major, minor, release = m.groups() + self.version = '{0}.{1}.{2}'.format(major, minor, release) + AMBuild.cache.CacheVariable('version', self.version) + elif AMBuild.target['platform'] == 'windows': + self.compiler.AddToListVar('CDEFINES', 'WIN32') + self.compiler.AddToListVar('CDEFINES', '_WINDOWS') #Finish up self.compiler.AddToListVar('CDEFINES', 'SOURCEMOD_BUILD')