diff --git a/AMBuildScript b/AMBuildScript index a1bbdbe..e26c518 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -12,7 +12,7 @@ class SDK(object): self.define = name self.platform = platform self.name = dir - self.path = None + self.path = None # Actual path WinOnly = ['windows'] WinLinux = ['windows', 'linux'] @@ -111,140 +111,168 @@ class ExtensionConfig(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 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.includes += [ os.path.join(self.sm_root, 'public'), ] - + + 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 += ['-Wl,--exclude-libs,ALL', '-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 ConfigureForExtension(self, context, compiler): + compiler.cxxincludes += [ + os.path.join(context.currentSourcePath), + os.path.join(context.currentSourcePath, 'sdk'), + os.path.join(self.sm_root, 'public'), + os.path.join(self.sm_root, 'public', 'extensions'), + os.path.join(self.sm_root, 'sourcepawn', 'include'), + os.path.join(self.sm_root, 'public', 'amtl', 'amtl'), + os.path.join(self.sm_root, 'public', 'amtl'), + ] + return compiler + def ConfigureForHL2(self, binary, sdk): compiler = binary.compiler @@ -294,10 +322,10 @@ class ExtensionConfig(object): # For everything after Swarm, this needs to be defined for entity networking # to work properly with sendprop value changes. - if sdk.name in ['blade', 'insurgency', 'csgo', 'dota']: + if sdk.name in ['blade', 'insurgency', 'doi', 'csgo']: compiler.defines += ['NETWORK_VARS_ENABLED'] - if sdk.name in ['css', 'hl2dm', 'dods', 'sdk2013', 'bms', 'tf2', 'l4d', 'nucleardawn', 'l4d2', 'dota']: + if sdk.name in ['css', 'hl2dm', 'dods', 'sdk2013', 'bms', 'tf2', 'l4d', 'nucleardawn', 'l4d2']: if builder.target_platform in ['linux', 'mac']: compiler.defines += ['NO_HOOK_MALLOC', 'NO_MALLOC_OVERRIDE'] @@ -332,14 +360,14 @@ class ExtensionConfig(object): compiler.Dep(os.path.join(lib_folder, 'mathlib_i486.a')) ] - if sdk.name in ['blade', 'insurgency', 'csgo', 'dota']: + if sdk.name in ['blade', 'insurgency', 'doi', 'csgo']: compiler.postlink += [compiler.Dep(os.path.join(lib_folder, 'interfaces_i486.a'))] dynamic_libs = [] if builder.target_platform == 'linux': - if sdk.name in ['css', 'hl2dm', 'dods', 'tf2', 'sdk2013', 'bms', 'nucleardawn', 'l4d2']: + if sdk.name in ['css', 'hl2dm', 'dods', 'tf2', 'sdk2013', 'bms', 'nucleardawn', 'l4d2', 'insurgency', 'doi']: dynamic_libs = ['libtier0_srv.so', 'libvstdlib_srv.so'] - elif sdk.name in ['l4d', 'blade', 'insurgency', 'csgo', 'dota']: + elif sdk.name in ['l4d', 'blade', 'insurgency', 'doi', 'csgo']: dynamic_libs = ['libtier0.so', 'libvstdlib.so'] else: dynamic_libs = ['tier0_i486.so', 'vstdlib_i486.so'] @@ -348,7 +376,7 @@ class ExtensionConfig(object): dynamic_libs = ['libtier0.dylib', 'libvstdlib.dylib'] elif builder.target_platform == 'windows': libs = ['tier0', 'tier1', 'vstdlib', 'mathlib'] - if sdk.name in ['swarm', 'blade', 'insurgency', 'csgo', 'dota']: + if sdk.name in ['swarm', 'blade', 'insurgency', 'doi', 'csgo']: libs.append('interfaces') for lib in libs: lib_path = os.path.join(sdk.path, 'lib', 'public', lib) + '.lib' @@ -369,22 +397,16 @@ class ExtensionConfig(object): return binary - def ConfigureForExtension(self, context, compiler): - compiler.cxxincludes += [ - os.path.join(context.currentSourcePath), - os.path.join(context.currentSourcePath, 'sdk'), - os.path.join(self.sm_root, 'public'), - os.path.join(self.sm_root, 'public', 'extensions'), - os.path.join(self.sm_root, 'sourcepawn', 'include'), - os.path.join(self.sm_root, 'public', 'amtl', 'include'), - ] - return compiler + def HL2Library(self, context, name, sdk): + binary = context.compiler.Library(name) + self.ConfigureForExtension(context, binary.compiler) + return self.ConfigureForHL2(binary, sdk) def HL2Project(self, context, name): project = context.compiler.LibraryProject(name) self.ConfigureForExtension(context, project.compiler) return project - + def HL2Config(self, project, name, sdk): binary = project.Configure(name, '{0} - {1}'.format(self.tag, sdk.name)) return self.ConfigureForHL2(binary, sdk) diff --git a/AMBuilder b/AMBuilder index 570c005..a225319 100644 --- a/AMBuilder +++ b/AMBuilder @@ -11,18 +11,19 @@ project.sources += [ 'extension.cpp', '../../public/smsdk_ext.cpp', '../../public/CDetour/detours.cpp', - '../../public/asm/asm.c' + '../../public/asm/asm.c', + '../../public/libudis86/decode.c', + '../../public/libudis86/itab.c', + '../../public/libudis86/syn-att.c', + '../../public/libudis86/syn-intel.c', + '../../public/libudis86/syn.c', + '../../public/libudis86/udis86.c', ] +project.compiler.defines += ['HAVE_STRING_H']; for sdk_name in SM.sdks: sdk = SM.sdks[sdk_name] binary = SM.HL2Config(project, projectName + '.ext', sdk) - binary.compiler.cxxincludes += [ - os.path.join(SM.sm_root, 'public', 'extensions'), - os.path.join(SM.sm_root, 'public', 'sourcepawn'), - os.path.join(SM.sm_root, 'public', 'amtl'), - os.path.join(SM.sm_root, 'public', 'amtl', 'amtl') - ] SM.extensions += builder.Add(project) diff --git a/extension.cpp b/extension.cpp index c7721bc..f7795b7 100644 --- a/extension.cpp +++ b/extension.cpp @@ -187,9 +187,9 @@ public: int iChallenge; int iClientChallenge; int nAuthProtocol; - char pchName[255]; - char pchPassword[255]; - char pCookie[255]; + char pchName[256]; + char pchPassword[256]; + char pCookie[256]; int cbCookie; uint64 ullSteamID; @@ -206,9 +206,9 @@ public: this->iChallenge = iChallenge; this->iClientChallenge = iClientChallenge; this->nAuthProtocol = nAuthProtocol; - strncpy(this->pchName, pchName, sizeof(this->pchName)); - strncpy(this->pchPassword, pchPassword, sizeof(this->pchPassword)); - strncpy(this->pCookie, pCookie, sizeof(this->pCookie)); + strncpy(this->pchName, pchName, sizeof(this->pchName) - 1); + strncpy(this->pchPassword, pchPassword, sizeof(this->pchPassword) - 1); + strncpy(this->pCookie, pCookie, sizeof(this->pCookie) - 1); this->cbCookie = cbCookie; this->GotValidateAuthTicketResponse = false; this->SteamLegal = false;