# Copyright 2021 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.

import("//build/toolchain/toolchain.gni")

# Extracts symbols from a binary into a symbol file.
#
# Args:
#   binary_input: Path to the binary containing symbols to extract, e.g.:
#       "$root_out_dir/chrome"
#   symbol_output: Desired output file for symbols, e.g.:
#       "$root_out_dir/chrome.debug"
#   stripped_binary_output: Desired output file for stripped file, e.g.:
#       "$root_out_dir/chrome.stripped"
template("strip_binary") {
  forward_variables_from(invoker,
                         [
                           "deps",
                           "testonly",
                         ])
  action("${target_name}") {
    eu_strip_binary = "//buildtools/third_party/eu-strip/bin/eu-strip"
    script = "//build/linux/strip_binary.py"
    inputs = [
      invoker.binary_input,
      eu_strip_binary,
    ]
    outputs = [
      invoker.symbol_output,
      invoker.stripped_binary_output,
    ]
    args = [
      "--eu-strip-binary-path",
      rebase_path(eu_strip_binary, root_build_dir),
      "--symbol-output",
      rebase_path(invoker.symbol_output, root_build_dir),
      "--stripped-binary-output",
      rebase_path(invoker.stripped_binary_output, root_build_dir),
      "--binary-input",
      rebase_path(invoker.binary_input, root_build_dir),
    ]
  }
}
