#!/usr/bin/env python
# Copyright 2019 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Extracts an LLD partition from an ELF file."""

import argparse
import subprocess
import sys


def main():
  parser = argparse.ArgumentParser(description=__doc__)
  parser.add_argument(
      '--partition',
      help='Name of partition if not the main partition',
      metavar='PART')
  parser.add_argument(
      '--objcopy',
      required=True,
      help='Path to llvm-objcopy binary',
      metavar='FILE')
  parser.add_argument(
      '--unstripped-output',
      required=True,
      help='Unstripped output file',
      metavar='FILE')
  parser.add_argument(
      '--stripped-output',
      required=True,
      help='Stripped output file',
      metavar='FILE')
  parser.add_argument('--dwp', help='Path to dwp binary', metavar='FILE')
  parser.add_argument('input', help='Input file')
  args = parser.parse_args()

  objcopy_args = [args.objcopy]
  if args.partition:
    objcopy_args += ['--extract-partition', args.partition]
  else:
    objcopy_args += ['--extract-main-partition']
  objcopy_args += [args.input, args.unstripped_output]
  subprocess.check_call(objcopy_args)

  objcopy_args = [
      args.objcopy, '--strip-all', args.unstripped_output, args.stripped_output
  ]
  subprocess.check_call(objcopy_args)

  if args.dwp:
    dwp_args = [
        args.dwp, '-e', args.unstripped_output, '-o',
        args.unstripped_output + '.dwp'
    ]
    # Suppress output here because it doesn't seem to be useful. The most
    # common error is a segfault, which will happen if files are missing.
    subprocess.check_output(dwp_args, stderr=subprocess.STDOUT)


if __name__ == '__main__':
  sys.exit(main())
