From 42dafd47fd0744b62bdad97d126697a044f0cb8e Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 8 Apr 2015 22:12:47 +0800 Subject: [PATCH] Separate symbols generation from building --- atom.gyp | 101 ----------------------- script/create-dist.py | 19 +---- script/dump-symbols.py | 62 ++++++++++++++ tools/posix/generate_breakpad_symbols.py | 2 +- 4 files changed, 66 insertions(+), 118 deletions(-) create mode 100755 script/dump-symbols.py diff --git a/atom.gyp b/atom.gyp index 029b813181..6a81a9b2f5 100644 --- a/atom.gyp +++ b/atom.gyp @@ -348,107 +348,6 @@ } ], }, # target atom_coffee2c - { - 'target_name': '<(project_name)_dump_symbols', - 'type': 'none', - 'dependencies': [ - '<(project_name)', - ], - 'conditions': [ - ['OS=="mac"', { - 'dependencies': [ - 'vendor/breakpad/breakpad.gyp:dump_syms', - ], - 'actions': [ - { - 'action_name': 'Dump Symbols', - 'inputs': [ - '<(PRODUCT_DIR)/<(product_name).app/Contents/MacOS/<(product_name)', - ], - 'outputs': [ - '<(PRODUCT_DIR)/Atom-Shell.breakpad.syms', - ], - 'action': [ - 'python', - 'tools/posix/generate_breakpad_symbols.py', - '--build-dir=<(PRODUCT_DIR)', - '--binary=<(PRODUCT_DIR)/<(product_name).app/Contents/MacOS/<(product_name)', - '--symbols-dir=<(PRODUCT_DIR)/Atom-Shell.breakpad.syms', - '--libchromiumcontent-dir=<(libchromiumcontent_dir)', - '--clear', - '--jobs=16', - ], - }, - ], - }], # OS=="mac" - ['OS=="win"', { - 'actions': [ - { - 'action_name': 'Dump Symbols', - 'inputs': [ - '<(PRODUCT_DIR)/<(project_name).exe', - ], - 'outputs': [ - '<(PRODUCT_DIR)/Atom-Shell.breakpad.syms', - ], - 'action': [ - 'python', - 'tools/win/generate_breakpad_symbols.py', - '--symbols-dir=<(PRODUCT_DIR)/Atom-Shell.breakpad.syms', - '--jobs=16', - '<(PRODUCT_DIR)', - '<(libchromiumcontent_dir)', - ], - }, - ], - }], # OS=="win" - ['OS=="linux"', { - 'dependencies': [ - 'vendor/breakpad/breakpad.gyp:dump_syms', - ], - 'actions': [ - { - 'action_name': 'Dump Symbols', - 'inputs': [ - '<(PRODUCT_DIR)/<(project_name)', - ], - 'outputs': [ - '<(PRODUCT_DIR)/Atom-Shell.breakpad.syms', - ], - 'action': [ - 'python', - 'tools/posix/generate_breakpad_symbols.py', - '--build-dir=<(PRODUCT_DIR)', - '--binary=<(PRODUCT_DIR)/<(project_name)', - '--symbols-dir=<(PRODUCT_DIR)/Atom-Shell.breakpad.syms', - '--libchromiumcontent-dir=<(libchromiumcontent_dir)', - '--clear', - '--jobs=16', - ], - }, - { - 'action_name': 'Strip Binary', - 'inputs': [ - '<(PRODUCT_DIR)/libffmpegsumo.so', - '<(PRODUCT_DIR)/<(project_name)', - # Add the syms folder as input would force this action to run - # after the 'Dump Symbols' action. And since it is a folder, - # it would be ignored by the 'strip' command. - '<(PRODUCT_DIR)/Atom-Shell.breakpad.syms', - ], - 'outputs': [ - # Gyp action requires a output file, add a fake one here. - '<(PRODUCT_DIR)/dummy_file', - ], - 'action': [ - 'tools/posix/strip.sh', - '<@(_inputs)', - ], - }, - ], - }], # OS=="linux" - ], - }, # target <(project_name>_dump_symbols ], 'conditions': [ ['OS=="mac"', { diff --git a/script/create-dist.py b/script/create-dist.py index a66795f426..59e4a28a3a 100755 --- a/script/create-dist.py +++ b/script/create-dist.py @@ -21,12 +21,6 @@ OUT_DIR = os.path.join(SOURCE_ROOT, 'out', 'R') CHROMIUM_DIR = os.path.join(SOURCE_ROOT, 'vendor', 'brightray', 'vendor', 'download', 'libchromiumcontent', 'static_library') -SYMBOL_NAME = { - 'darwin': 'libchromiumcontent.dylib.dSYM', - 'linux': 'libchromiumcontent.so.dbg', - 'win32': 'chromiumcontent.dll.pdb', -}[TARGET_PLATFORM] - TARGET_BINARIES = { 'darwin': [ ], @@ -157,16 +151,9 @@ def create_version(): def create_symbols(): - directory = 'Atom-Shell.breakpad.syms' - rm_rf(os.path.join(OUT_DIR, directory)) - - build = os.path.join(SOURCE_ROOT, 'script', 'build.py') - subprocess.check_output([sys.executable, build, '-c', 'Release', - '-t', 'atom_dump_symbols']) - - shutil.copytree(os.path.join(OUT_DIR, directory), - os.path.join(DIST_DIR, directory), - symlinks=True) + destination = os.path.join(DIST_DIR, 'Atom-Shell.breakpad.syms') + dump_symbols = os.path.join(SOURCE_ROOT, 'script', 'dump-symbols.py') + execute([sys.executable, dump_symbols, destination]) def create_dist_zip(): diff --git a/script/dump-symbols.py b/script/dump-symbols.py new file mode 100755 index 0000000000..e8df27fdd2 --- /dev/null +++ b/script/dump-symbols.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +import os +import sys + +from lib.config import TARGET_PLATFORM +from lib.util import execute, rm_rf + + +SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) +DIST_DIR = os.path.join(SOURCE_ROOT, 'dist') +OUT_DIR = os.path.join(SOURCE_ROOT, 'out', 'R') +CHROMIUM_DIR = os.path.join(SOURCE_ROOT, 'vendor', 'brightray', 'vendor', + 'download', 'libchromiumcontent', 'static_library') + + +def main(destination): + rm_rf(destination) + (project_name, product_name) = get_names_from_gyp() + + if TARGET_PLATFORM in ['darwin', 'linux']: + # Generate the dump_syms tool. + build = os.path.join(SOURCE_ROOT, 'script', 'build.py') + execute([sys.executable, build, '-c', 'R', '-t', 'dump_syms']) + + generate_breakpad_symbols = os.path.join(SOURCE_ROOT, 'tools', 'posix', + 'generate_breakpad_symbols.py') + if TARGET_PLATFORM == 'darwin': + start = os.path.join(OUT_DIR, '{0}.app'.format(product_name), 'Contents', + 'MacOS', product_name) + else: + start = os.path.join(OUT_DIR, project_name) + args = [ + '--build-dir={0}'.format(OUT_DIR), + '--binary={0}'.format(start), + '--symbols-dir={0}'.format(destination), + '--libchromiumcontent-dir={0}'.format(CHROMIUM_DIR), + '--clear', + '--jobs=16', + ] + else: + generate_breakpad_symbols = os.path.join(SOURCE_ROOT, 'tools', 'win', + 'generate_breakpad_symbols.py') + args = [ + '--symbols-dir={0}'.format(destination), + '--jobs=16', + OUT_DIR, + CHROMIUM_DIR, + ] + + execute([sys.executable, generate_breakpad_symbols] + args) + + +def get_names_from_gyp(): + gyp = os.path.join(SOURCE_ROOT, 'atom.gyp') + with open(gyp) as f: + o = eval(f.read()); + return (o['variables']['project_name%'], o['variables']['product_name%']) + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1])) diff --git a/tools/posix/generate_breakpad_symbols.py b/tools/posix/generate_breakpad_symbols.py index 6b6c751586..88cae88fe8 100755 --- a/tools/posix/generate_breakpad_symbols.py +++ b/tools/posix/generate_breakpad_symbols.py @@ -61,7 +61,7 @@ def FindBundlePart(full_path): def GetDSYMBundle(options, binary_path): """Finds the .dSYM bundle to the binary.""" - if binary_path[0] == '/' or binary_path == '': + if not binary_path.endswith(' Framework'): return binary_path filename = FindBundlePart(binary_path)