diff --git a/AMBuildScript b/AMBuildScript index d5fa267e..94c27aa4 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -121,7 +121,6 @@ class SMConfig(object): if len(self.sdks) < 1: raise Exception('At least one SDK must be available.') - if builder.options.mms_path: self.mms_root = builder.options.mms_path else: @@ -153,136 +152,25 @@ class SMConfig(object): cxx = builder.DetectCompilers() if cxx.like('gcc'): - cxx.defines += [ - 'stricmp=strcasecmp', - '_stricmp=strcasecmp', - '_snprintf=snprintf', - '_vsnprintf=vsnprintf', - 'HAVE_STDINT_H', - 'GNUC', - ] - cxx.cflags += [ - '-pipe', - '-fno-strict-aliasing', - '-Wall', - '-Werror', - '-Wno-unused', - '-Wno-switch', - '-Wno-array-bounds', - '-msse', - '-m32', - ] - cxx.cxxflags += [ - '-std=c++11', - ] - - have_gcc = cxx.vendor == 'gcc' - have_clang = cxx.vendor == 'clang' - if have_clang or (have_gcc and cxx.version >= '4'): - cxx.cflags += ['-fvisibility=hidden'] - cxx.cxxflags += ['-fvisibility-inlines-hidden'] - if have_clang and cxx.version >= 'clang-3.6': - cxx.cxxflags += ['-Wno-inconsistent-missing-override'] - if have_clang or (have_gcc and cxx.version >= '4.6'): - cxx.cflags += ['-Wno-narrowing'] - if (have_gcc and cxx.version >= '4.7') or (have_clang and cxx.version >= '3'): - cxx.cxxflags += ['-Wno-delete-non-virtual-dtor'] - if have_gcc and cxx.version >= '4.8': - cxx.cflags += ['-Wno-unused-result'] - if have_clang: - cxx.cxxflags += ['-Wno-implicit-exception-spec-mismatch'] - if cxx.version >= 'apple-clang-5.1' or cxx.version >= 'clang-3.4': - cxx.cxxflags += ['-Wno-deprecated-register'] - else: - cxx.cxxflags += ['-Wno-deprecated'] - cxx.cflags += ['-Wno-sometimes-uninitialized'] - - cxx.linkflags += ['-m32'] - cxx.cxxflags += [ - '-fno-exceptions', - '-fno-threadsafe-statics', - '-Wno-non-virtual-dtor', - '-Wno-overloaded-virtual', - ] - - if have_gcc: - cxx.cflags += ['-mfpmath=sse'] + self.configure_gcc(cxx) elif cxx.vendor == 'msvc': - if builder.options.debug == '1': - cxx.cflags += ['/MTd'] - cxx.linkflags += ['/NODEFAULTLIB:libcmt'] - else: - cxx.cflags += ['/MT'] - cxx.defines += [ - '_CRT_SECURE_NO_DEPRECATE', - '_CRT_SECURE_NO_WARNINGS', - '_CRT_NONSTDC_NO_DEPRECATE', - '_ITERATOR_DEBUG_LEVEL=0', - ] - cxx.cflags += [ - '/W3', - ] - cxx.cxxflags += [ - '/EHsc', - '/GR-', - '/TP', - ] - cxx.linkflags += [ - '/MACHINE:X86', - 'kernel32.lib', - 'user32.lib', - 'gdi32.lib', - 'winspool.lib', - 'comdlg32.lib', - 'advapi32.lib', - 'shell32.lib', - 'ole32.lib', - 'oleaut32.lib', - 'uuid.lib', - 'odbc32.lib', - 'odbccp32.lib', - ] + self.configure_msvc(cxx) - # Optimization + # Optimizaiton if builder.options.opt == '1': cxx.defines += ['NDEBUG'] - if cxx.like('gcc'): - cxx.cflags += ['-O3'] - elif cxx.like('msvc'): - cxx.cflags += ['/Ox', '/Zo'] - cxx.linkflags += ['/OPT:ICF', '/OPT:REF'] # Debugging if builder.options.debug == '1': cxx.defines += ['DEBUG', '_DEBUG'] - if cxx.like('msvc'): - cxx.cflags += ['/Od', '/RTC1'] - - # This needs to be after our optimization flags which could otherwise disable it. - if cxx.vendor == 'msvc': - # Don't omit the frame pointer. - cxx.cflags += ['/Oy-'] # Platform-specifics if builder.target_platform == 'linux': - cxx.defines += ['_LINUX', 'POSIX'] - cxx.linkflags += ['-lm'] - if cxx.vendor == 'gcc': - cxx.linkflags += ['-static-libgcc'] - elif cxx.vendor == 'clang': - cxx.linkflags += ['-lgcc_eh'] + self.configure_linux(cxx) elif builder.target_platform == 'mac': - cxx.defines += ['OSX', '_OSX', 'POSIX'] - cxx.cflags += ['-mmacosx-version-min=10.5'] - cxx.linkflags += [ - '-mmacosx-version-min=10.5', - '-arch', 'i386', - '-lstdc++', - '-stdlib=libstdc++', - ] - cxx.cxxflags += ['-stdlib=libstdc++'] + self.configure_mac(cxx) elif builder.target_platform == 'windows': - cxx.defines += ['WIN32', '_WINDOWS'] + self.configure_windows(cxx) # Finish up. cxx.defines += [ @@ -299,6 +187,131 @@ class SMConfig(object): os.path.join(builder.sourcePath, 'versionlib'), ] + def configure_gcc(self, cxx): + cxx.defines += [ + 'stricmp=strcasecmp', + '_stricmp=strcasecmp', + '_snprintf=snprintf', + '_vsnprintf=vsnprintf', + 'HAVE_STDINT_H', + 'GNUC', + ] + cxx.cflags += [ + '-pipe', + '-fno-strict-aliasing', + '-Wall', + '-Werror', + '-Wno-unused', + '-Wno-switch', + '-Wno-array-bounds', + '-msse', + '-m32', + '-fvisibility=hidden', + ] + cxx.cxxflags += [ + '-std=c++11', + '-fno-exceptions', + '-fno-threadsafe-statics', + '-Wno-non-virtual-dtor', + '-Wno-overloaded-virtual', + '-fvisibility-inlines-hidden', + ] + cxx.linkflags += ['-m32'] + + have_gcc = cxx.vendor == 'gcc' + have_clang = cxx.vendor == 'clang' + if cxx.version >= 'clang-3.6': + cxx.cxxflags += ['-Wno-inconsistent-missing-override'] + if have_clang or (cxx.version >= 'gcc-4.6'): + cxx.cflags += ['-Wno-narrowing'] + if have_clang or (cxx.version >= 'gcc-4.7'): + cxx.cxxflags += ['-Wno-delete-non-virtual-dtor'] + if cxx.version >= 'gcc-4.8': + cxx.cflags += ['-Wno-unused-result'] + + if have_clang: + cxx.cxxflags += ['-Wno-implicit-exception-spec-mismatch'] + if cxx.version >= 'apple-clang-5.1' or cxx.version >= 'clang-3.4': + cxx.cxxflags += ['-Wno-deprecated-register'] + else: + cxx.cxxflags += ['-Wno-deprecated'] + cxx.cflags += ['-Wno-sometimes-uninitialized'] + + if have_gcc: + cxx.cflags += ['-mfpmath=sse'] + + if builder.options.opt == '1': + cxx.cflags += ['-O3'] + + def configure_msvc(self, cxx): + if builder.options.debug == '1': + cxx.cflags += ['/MTd'] + cxx.linkflags += ['/NODEFAULTLIB:libcmt'] + else: + cxx.cflags += ['/MT'] + cxx.defines += [ + '_CRT_SECURE_NO_DEPRECATE', + '_CRT_SECURE_NO_WARNINGS', + '_CRT_NONSTDC_NO_DEPRECATE', + '_ITERATOR_DEBUG_LEVEL=0', + ] + cxx.cflags += [ + '/W3', + ] + cxx.cxxflags += [ + '/EHsc', + '/GR-', + '/TP', + ] + cxx.linkflags += [ + '/MACHINE:X86', + 'kernel32.lib', + 'user32.lib', + 'gdi32.lib', + 'winspool.lib', + 'comdlg32.lib', + 'advapi32.lib', + 'shell32.lib', + 'ole32.lib', + 'oleaut32.lib', + 'uuid.lib', + 'odbc32.lib', + 'odbccp32.lib', + ] + + if builder.options.opt == '1': + cxx.cflags += ['/Ox', '/Zo'] + cxx.linkflags += ['/OPT:ICF', '/OPT:REF'] + + if builder.options.debug == '1': + cxx.cflags += ['/Od', '/RTC1'] + + # This needs to be after our optimization flags which could otherwise disable it. + # Don't omit the frame pointer. + cxx.cflags += ['/Oy-'] + + def configure_linux(self, cxx): + cxx.defines += ['_LINUX', 'POSIX'] + cxx.linkflags += ['-lm'] + if cxx.vendor == 'gcc': + cxx.linkflags += ['-static-libgcc'] + elif cxx.vendor == 'clang': + cxx.linkflags += ['-lgcc_eh'] + + def configure_mac(self, cxx): + cxx.defines += ['OSX', '_OSX', 'POSIX'] + cxx.cflags += ['-mmacosx-version-min=10.5'] + cxx.linkflags += [ + '-mmacosx-version-min=10.5', + '-arch', 'i386', + '-lstdc++', + '-stdlib=libstdc++', + ] + cxx.cxxflags += ['-stdlib=libstdc++'] + + def configure_windows(self, cxx): + cxx.defines += ['WIN32', '_WINDOWS'] + def AddVersioning(self, binary): if builder.target_platform == 'windows': binary.sources += ['version.rc'] diff --git a/core/logic/thread/PosixThreads.cpp b/core/logic/thread/PosixThreads.cpp index 5639e36e..20a81634 100644 --- a/core/logic/thread/PosixThreads.cpp +++ b/core/logic/thread/PosixThreads.cpp @@ -109,7 +109,7 @@ IThreadHandle *PosixThreader::MakeThread(IThread *pThread, const ThreadParams *p ke::AutoPtr pHandle(new ThreadHandle(this, pThread, params)); - pHandle->m_thread = new ke::Thread(pHandle, "SourceMod"); + pHandle->m_thread = new ke::Thread(pHandle.get(), "SourceMod"); if (!pHandle->m_thread->Succeeded()) return NULL; diff --git a/core/logic/thread/WinThreads.cpp b/core/logic/thread/WinThreads.cpp index 8e50fc9f..4aca8b05 100644 --- a/core/logic/thread/WinThreads.cpp +++ b/core/logic/thread/WinThreads.cpp @@ -108,7 +108,7 @@ IThreadHandle *WinThreader::MakeThread(IThread *pThread, const ThreadParams *par ke::AutoPtr pHandle(new ThreadHandle(this, pThread, params)); - pHandle->m_thread = new ke::Thread(pHandle, "SourceMod"); + pHandle->m_thread = new ke::Thread(pHandle.get(), "SourceMod"); if (!pHandle->m_thread->Succeeded()) return NULL; diff --git a/public/amtl b/public/amtl index 298217cb..c35532ce 160000 --- a/public/amtl +++ b/public/amtl @@ -1 +1 @@ -Subproject commit 298217cbbfac16851bb58574bc6744f58b260b15 +Subproject commit c35532ced5e7e4f882106857bfae8f3db0fbacf0