From db14d2d00a3d30479f77204c8fc8a597f8e980e6 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sat, 31 May 2014 17:57:53 -0700 Subject: [PATCH 1/4] Factor out versioning. --- AMBuildScript | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/AMBuildScript b/AMBuildScript index f3aa06d9..e0d7be8f 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -275,8 +275,7 @@ class SMConfig(object): cxx.includes += [os.path.join(builder.buildPath, 'includes')] cxx.includes += [os.path.join(builder.sourcePath, 'versionlib')] - def LibraryBuilder(self, compiler, name): - binary = compiler.Library(name) + def AddVersioning(self, binary): if builder.target_platform == 'windows': binary.sources += ['version.rc'] binary.compiler.rcdefines += [ @@ -285,30 +284,23 @@ class SMConfig(object): ] if self.use_auto_versioning(): binary.compiler.rcdefines += ['SM_GENERATED_BUILD'] - elif builder.target_platform == 'mac': - binary.compiler.postlink += [ - '-compatibility_version', '1.0.0', - '-current_version', self.productVersion - ] if self.use_auto_versioning(): binary.compiler.linkflags += [self.versionlib] binary.compiler.sourcedeps += SM.generated_headers return binary + def LibraryBuilder(self, compiler, name): + binary = compiler.Library(name) + if builder.target_platform == 'mac': + binary.compiler.postlink += [ + '-compatibility_version', '1.0.0', + '-current_version', self.productVersion + ] + return self.AddVersioning(self, binary) + def ProgramBuilder(self, compiler, name): binary = compiler.Program(name) - if builder.target_platform == 'windows': - binary.sources += ['version.rc'] - binary.compiler.rcdefines += [ - 'BINARY_NAME="{0}"'.format(binary.outputFile), - 'RC_COMPILE', - ] - if self.use_auto_versioning(): - binary.compiler.rcdefines += ['SM_GENERATED_BUILD'] - if self.use_auto_versioning(): - binary.compiler.linkflags += [self.versionlib] - binary.compiler.sourcedeps += SM.generated_headers - return binary + return self.AddVersioning(binary) def Library(self, context, name): compiler = context.compiler.clone() From 9f8f8795900cc1742c81e47efa96e757741e45f5 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sat, 31 May 2014 18:12:49 -0700 Subject: [PATCH 2/4] Fix typo. --- AMBuildScript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AMBuildScript b/AMBuildScript index e0d7be8f..4c6b9903 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -296,7 +296,7 @@ class SMConfig(object): '-compatibility_version', '1.0.0', '-current_version', self.productVersion ] - return self.AddVersioning(self, binary) + return self.AddVersioning(binary) def ProgramBuilder(self, compiler, name): binary = compiler.Program(name) From abdf7d5b0760ed96b82de31bbd4bd4877a1fd6ae Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sat, 31 May 2014 19:56:42 -0700 Subject: [PATCH 3/4] Port build scripts to the new project API. --- AMBuildScript | 78 +++++++++++++++++------------- core/AMBuilder | 89 ++++++++++++++++++----------------- extensions/cstrike/AMBuilder | 29 +++++++----- extensions/sdkhooks/AMBuilder | 20 ++++---- extensions/sdktools/AMBuilder | 56 +++++++++++----------- 5 files changed, 145 insertions(+), 127 deletions(-) diff --git a/AMBuildScript b/AMBuildScript index 4c6b9903..252b0884 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -75,6 +75,13 @@ class SMConfig(object): def use_auto_versioning(self): return builder.backend == 'amb2' + def tag(self, name): + if builder.options.debug == '1': + tag = 'Debug' + else: + tag = 'Release' + return '{0} - {1}'.format(tag, name) + def detectProductVersion(self): builder.AddConfigureFile('product.version') @@ -284,34 +291,26 @@ class SMConfig(object): ] if self.use_auto_versioning(): binary.compiler.rcdefines += ['SM_GENERATED_BUILD'] + elif builder.target_platform == 'mac': + if binary.type == 'library': + binary.compiler.postlink += [ + '-compatibility_version', '1.0.0', + '-current_version', self.productVersion + ] if self.use_auto_versioning(): binary.compiler.linkflags += [self.versionlib] binary.compiler.sourcedeps += SM.generated_headers return binary - def LibraryBuilder(self, compiler, name): - binary = compiler.Library(name) - if builder.target_platform == 'mac': - binary.compiler.postlink += [ - '-compatibility_version', '1.0.0', - '-current_version', self.productVersion - ] - return self.AddVersioning(binary) - - def ProgramBuilder(self, compiler, name): - binary = compiler.Program(name) - return self.AddVersioning(binary) - def Library(self, context, name): - compiler = context.compiler.clone() - return self.LibraryBuilder(compiler, name) + binary = context.compiler.Library(name) + return self.AddVersioning(binary) def Program(self, context, name): - compiler = context.compiler.clone() - return self.ProgramBuilder(compiler, name) + binary = context.compiler.Program(name) + return self.AddVersioning(binary) - def ExtCompiler(self, context): - compiler = context.compiler.clone() + def ConfigureForExtension(self, context, compiler): compiler.cxxincludes += [ os.path.join(context.currentSourcePath), os.path.join(context.currentSourcePath, 'sdk'), @@ -322,8 +321,13 @@ class SMConfig(object): ] return compiler - def HL2Compiler(self, context, sdk): - compiler = self.ExtCompiler(context) + def ExtLibrary(self, context, name): + binary = context.compiler.Library(name) + self.ConfigureForExtension(context, binary.compiler) + return self.AddVersioning(binary) + + def ConfigureForHL2(self, binary, sdk): + compiler = binary.compiler if sdk.name == 'episode1': mms_path = os.path.join(self.mms_root, 'core-legacy') @@ -337,6 +341,7 @@ class SMConfig(object): defines = ['SE_' + PossibleSDKs[i].define + '=' + PossibleSDKs[i].code for i in PossibleSDKs] compiler.defines += defines + paths = [ ['public'], ['public', 'engine'], @@ -380,15 +385,6 @@ class SMConfig(object): for path in paths: compiler.cxxincludes += [os.path.join(sdk.path, *path)] - return compiler - - def ExtLibrary(self, context, name): - compiler = self.ExtCompiler(context) - return self.LibraryBuilder(compiler, name) - - def HL2Library(self, context, name, sdk): - compiler = self.HL2Compiler(context, sdk) - if builder.target_platform == 'linux': if sdk.name == 'episode1': lib_folder = os.path.join(sdk.path, 'linux_sdk') @@ -417,7 +413,7 @@ class SMConfig(object): if sdk.name in ['blade', 'insurgency', 'csgo', 'dota']: compiler.postlink += [compiler.Dep(os.path.join(lib_folder, 'interfaces_i486.a'))] - binary = self.LibraryBuilder(compiler, name) + self.AddVersioning(binary) dynamic_libs = [] if builder.target_platform == 'linux': @@ -429,7 +425,7 @@ class SMConfig(object): else: dynamic_libs = ['tier0_i486.so', 'vstdlib_i486.so'] elif builder.target_platform == 'mac': - binary.compiler.linkflags.append('-liconv') + compiler.linkflags.append('-liconv') dynamic_libs = ['libtier0.dylib', 'libvstdlib.dylib'] elif builder.target_platform == 'windows': libs = ['tier0', 'tier1', 'vstdlib', 'mathlib'] @@ -437,7 +433,7 @@ class SMConfig(object): libs.append('interfaces') for lib in libs: lib_path = os.path.join(sdk.path, 'lib', 'public', lib) + '.lib' - binary.compiler.linkflags.append(binary.Dep(lib_path)) + compiler.linkflags.append(compiler.Dep(lib_path)) for library in dynamic_libs: source_path = os.path.join(lib_folder, library) @@ -450,10 +446,24 @@ class SMConfig(object): return link linker = make_linker(source_path, output_path) - binary.compiler.linkflags[0:0] = [binary.Dep(library, linker)] + compiler.linkflags[0:0] = [compiler.Dep(library, linker)] return binary + 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, sdk.name) + return self.ConfigureForHL2(binary, sdk) + SM = SMConfig() SM.detectProductVersion() SM.detectSDKs() diff --git a/core/AMBuilder b/core/AMBuilder index 0eed7182..08a96d88 100644 --- a/core/AMBuilder +++ b/core/AMBuilder @@ -1,11 +1,54 @@ # vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: import os +project = SM.HL2Project(builder, 'sourcemod') +project.sources += [ + 'MenuStyle_Valve.cpp', + 'logic_bridge.cpp', + 'smn_entities.cpp', + 'sm_stringutil.cpp', + 'MenuVoting.cpp', + 'smn_events.cpp', + 'smn_menus.cpp', + 'CDataPack.cpp', + 'frame_hooks.cpp', + 'smn_nextmap.cpp', + 'sourcemm_api.cpp', + 'ChatTriggers.cpp', + 'smn_player.cpp', + 'sourcemod.cpp', + 'concmd_cleaner.cpp', + 'HalfLife2.cpp', + 'NextMap.cpp', + 'ConCmdManager.cpp', + 'ConVarManager.cpp', + 'LibrarySys.cpp', + 'PlayerManager.cpp', + 'TimerSys.cpp', + 'CoreConfig.cpp', + 'Logger.cpp', + 'smn_halflife.cpp', + 'smn_console.cpp', + 'UserMessages.cpp', + 'MenuManager.cpp', + 'smn_core.cpp', + 'smn_hudtext.cpp', + 'smn_usermsgs.cpp', + 'MenuStyle_Base.cpp', + 'smn_keyvalues.cpp', + 'smn_vector.cpp', + 'EventManager.cpp', + 'MenuStyle_Radio.cpp', + 'sm_autonatives.cpp', + 'sm_srvcmds.cpp', + 'ConsoleDetours.cpp' +] + for sdk_name in SM.sdks: sdk = SM.sdks[sdk_name] binary_name = 'sourcemod.' + sdk.ext - binary = SM.HL2Library(builder, binary_name, sdk) + binary = SM.HL2Config(project, binary_name, sdk) compiler = binary.compiler if sdk.name == 'csgo': @@ -50,48 +93,6 @@ for sdk_name in SM.sdks: else: lib_path = os.path.join(sdk.path, 'lib', 'win32', 'release', 'vs' + vs_year, 'libprotobuf.lib') compiler.linkflags.insert(0, binary.Dep(lib_path)) - - binary.sources += [ - 'MenuStyle_Valve.cpp', - 'logic_bridge.cpp', - 'smn_entities.cpp', - 'sm_stringutil.cpp', - 'MenuVoting.cpp', - 'smn_events.cpp', - 'smn_menus.cpp', - 'CDataPack.cpp', - 'frame_hooks.cpp', - 'smn_nextmap.cpp', - 'sourcemm_api.cpp', - 'ChatTriggers.cpp', - 'smn_player.cpp', - 'sourcemod.cpp', - 'concmd_cleaner.cpp', - 'HalfLife2.cpp', - 'NextMap.cpp', - 'ConCmdManager.cpp', - 'ConVarManager.cpp', - 'LibrarySys.cpp', - 'PlayerManager.cpp', - 'TimerSys.cpp', - 'CoreConfig.cpp', - 'Logger.cpp', - 'smn_halflife.cpp', - 'smn_console.cpp', - 'UserMessages.cpp', - 'MenuManager.cpp', - 'smn_core.cpp', - 'smn_hudtext.cpp', - 'smn_usermsgs.cpp', - 'MenuStyle_Base.cpp', - 'smn_keyvalues.cpp', - 'smn_vector.cpp', - 'EventManager.cpp', - 'MenuStyle_Radio.cpp', - 'sm_autonatives.cpp', - 'sm_srvcmds.cpp', - 'ConsoleDetours.cpp' - ] if sdk.name in ['csgo', 'dota']: binary.sources += ['smn_protobuf.cpp'] @@ -115,5 +116,5 @@ for sdk_name in SM.sdks: os.path.join(sdk.path, 'public', 'game', 'shared', 'dota', 'protobuf', 'dota_usermessage_helpers.cpp'), ] - SM.binaries += [builder.Add(binary)] +SM.binaries += builder.Add(project) diff --git a/extensions/cstrike/AMBuilder b/extensions/cstrike/AMBuilder index 3ae695d4..8c6fbda3 100644 --- a/extensions/cstrike/AMBuilder +++ b/extensions/cstrike/AMBuilder @@ -1,21 +1,24 @@ # vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: import os +project = SM.HL2Project(builder, 'game.cstrike.ext') +project.sources += [ + 'extension.cpp', + 'natives.cpp', + 'RegNatives.cpp', + 'timeleft.cpp', + 'forwards.cpp', + 'util_cstrike.cpp', + '../../public/smsdk_ext.cpp', + '../../public/CDetour/detours.cpp', + '../../public/asm/asm.c' +] + for sdk_name in ['css', 'csgo']: if sdk_name not in SM.sdks: continue sdk = SM.sdks[sdk_name] - binary = SM.HL2Library(builder, 'game.cstrike.ext.' + sdk.ext, sdk) - binary.sources += [ - 'extension.cpp', - 'natives.cpp', - 'RegNatives.cpp', - 'timeleft.cpp', - 'forwards.cpp', - 'util_cstrike.cpp', - '../../public/smsdk_ext.cpp', - '../../public/CDetour/detours.cpp', - '../../public/asm/asm.c' - ] - SM.extensions += [builder.Add(binary)] + SM.HL2Config(project, 'game.cstrike.ext.' + sdk.ext, sdk) + +SM.extensions += builder.Add(project) diff --git a/extensions/sdkhooks/AMBuilder b/extensions/sdkhooks/AMBuilder index 7faca983..e0166b32 100644 --- a/extensions/sdkhooks/AMBuilder +++ b/extensions/sdkhooks/AMBuilder @@ -1,21 +1,23 @@ # vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: import os +project = SM.HL2Project(builder, 'sdkhooks.ext') +project.sources += [ + 'extension.cpp', + 'natives.cpp', + 'takedamageinfohack.cpp', + 'util.cpp', + '../../public/smsdk_ext.cpp' +] + for sdk_name in SM.sdks: sdk = SM.sdks[sdk_name] - binary = SM.HL2Library(builder, 'sdkhooks.ext.' + sdk.ext, sdk) + binary = SM.HL2Config(project, 'sdkhooks.ext.' + sdk.ext, sdk) binary.compiler.cxxincludes += [ os.path.join(sdk.path, 'game', 'shared') ] if binary.compiler.cxx.behavior == 'gcc': binary.compiler.cxxflags += ['-Wno-invalid-offsetof'] - binary.sources += [ - 'extension.cpp', - 'natives.cpp', - 'takedamageinfohack.cpp', - 'util.cpp', - '../../public/smsdk_ext.cpp' - ] - SM.extensions += [builder.Add(binary)] +SM.extensions += builder.Add(project) diff --git a/extensions/sdktools/AMBuilder b/extensions/sdktools/AMBuilder index c81a8fdf..bdd86151 100644 --- a/extensions/sdktools/AMBuilder +++ b/extensions/sdktools/AMBuilder @@ -1,10 +1,37 @@ # vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: import os +project = SM.HL2Project(builder, 'sdktools.ext') +project.sources += [ + 'extension.cpp', + 'inputnatives.cpp', + 'output.cpp', + 'outputnatives.cpp', + 'tempents.cpp', + 'tenatives.cpp', + 'teamnatives.cpp', + 'trnatives.cpp', + 'vcaller.cpp', + 'vcallbuilder.cpp', + 'vdecoder.cpp', + 'vglobals.cpp', + 'vhelpers.cpp', + 'vnatives.cpp', + 'voice.cpp', + 'vsound.cpp', + 'clientnatives.cpp', + 'hooks.cpp', + 'gamerulesnatives.cpp', + 'vstringtable.cpp', + '../../public/smsdk_ext.cpp', + '../../public/CDetour/detours.cpp', + '../../public/asm/asm.c' +] + for sdk_name in SM.sdks: sdk = SM.sdks[sdk_name] - binary = SM.HL2Library(builder, 'sdktools.ext.' + sdk.ext, sdk) + binary = SM.HL2Config(project, 'sdktools.ext.' + sdk.ext, sdk) binary.compiler.cxxincludes += [ os.path.join(sdk.path, 'game', 'shared'), os.path.join(builder.sourcePath, 'public', 'jit'), @@ -17,29 +44,4 @@ for sdk_name in SM.sdks: if binary.compiler.cxx.behavior == 'gcc': binary.compiler.cxxflags += ['-Wno-invalid-offsetof'] - binary.sources += [ - 'extension.cpp', - 'inputnatives.cpp', - 'output.cpp', - 'outputnatives.cpp', - 'tempents.cpp', - 'tenatives.cpp', - 'teamnatives.cpp', - 'trnatives.cpp', - 'vcaller.cpp', - 'vcallbuilder.cpp', - 'vdecoder.cpp', - 'vglobals.cpp', - 'vhelpers.cpp', - 'vnatives.cpp', - 'voice.cpp', - 'vsound.cpp', - 'clientnatives.cpp', - 'hooks.cpp', - 'gamerulesnatives.cpp', - 'vstringtable.cpp', - '../../public/smsdk_ext.cpp', - '../../public/CDetour/detours.cpp', - '../../public/asm/asm.c' - ] - SM.extensions += [builder.Add(binary)] +SM.extensions += builder.Add(project) From 897aa421359dc4db22076f9b0a585bd8a8d84ae8 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sat, 31 May 2014 19:59:02 -0700 Subject: [PATCH 4/4] Remove tag(). --- AMBuildScript | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/AMBuildScript b/AMBuildScript index 252b0884..ba87423f 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -75,12 +75,11 @@ class SMConfig(object): def use_auto_versioning(self): return builder.backend == 'amb2' - def tag(self, name): + @property + def tag(self): if builder.options.debug == '1': - tag = 'Debug' - else: - tag = 'Release' - return '{0} - {1}'.format(tag, name) + return 'Debug' + return 'Release' def detectProductVersion(self): builder.AddConfigureFile('product.version') @@ -461,7 +460,7 @@ class SMConfig(object): return project def HL2Config(self, project, name, sdk): - binary = project.Configure(name, sdk.name) + binary = project.Configure(name, '{0} - {1}'.format(self.tag, sdk.name)) return self.ConfigureForHL2(binary, sdk) SM = SMConfig()