From d736010d3b4d14bfd4e7b54f98f3d5cc808a6b07 Mon Sep 17 00:00:00 2001 From: Asher Baker Date: Fri, 17 May 2013 05:24:31 +0100 Subject: [PATCH] Don't require the hl2sdk to build. --- AMBuildScript | 192 +-------------------------------- buildbot/PackageScript | 2 +- extension/AMBuilder | 36 ++++--- extension/extension.cpp | 31 +----- extension/extension.h | 12 +-- extension/sdk/smsdk_config.hpp | 6 +- 6 files changed, 35 insertions(+), 244 deletions(-) diff --git a/AMBuildScript b/AMBuildScript index 46857d6..c76c052 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -27,56 +27,12 @@ class SM: def __init__(self): self.compiler = Cpp.Compiler() - #Build SDK info - self.possibleSdks = { } - self.possibleSdks['ep1'] = {'sdk': 'HL2SDK', 'ext': '1.ep1', 'def': '1', - 'name': 'EPISODEONE', 'platform': []} - self.possibleSdks['ep2'] = {'sdk': 'HL2SDKOB', 'ext': '2.ep2', 'def': '3', - 'name': 'ORANGEBOX', 'platform': []} - self.possibleSdks['css'] = {'sdk': 'HL2SDKCSS', 'ext': '2.css', 'def': '6', - 'name': 'CSS', 'platform': []} - self.possibleSdks['ep2v'] = {'sdk': 'HL2SDKOBVALVE', 'ext': '2.ep2v', 'def': '7', - 'name': 'ORANGEBOXVALVE', 'platform': ['linux']} - self.possibleSdks['l4d'] = {'sdk': 'HL2SDKL4D', 'ext': '2.l4d', 'def': '8', - 'name': 'LEFT4DEAD', 'platform': []} - self.possibleSdks['l4d2'] = {'sdk': 'HL2SDKL4D2', 'ext': '2.l4d2', 'def': '9', - 'name': 'LEFT4DEAD2', 'platform': []} - self.possibleSdks['darkm'] = {'sdk': 'HL2SDK-DARKM', 'ext': '2.darkm', 'def': '2', - 'name': 'DARKMESSIAH', 'platform': []} - self.possibleSdks['swarm'] = {'sdk': 'HL2SDK-SWARM', 'ext': '2.swarm', 'def': '10', - 'name': 'ALIENSWARM', 'platform': []} - self.possibleSdks['bgt'] = {'sdk': 'HL2SDK-BGT', 'ext': '2.bgt', 'def': '4', - 'name': 'BLOODYGOODTIME', 'platform': []} - self.possibleSdks['eye'] = {'sdk': 'HL2SDK-EYE', 'ext': '2.eye', 'def': '5', - 'name': 'EYE', 'platform': []} - self.possibleSdks['csgo'] = {'sdk': 'HL2SDKCSGO', 'ext': '2.csgo', 'def': '12', - 'name': 'CSGO', 'platform': []} - - self.sdkInfo = { } - if AMBuild.mode == 'config': #Detect compilers self.compiler.DetectAll(AMBuild) #Detect variables - envvars = { 'MMSOURCE19': 'mmsource-1.9', - 'SOURCEMOD15': 'sourcemod-1.5', - 'HL2SDKCSS': 'hl2sdk-css', - 'HL2SDKOBVALVE': 'hl2sdk-ob-valve', - 'HL2SDKL4D': 'hl2sdk-l4d', - 'HL2SDKL4D2': 'hl2sdk-l4d2', - 'HL2SDKCSGO': 'hl2sdk-csgo' - } - - if AMBuild.target['platform'] != 'darwin': - envvars['HL2SDK'] = 'hl2sdk' - envvars['HL2SDKOB'] = 'hl2sdk-ob' - - if AMBuild.target['platform'] == 'windows': - envvars['HL2SDK-DARKM'] = 'hl2sdk-darkm' - envvars['HL2SDK-SWARM'] = 'hl2sdk-swarm' - envvars['HL2SDK-BGT'] = 'hl2sdk-bgt' - envvars['HL2SDK-EYE'] = 'hl2sdk-eye' + envvars = { 'SOURCEMOD15': 'sourcemod-1.5' } # Finds if a dict with `key` set to `value` is present on the dict of dicts `dictionary` def findDictByKey(dictionary, key, value): @@ -91,9 +47,6 @@ class SM: path = os.environ[i] if not os.path.isdir(path): raise Exception('Path for {0} was not found: {1}'.format(i, path)) - elif i.startswith('HL2SDK'): - (info, sdk) = findDictByKey(self.possibleSdks, 'sdk', i) - self.sdkInfo[sdk] = info else: head = os.getcwd() oldhead = None @@ -103,19 +56,10 @@ class SM: break oldhead = head head, tail = os.path.split(head) - if i.startswith('HL2SDK'): - if head != None and head != oldhead: - (info, sdk) = findDictByKey(self.possibleSdks, 'sdk', i) - self.sdkInfo[sdk] = info - elif head == None or head == oldhead: + if head == None or head == oldhead: raise Exception('Could not find a valid path for {0}'.format(i)) AMBuild.cache.CacheVariable(i, path) - if len(self.sdkInfo) < 1: - raise Exception('At least one SDK must be available.') - - AMBuild.cache.CacheVariable('sdkInfo', self.sdkInfo) - #Set up defines cxx = self.compiler.cxx if isinstance(cxx, Cpp.CompatGCC): @@ -241,13 +185,11 @@ class SM: self.targetMap = { } AMBuild.cache.CacheVariable('targetMap', self.targetMap) else: - self.sdkInfo = AMBuild.cache['sdkInfo'] self.compiler.FromConfig(AMBuild, 'compiler') self.targetMap = AMBuild.cache['targetMap'] if AMBuild.target['platform'] == 'windows': self.compiler.AddToListVar('RCINCLUDES', os.path.join(AMBuild.sourceFolder, 'extension')) - self.mmsPath = AMBuild.cache['MMSOURCE19'] def DefaultCompiler(self): return self.compiler.Clone() @@ -276,136 +218,6 @@ class SM: src = os.path.join('..', AMBuild.outputFolder, job.workFolder, binary.binaryFile) job.AddCommand(ExtractDebugInfoCommand(binary, src)) - def PreSetupHL2Job(self, job, builder, sdk): - info = self.sdkInfo[sdk] - sdkPath = AMBuild.cache[info['sdk']] - if AMBuild.target['platform'] == 'linux': - if sdk == 'ep1': - staticLibs = os.path.join(sdkPath, 'linux_sdk') - else: - staticLibs = os.path.join(sdkPath, 'lib', 'linux') - workFolder = os.path.join(AMBuild.outputFolder, job.workFolder) - if sdk in ['ep2v', 'css']: - libs = ['tier1_i486.a', 'mathlib_i486.a', 'libvstdlib_srv.so', 'libtier0_srv.so'] - for lib in libs: - link = os.path.join(workFolder, lib) - target = os.path.join(staticLibs, lib) - try: - os.lstat(link) - except: - job.AddCommand(SymlinkCommand(link, target)) - elif sdk in ['l4d', 'l4d2', 'csgo']: - libs = ['tier1_i486.a', 'mathlib_i486.a', 'libvstdlib.so', 'libtier0.so'] - if sdk == 'csgo': - libs.append('interfaces_i486.a') - for lib in libs: - link = os.path.join(workFolder, lib) - target = os.path.join(staticLibs, lib) - try: - os.lstat(link) - except: - job.AddCommand(SymlinkCommand(link, target)) - else: - libs = ['tier1_i486.a', 'mathlib_i486.a', 'vstdlib_i486.so', 'tier0_i486.so'] - for lib in libs: - link = os.path.join(workFolder, lib) - target = os.path.join(staticLibs, lib) - try: - os.lstat(link) - except: - job.AddCommand(SymlinkCommand(link, target)) - elif AMBuild.target['platform'] == 'darwin': - staticLibs = os.path.join(sdkPath, 'lib', 'mac') - workFolder = os.path.join(AMBuild.outputFolder, job.workFolder) - libs = ['tier1_i486.a', 'mathlib_i486.a', 'libvstdlib.dylib', 'libtier0.dylib'] - if sdk == 'csgo': - libs.append('interfaces_i486.a') - for lib in libs: - link = os.path.join(workFolder, lib) - target = os.path.join(staticLibs, lib) - try: - os.lstat(link) - except: - job.AddCommand(SymlinkCommand(link, target)) - elif AMBuild.target['platform'] == 'windows': - libs = ['tier0', 'tier1', 'vstdlib', 'mathlib'] - if sdk in ['swarm', 'csgo']: - libs.append('interfaces') - for lib in libs: - libPath = os.path.join(sdkPath, 'lib', 'public', lib) + '.lib' - builder.RebuildIfNewer(libPath) - builder['POSTLINKFLAGS'].append(libPath) - - def PostSetupHL2Job(self, job, builder, sdk): - if AMBuild.target['platform'] in ['linux', 'darwin']: - builder.AddObjectFiles(['tier1_i486.a', 'mathlib_i486.a']) - if sdk == 'csgo': - builder.AddObjectFiles(['interfaces_i486.a']) - - def DefaultHL2Compiler(self, path, sdk, noLink = False, oldMms = '-legacy'): - compiler = self.DefaultCompiler() - - mms = 'core' - if sdk == 'ep1': - mms += oldMms - - compiler['CXXINCLUDES'].append(os.path.join(self.mmsPath, mms)) - compiler['CXXINCLUDES'].append(os.path.join(self.mmsPath, mms, 'sourcehook')) - - info = self.possibleSdks - compiler['CDEFINES'].extend(['SE_' + info[i]['name'] + '=' + info[i]['def'] for i in info]) - - paths = [['public'], ['public', 'engine'], ['public', 'mathlib'], ['public', 'vstdlib'], ['public', 'tier0'], ['public', 'tier1']] - if sdk == 'ep1' or sdk == 'darkm': - paths.append(['public', 'dlls']) - paths.append(['game_shared']) - else: - paths.append(['public', 'game', 'server']) - paths.append(['public', 'toolframework']) - paths.append(['game', 'shared']) - paths.append(['common']) - - info = self.sdkInfo[sdk] - sdkPath = AMBuild.cache[info['sdk']] - - compiler['CDEFINES'].append('SOURCE_ENGINE=' + info['def']) - - if sdk in ['swarm','csgo']: - if AMBuild.target['platform'] == 'windows': - compiler['CDEFINES'].extend(['COMPILER_MSVC', 'COMPILER_MSVC32']) - else: - compiler['CDEFINES'].extend(['COMPILER_GCC', 'POSIX']) - - if sdk == 'ep1': - if AMBuild.target['platform'] == 'linux': - staticLibs = os.path.join(sdkPath, 'linux_sdk') - else: - if AMBuild.target['platform'] == 'linux': - staticLibs = os.path.join(sdkPath, 'lib', 'linux') - elif AMBuild.target['platform'] == 'darwin': - staticLibs = os.path.join(sdkPath, 'lib', 'mac') - - for i in paths: - compiler['CXXINCLUDES'].append(os.path.join(sdkPath, *i)) - - if not noLink: - if AMBuild.target['platform'] == 'linux': - compiler['POSTLINKFLAGS'][0:0] = ['-lm'] - if sdk in ['ep2v', 'css']: - compiler['POSTLINKFLAGS'][0:0] = ['libtier0_srv.so'] - compiler['POSTLINKFLAGS'][0:0] = ['libvstdlib_srv.so'] - elif sdk in ['l4d', 'l4d2', 'csgo']: - compiler['POSTLINKFLAGS'][0:0] = ['libtier0.so'] - compiler['POSTLINKFLAGS'][0:0] = ['libvstdlib.so'] - else: - compiler['POSTLINKFLAGS'][0:0] = ['tier0_i486.so'] - compiler['POSTLINKFLAGS'][0:0] = ['vstdlib_i486.so'] - elif AMBuild.target['platform'] == 'darwin': - compiler['POSTLINKFLAGS'][0:0] = ['libtier0.dylib'] - compiler['POSTLINKFLAGS'][0:0] = ['libvstdlib.dylib'] - - return compiler - sm = SM() globals = { 'SM': sm diff --git a/buildbot/PackageScript b/buildbot/PackageScript index 0293a6a..4c51bef 100644 --- a/buildbot/PackageScript +++ b/buildbot/PackageScript @@ -98,7 +98,7 @@ def AddHL2Library(name, dest): debug_info = [] -AddHL2Library('accelerator', 'extensions') +AddNormalLibrary('accelerator.ext', 'extensions') job.AddCommandGroup(bincopies) diff --git a/extension/AMBuilder b/extension/AMBuilder index 35f2255..eb11647 100644 --- a/extension/AMBuilder +++ b/extension/AMBuilder @@ -4,23 +4,24 @@ import ambuild.osutil as osutil from ambuild.command import SymlinkCommand from ambuild.command import ShellCommand -def BuildBreakpad(): - breakpad = AMBuild.AddJob('google-breakpad') +def BuildEverything(): if AMBuild.target['platform'] not in ['linux']: return + + BuildBreakpad() + BuildExtension(); + +def BuildBreakpad(): + breakpad = AMBuild.AddJob('google-breakpad') + if osutil.FileExists(os.path.join(AMBuild.outputFolder, 'google-breakpad', 'src', 'client', 'linux', 'libbreakpad_client.a')): return + breakpad.AddCommand(ShellCommand('CXXFLAGS=-m32 CFLAGS=-m32 CPPFLAGS=-m32 ' + os.path.join(AMBuild.sourceFolder, 'google-breakpad', 'configure'))) breakpad.AddCommand(ShellCommand('make src/client/linux/libbreakpad_client.a')) -BuildBreakpad() - -for i in SM.sdkInfo: - sdk = SM.sdkInfo[i] - if AMBuild.target['platform'] not in sdk['platform']: - continue - - compiler = SM.DefaultHL2Compiler('extension', i) +def BuildExtension(): + compiler = SM.DefaultCompiler() compiler['CXXINCLUDES'].append(os.path.join(AMBuild.sourceFolder, 'extension')) compiler['CXXINCLUDES'].append(os.path.join(AMBuild.sourceFolder, 'extension', 'sdk')) @@ -31,16 +32,18 @@ for i in SM.sdkInfo: compiler['CXXINCLUDES'].append(os.path.join(AMBuild.sourceFolder, 'google-breakpad', 'src')) - name = 'accelerator.ext.' + sdk['ext'] + compiler['POSTLINKFLAGS'].append('-lstdc++') + compiler['POSTLINKFLAGS'].append('-pthread') + + name = 'accelerator.ext' extension = AMBuild.AddJob(name) binary = Cpp.LibraryBuilder(name, AMBuild, extension, compiler) - SM.PreSetupHL2Job(extension, binary, i) + binary.AddSourceFiles('extension', [ 'extension.cpp', 'MemoryDownloader.cpp', 'sdk/smsdk_ext.cpp' - ]) - SM.PostSetupHL2Job(extension, binary, i) + ]) link = os.path.join(AMBuild.outputFolder, extension.workFolder, 'libbreakpad_client.a') target = os.path.join(AMBuild.outputFolder, 'google-breakpad', 'src', 'client', 'linux', 'libbreakpad_client.a') @@ -48,10 +51,11 @@ for i in SM.sdkInfo: os.lstat(link) except: extension.AddCommand(SymlinkCommand(link, target)) - - binary.AddObjectFiles(['libbreakpad_client.a']) + binary.AddObjectFiles(['libbreakpad_client.a']) SM.AutoVersion('extension', binary) SM.ExtractDebugInfo(extension, binary) + binary.SendToJob() +BuildEverything() diff --git a/extension/extension.cpp b/extension/extension.cpp index d765b1f..1298f38 100644 --- a/extension/extension.cpp +++ b/extension/extension.cpp @@ -34,8 +34,6 @@ SMEXT_LINK(&g_accelerator); IWebternet *webternet; static IThreadHandle *uploadThread; -ConVar acceleratorVersion("accelerator_version", SMEXT_CONF_VERSION, FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY, SMEXT_CONF_DESCRIPTION " Version"); - char buffer[255]; google_breakpad::ExceptionHandler *handler = NULL; @@ -101,10 +99,10 @@ void UploadCrashDump(const char *path) if (!xfer->PostAndDownload("http://crash.limetech.org/submit", form, &data, NULL)) { - META_CONPRINTF(">>> UPLOAD FAILED\n"); + printf(">>> UPLOAD FAILED\n"); } else { - META_CONPRINTF(">>> UPLOADED CRASH DUMP"); - META_CONPRINTF("%s", data.GetBuffer()); + printf(">>> UPLOADED CRASH DUMP"); + printf("%s", data.GetBuffer()); } } @@ -120,7 +118,7 @@ void Accelerator::OnCoreMapStart(edict_t *pEdictList, int edictCount, int client if (dump->d_type == DT_DIR) continue; - META_CONPRINTF(">>> UPLOADING %s\n", dump->d_name); + printf(">>> UPLOADING %s\n", dump->d_name); g_pSM->Format(path, sizeof(path), "%s/%s", buffer, dump->d_name); @@ -150,29 +148,8 @@ bool Accelerator::SDK_OnLoad(char *error, size_t maxlength, bool late) return true; } -bool Accelerator::SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool late) -{ - GET_V_IFACE_CURRENT(GetEngineFactory, g_pCVar, ICvar, CVAR_INTERFACE_VERSION); - - ConVar_Register(0, this); - - return true; -} - void Accelerator::SDK_OnUnload() { g_pSM->RemoveGameFrameHook(OnGameFrame); } -bool Accelerator::SDK_OnMetamodUnload(char *error, size_t maxlen) -{ - return true; -} - -bool Accelerator::RegisterConCommandBase(ConCommandBase *pCommand) -{ - META_REGCVAR(pCommand); - - return true; -} - diff --git a/extension/extension.h b/extension/extension.h index 040049f..abd85ff 100644 --- a/extension/extension.h +++ b/extension/extension.h @@ -1,7 +1,7 @@ /** * ============================================================================= - * TF2 Items Extension - * Copyright (C) 2009-2010 AzuiSleet, Asher Baker (asherkin). All rights reserved. + * Accelerator Extension + * Copyright (C) 2009-2010 Asher Baker (asherkin). All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under @@ -32,7 +32,7 @@ * @brief Sample implementation of the SDK Extension. * Note: Uncomment one of the pre-defined virtual functions in order to use it. */ -class Accelerator : public SDKExtension, public IConCommandBaseAccessor +class Accelerator : public SDKExtension { public: /** @@ -73,7 +73,7 @@ public: * @param late Whether or not Metamod considers this a late load. * @return True to succeed, false to fail. */ - virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool late); + //virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool late); /** * @brief Called when Metamod is detaching, after the extension version is called. @@ -83,7 +83,7 @@ public: * @param maxlength Maximum size of error buffer. * @return True to succeed, false to fail. */ - virtual bool SDK_OnMetamodUnload(char *error, size_t maxlen); + //virtual bool SDK_OnMetamodUnload(char *error, size_t maxlen); /** * @brief Called when Metamod's pause state is changing. @@ -97,8 +97,6 @@ public: //virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlen); #endif virtual void OnCoreMapStart(edict_t *pEdictList, int edictCount, int clientMax); -public: //IConCommandBaseAccessor - bool RegisterConCommandBase(ConCommandBase *pCommand); }; #endif // _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_ diff --git a/extension/sdk/smsdk_config.hpp b/extension/sdk/smsdk_config.hpp index f1a9886..8cf0e45 100644 --- a/extension/sdk/smsdk_config.hpp +++ b/extension/sdk/smsdk_config.hpp @@ -1,6 +1,6 @@ /** * ============================================================================= - * connect Extension + * Accelerator Extension * Copyright (C) 2011 Asher Baker (asherkin). All rights reserved. * ============================================================================= * @@ -55,7 +55,7 @@ * @brief Sets whether or not this plugin required Metamod. * NOTE: Uncomment to enable, comment to disable. */ -#define SMEXT_CONF_METAMOD +//#define SMEXT_CONF_METAMOD /** Enable interfaces you want to use here by uncommenting lines */ //#define SMEXT_ENABLE_FORWARDSYS @@ -67,7 +67,7 @@ //#define SMEXT_ENABLE_GAMEHELPERS //#define SMEXT_ENABLE_TIMERSYS #define SMEXT_ENABLE_THREADER -//#define SMEXT_ENABLE_LIBSYS +#define SMEXT_ENABLE_LIBSYS //#define SMEXT_ENABLE_MENUS //#define SMEXT_ENABLE_ADTFACTORY //#define SMEXT_ENABLE_PLUGINSYS