From fd9a281f17c6571556950972fe385a8ae369e942 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sat, 22 Aug 2020 16:17:05 -0700 Subject: [PATCH] build: AMBuild 2.2 uplift (#32) --- AMBuildScript | 32 ++++++++++++++++++++------------ Extension/AMBuilder | 8 ++++---- configure.py | 39 ++++++++++++++++++++++----------------- 3 files changed, 46 insertions(+), 33 deletions(-) diff --git a/AMBuildScript b/AMBuildScript index c5ca6a7..0bac844 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -50,6 +50,12 @@ class SteamWorksConfig(object): self.steamworks_root = None self.extensions = [] + # Note: only one architecture supported per build right now. + if builder.options.target: + builder.cxx = builder.DetectCxx(target_arch = builder.options.target) + else: + builder.cxx = builder.DetectCxx() + @property def tag(self): if builder.options.debug == '1': @@ -63,7 +69,7 @@ class SteamWorksConfig(object): for sdk_name in PossibleSDKs: sdk = PossibleSDKs[sdk_name] - if builder.target_platform in sdk.platform: + if builder.cxx.target.platform in sdk.platform: if builder.options.hl2sdk_root: sdk_path = os.path.join(builder.options.hl2sdk_root, sdk.folder) else: @@ -124,8 +130,10 @@ class SteamWorksConfig(object): def configure(self): builder.AddConfigureFile('pushbuild.txt') - cxx = builder.DetectCompilers() + # Only one compiler to configure. + self.configure_cxx(builder.cxx) + def configure_cxx(self, cxx): if cxx.like('gcc'): cxx.defines += [ 'stricmp=strcasecmp', @@ -165,7 +173,7 @@ class SteamWorksConfig(object): cxx.cflags += ['-Wno-unused-result'] if have_clang: cxx.cxxflags += ['-Wno-implicit-exception-spec-mismatch'] - if (builder.target_platform == 'mac' and cxx.version >= '5.1') or cxx.version >= '3.4': + if (cxx.target.platform == 'mac' and cxx.version >= '5.1') or cxx.version >= '3.4': cxx.cxxflags += ['-Wno-deprecated-register'] else: cxx.cxxflags += ['-Wno-deprecated'] @@ -241,13 +249,13 @@ class SteamWorksConfig(object): cxx.cflags += ['/Oy-'] # Platform-specifics - if builder.target_platform == 'linux': + if cxx.target.platform == 'linux': cxx.defines += ['_LINUX', 'POSIX'] if cxx.vendor == 'gcc': cxx.linkflags += ['-static-libgcc'] elif cxx.vendor == 'clang': cxx.linkflags += ['-lgcc_eh'] - elif builder.target_platform == 'mac': + elif cxx.target.platform == 'mac': cxx.defines += ['OSX', '_OSX', 'POSIX'] cxx.cflags += ['-mmacosx-version-min=10.5'] cxx.linkflags += [ @@ -257,7 +265,7 @@ class SteamWorksConfig(object): '-stdlib=libc++' ] cxx.cxxflags += ['-stdlib=libstdc++'] - elif builder.target_platform == 'windows': + elif cxx.target.platform == 'windows': cxx.defines += ['WIN32', '_WINDOWS'] def ConfigureForExtension(self, context, compiler): @@ -299,12 +307,12 @@ class SteamWorksConfig(object): return self.ConfigureForHL2(binary, sdk) def HL2Project(self, context, name): - project = context.compiler.LibraryProject(name) - self.ConfigureForExtension(context, project.compiler) + project = context.LibraryProject(name) + self.ConfigureForExtension(context, context.cxx) return project - def HL2Config(self, project, name, sdk): - binary = project.Configure(name, '{0} - {1}'.format(self.tag, sdk.name)) + def HL2Config(self, project, cxx, name, sdk): + binary = project.Configure(cxx, name, '{0} - {1}'.format(self.tag, sdk.name)) return self.ConfigureForHL2(binary, sdk) SteamWorks = SteamWorksConfig() @@ -313,5 +321,5 @@ SteamWorks.configure() BuildScripts = ['Extension/AMBuilder'] -builder.RunBuildScripts(BuildScripts, { 'SteamWorks': SteamWorks }) -builder.RunScript('buildbot/PackageScript', { 'SteamWorks': SteamWorks }) +builder.Build(BuildScripts, { 'SteamWorks': SteamWorks }) +builder.Build('buildbot/PackageScript', { 'SteamWorks': SteamWorks }) diff --git a/Extension/AMBuilder b/Extension/AMBuilder index ffd0a52..64d57e0 100644 --- a/Extension/AMBuilder +++ b/Extension/AMBuilder @@ -23,18 +23,18 @@ project.sources += [ for sdk_name in SteamWorks.sdks: sdk = SteamWorks.sdks[sdk_name] - binary = SteamWorks.HL2Config(project, 'SteamWorks.ext', sdk) + binary = SteamWorks.HL2Config(project, builder.cxx, 'SteamWorks.ext', sdk) binary.compiler.defines += ['META_NO_HL2SDK', 'SOURCEMOD_BUILD', 'VERSION_SAFE_STEAM_API_INTERFACES'] binary.compiler.cxxincludes += [os.path.join(SteamWorks.steamworks_root, 'public', 'steam'), os.path.join(sdk.path, 'public', 'steam')]; - if builder.target_platform == 'linux': + if binary.compiler.target.platform == 'linux': binary.compiler.postlink += os.path.join(SteamWorks.steamworks_root, 'redistributable_bin', 'linux32', 'libsteam_api.so'),; - if builder.target_platform == 'windows': + if binary.compiler.target.platform == 'windows': binary.compiler.postlink += os.path.join(SteamWorks.steamworks_root, 'redistributable_bin', 'steam_api.lib'),; - if builder.target_platform == 'mac': + if binary.compiler.target.platform == 'mac': binary.compiler.postlink += os.path.join(SteamWorks.steamworks_root, 'redistributable_bin', 'osx', 'libsteam_api.dylib'),; SteamWorks.extensions += builder.Add(project) diff --git a/configure.py b/configure.py index 0efa8e6..d27f552 100644 --- a/configure.py +++ b/configure.py @@ -12,22 +12,27 @@ except: sys.stderr.write('http://www.alliedmods.net/ambuild\n') sys.exit(1) -run = run.PrepareBuild(sourcePath=sys.path[0]) -run.default_build_folder = 'obj-' + run.target_platform -run.options.add_option('--hl2sdk-root', type=str, dest='hl2sdk_root', default=None, - help='Root search folder for HL2SDKs') -run.options.add_option('--mms-path', type=str, dest='mms_path', default=None, - help='Path to Metamod:Source') -run.options.add_option('--sm-path', type=str, dest='sm_path', default=None, - help='Path to Sourcemod') -run.options.add_option('--steamworks-path', type=str, dest='steamworks_path', default=None, - help='Path to SteamWorks') -run.options.add_option('--enable-debug', action='store_const', const='1', dest='debug', - help='Enable debugging symbols') -run.options.add_option('--enable-optimize', action='store_const', const='1', dest='opt', - help='Enable optimization') -run.options.add_option('-s', '--sdks', default='all', dest='sdks', - help='Build against specified SDKs; valid args are "all", "present", or ' - 'comma-delimited list of engine names (default: %default)') +# Hack to show a decent upgrade message, which wasn't done until 2.2. +ambuild_version = getattr(run, 'CURRENT_API', '2.1') +if ambuild_version.startswith('2.1'): + sys.stderr.write("AMBuild 2.2 or higher is required; please update\n") + sys.exit(1) +run = run.BuildParser(sourcePath=sys.path[0], api='2.2') +run.options.add_argument('--hl2sdk-root', type=str, dest='hl2sdk_root', default=None, + help='Root search folder for HL2SDKs') +run.options.add_argument('--mms-path', type=str, dest='mms_path', default=None, + help='Path to Metamod:Source') +run.options.add_argument('--sm-path', type=str, dest='sm_path', default=None, + help='Path to Sourcemod') +run.options.add_argument('--steamworks-path', type=str, dest='steamworks_path', default=None, + help='Path to SteamWorks') +run.options.add_argument('--enable-debug', action='store_const', const='1', dest='debug', + help='Enable debugging symbols') +run.options.add_argument('--enable-optimize', action='store_const', const='1', dest='opt', + help='Enable optimization') +run.options.add_argument('-s', '--sdks', default='all', dest='sdks', + help='Build against specified SDKs; valid args are "all", "present", or ' + 'comma-delimited list of engine names') +run.options.add_argument('--target', default=None, help='Override the default build target') run.Configure()