123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #!/usr/bin/env python
- from __future__ import print_function
- import argparse
- import os
- import sys
- from lib.config import LINUX_BINARIES, PLATFORM
- from lib.util import execute, get_objcopy_path, get_out_dir, safe_mkdir
- # It has to be done before stripping the binaries.
- def copy_debug_from_binaries(directory, out_dir, target_cpu, compress):
- for binary in LINUX_BINARIES:
- binary_path = os.path.join(directory, binary)
- if os.path.isfile(binary_path):
- copy_debug_from_binary(binary_path, out_dir, target_cpu, compress)
- def copy_debug_from_binary(binary_path, out_dir, target_cpu, compress):
- try:
- objcopy = get_objcopy_path(target_cpu)
- except:
- if PLATFORM == 'linux' and (target_cpu == 'x86' or target_cpu == 'arm' or
- target_cpu == 'arm64'):
- # Skip because no objcopy binary on the given target.
- return
- raise
- debug_name = get_debug_name(binary_path)
- cmd = [objcopy, '--only-keep-debug']
- if compress:
- cmd.extend(['--compress-debug-sections'])
- cmd.extend([binary_path, os.path.join(out_dir, debug_name)])
- execute(cmd)
- return debug_name
- def get_debug_name(binary_path):
- return os.path.basename(binary_path) + '.debug'
- def main():
- args = parse_args()
- safe_mkdir(args.out_dir)
- if args.file:
- copy_debug_from_binary(args.file, args.out_dir, args.target_cpu,
- args.compress)
- else:
- copy_debug_from_binaries(args.directory, args.out_dir, args.target_cpu,
- args.compress)
- def parse_args():
- parser = argparse.ArgumentParser(description='Copy debug from binaries')
- parser.add_argument('-d', '--directory',
- help='Path to the dir that contains files to copy',
- default=get_out_dir(),
- required=False)
- parser.add_argument('-f', '--file',
- help='Path to a specific file to copy debug symbols',
- required=False)
- parser.add_argument('-o', '--out-dir',
- help='Path to the dir that will contain the debugs',
- default=None,
- required=True)
- parser.add_argument('-v', '--verbose',
- action='store_true',
- help='Prints the output of the subprocesses')
- parser.add_argument('--target-cpu',
- default='',
- required=False,
- help='Target cpu of binaries to copy debug symbols')
- parser.add_argument('--compress',
- action='store_true',
- required=False,
- help='Compress the debug symbols')
- return parser.parse_args()
- if __name__ == '__main__':
- sys.exit(main())
|