diff --git a/AMBuildScript b/AMBuildScript index 5a046020..662447bc 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -1,8 +1,28 @@ # vim: set ts=2 sw=2 tw=99 noet ft=python: import os import sys +from ambuild.command import Command +from ambuild.command import ShellCommand from ambuild.command import SymlinkCommand +class ExtractDebugInfoCommand(Command): + def __init__(self, binary, outfile): + Command.__init__(self) + self.binary = binary + self.outfile = outfile + + def run(self, runner, job): + if not self.binary.NeedsRelink(self.outfile): + return + + if AMBuild.target['platform'] == 'linux': + job.AddCommand(ShellCommand('objcopy --only-keep-debug ' + self.outfile + ' ' + self.outfile + '.dbg')) + job.AddCommand(ShellCommand('objcopy --strip-debug ' + self.outfile)) + job.AddCommand(ShellCommand('objcopy --add-gnu-debuglink=' + os.path.basename(self.outfile) + '.dbg ' + self.outfile)) + elif AMBuild.target['platform'] == 'darwin': + job.AddCommand(ShellCommand('dsymutil ' + self.outfile)) + job.AddCommand(ShellCommand('strip -S ' + self.outfile)) + class SM: def __init__(self): self.compiler = Cpp.Compiler() @@ -117,6 +137,7 @@ class SM: self.compiler.AddToListVar('CFLAGS', '-Wno-unused') self.compiler.AddToListVar('CFLAGS', '-Wno-switch') self.compiler.AddToListVar('CFLAGS', '-msse') + self.compiler.AddToListVar('CFLAGS', '-g3') self.compiler.AddToListVar('CFLAGS', '-m32') self.compiler.AddToListVar('POSTLINKFLAGS', '-m32') self.compiler.AddToListVar('CXXFLAGS', '-fno-exceptions') @@ -176,9 +197,7 @@ class SM: if AMBuild.options.debug == '1': self.compiler.AddToListVar('CDEFINES', 'DEBUG') self.compiler.AddToListVar('CDEFINES', '_DEBUG') - if self.vendor == 'gcc' or self.vendor == 'clang': - self.compiler.AddToListVar('CFLAGS', '-g3') - elif self.vendor == 'msvc': + if self.vendor == 'msvc': self.compiler.AddToListVar('CFLAGS', '/Od') self.compiler.AddToListVar('CFLAGS', '/RTC1') @@ -265,6 +284,10 @@ class SM: else: return + def ExtractDebugInfo(self, job, binary): + 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']] diff --git a/core/AMBuilder b/core/AMBuilder index 54d8a838..a3740e12 100644 --- a/core/AMBuilder +++ b/core/AMBuilder @@ -120,5 +120,6 @@ for i in SM.sdkInfo: binary.AddObjectFiles(['libprotobuf.a']) SM.AutoVersion('core', binary) + SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/core/logic/AMBuilder b/core/logic/AMBuilder index e3817c2f..c8278db6 100644 --- a/core/logic/AMBuilder +++ b/core/logic/AMBuilder @@ -58,5 +58,6 @@ else: files.append('thread/PosixThreads.cpp') binary.AddSourceFiles('core/logic', files) SM.AutoVersion('core/logic', binary) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/bintools/AMBuilder b/extensions/bintools/AMBuilder index 2b48dbac..82942e18 100644 --- a/extensions/bintools/AMBuilder +++ b/extensions/bintools/AMBuilder @@ -19,6 +19,7 @@ binary.AddSourceFiles('extensions/bintools', [ 'sdk/smsdk_ext.cpp' ]) SM.AutoVersion('extensions/bintools', binary) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/clientprefs/AMBuilder b/extensions/clientprefs/AMBuilder index 09d26f0d..58f7f585 100644 --- a/extensions/clientprefs/AMBuilder +++ b/extensions/clientprefs/AMBuilder @@ -15,5 +15,6 @@ binary.AddSourceFiles('extensions/clientprefs', [ 'sdk/smsdk_ext.cpp' ]) SM.AutoVersion('extensions/clientprefs', binary) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/cstrike/AMBuilder b/extensions/cstrike/AMBuilder index 3488eb20..65358b60 100644 --- a/extensions/cstrike/AMBuilder +++ b/extensions/cstrike/AMBuilder @@ -29,4 +29,5 @@ for i in SM.sdkInfo: ]) SM.PostSetupHL2Job(extension, binary, i) SM.AutoVersion('extensions/cstrike', binary) + SM.ExtractDebugInfo(extension, binary) binary.SendToJob() \ No newline at end of file diff --git a/extensions/curl/AMBuilder b/extensions/curl/AMBuilder index 06a6fe6a..941d53a1 100644 --- a/extensions/curl/AMBuilder +++ b/extensions/curl/AMBuilder @@ -82,5 +82,6 @@ elif AMBuild.target['platform'] == 'windows': binary['POSTLINKFLAGS'].extend([path, 'ws2_32.lib']) SM.AutoVersion('extensions/curl', binary) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/geoip/AMBuilder b/extensions/geoip/AMBuilder index e9df90d8..d94df53f 100644 --- a/extensions/geoip/AMBuilder +++ b/extensions/geoip/AMBuilder @@ -11,5 +11,6 @@ binary.AddSourceFiles('extensions/geoip', [ if AMBuild.target['platform'] == 'windows': binary['POSTLINKFLAGS'].append('wsock32.lib') SM.AutoVersion('extensions/geoip', binary) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/mysql/AMBuilder b/extensions/mysql/AMBuilder index 7342bf59..a623cba2 100644 --- a/extensions/mysql/AMBuilder +++ b/extensions/mysql/AMBuilder @@ -34,5 +34,6 @@ binary.AddSourceFiles('extensions/mysql', [ 'extension.cpp' ]) SM.AutoVersion('extensions/mysql', binary) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/regex/AMBuilder b/extensions/regex/AMBuilder index 76b37573..fda4c1db 100644 --- a/extensions/regex/AMBuilder +++ b/extensions/regex/AMBuilder @@ -23,5 +23,6 @@ binary.AddSourceFiles('extensions/regex', [ 'sdk/smsdk_ext.cpp', ]) SM.AutoVersion('extensions/regex', binary) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/sdkhooks/AMBuilder b/extensions/sdkhooks/AMBuilder index 89e3ff7c..6eb695a6 100644 --- a/extensions/sdkhooks/AMBuilder +++ b/extensions/sdkhooks/AMBuilder @@ -26,5 +26,6 @@ for i in SM.sdkInfo: ]) SM.PostSetupHL2Job(extension, binary, i) SM.AutoVersion('extensions/sdkhooks', binary) + SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/sdktools/AMBuilder b/extensions/sdktools/AMBuilder index cf83b474..abcb6a02 100644 --- a/extensions/sdktools/AMBuilder +++ b/extensions/sdktools/AMBuilder @@ -48,5 +48,6 @@ for i in SM.sdkInfo: ]) SM.PostSetupHL2Job(extension, binary, i) SM.AutoVersion('extensions/sdktools', binary) + SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/sqlite/AMBuilder b/extensions/sqlite/AMBuilder index 9bb7b978..01b34af2 100644 --- a/extensions/sqlite/AMBuilder +++ b/extensions/sqlite/AMBuilder @@ -17,5 +17,6 @@ files = [ ] binary.AddSourceFiles('extensions/sqlite', files) SM.AutoVersion('extensions/sqlite', binary) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/tf2/AMBuilder b/extensions/tf2/AMBuilder index 3a637f7e..8a67cbef 100644 --- a/extensions/tf2/AMBuilder +++ b/extensions/tf2/AMBuilder @@ -26,5 +26,6 @@ if 'ep2v' in SM.sdkInfo: ]) SM.PostSetupHL2Job(extension, binary, 'ep2v') SM.AutoVersion('extensions/tf2', binary) + SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/topmenus/AMBuilder b/extensions/topmenus/AMBuilder index ce393598..9a7fd54b 100644 --- a/extensions/topmenus/AMBuilder +++ b/extensions/topmenus/AMBuilder @@ -15,5 +15,6 @@ binary.AddSourceFiles('extensions/topmenus', [ 'sdk/sm_memtable.cpp' ]) SM.AutoVersion('extensions/topmenus', binary) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/extensions/updater/AMBuilder b/extensions/updater/AMBuilder index 3e1f9711..c563edf7 100644 --- a/extensions/updater/AMBuilder +++ b/extensions/updater/AMBuilder @@ -14,5 +14,6 @@ binary.AddSourceFiles('extensions/updater', [ 'sdk/smsdk_ext.cpp' ]) SM.AutoVersion('extensions/updater', binary) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/loader/AMBuilder b/loader/AMBuilder index 0f0991b0..f77d0347 100644 --- a/loader/AMBuilder +++ b/loader/AMBuilder @@ -17,5 +17,6 @@ binary.AddSourceFiles('loader', [ 'loader.cpp' ]) SM.AutoVersion('loader', binary) +SM.ExtractDebugInfo(loader, binary) binary.SendToJob() diff --git a/sourcepawn/compiler/AMBuilder b/sourcepawn/compiler/AMBuilder index 7dbb6f2b..e8f9fe25 100644 --- a/sourcepawn/compiler/AMBuilder +++ b/sourcepawn/compiler/AMBuilder @@ -67,5 +67,6 @@ elif AMBuild.target['platform'] == 'darwin' and isinstance(binary, Cpp.LibraryBu binary.compiler['POSTLINKFLAGS'].extend(['-compatibility_version', '1.0.0']) binary.compiler['POSTLINKFLAGS'].extend(['-current_version', AMBuild.cache['version']]) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/sourcepawn/jit/AMBuilder b/sourcepawn/jit/AMBuilder index 4ad25b1e..4655302a 100644 --- a/sourcepawn/jit/AMBuilder +++ b/sourcepawn/jit/AMBuilder @@ -40,5 +40,6 @@ binary.AddSourceFiles('sourcepawn/jit', [ '../../knight/shared/KeCodeAllocator.cpp' ]) SM.AutoVersion('sourcepawn/jit', binary) +SM.ExtractDebugInfo(extension, binary) binary.SendToJob() diff --git a/tools/buildbot/PackageScript b/tools/buildbot/PackageScript index 9f037483..3315845d 100644 --- a/tools/buildbot/PackageScript +++ b/tools/buildbot/PackageScript @@ -255,6 +255,14 @@ AddHL2Library('sdktools.ext', 'extensions') bincopies.append(CopyFile(os.path.join('..', 'spcomp', 'spcomp' + osutil.ExecutableSuffix()), os.path.join('addons', 'sourcemod', 'scripting'))) +# Each platform's version of dump_syms needs the path in a different format. +if AMBuild.target['platform'] == 'linux': + debug_info.append('spcomp' + '/' + 'spcomp') +elif AMBuild.target['platform'] == 'darwin': + debug_info.append('spcomp' + '/' + 'spcomp' + '.dSYM') +elif AMBuild.target['platform'] == 'windows': + debug_info.append('spcomp' + '\\' + 'spcomp' + '.pdb' + job.AddCommandGroup(bincopies) if AMBuild.target['platform'] == 'windows':