# Copyright 2018 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 using dump_app_syms.py.
#
# Args:
#   binary: Path to the binary containing symbols to extract, e.g.:
#       "$root_out_dir/chrome"
#   symbol_file: Desired output file for symbols, e.g.:
#       "$root_out_dir/chrome.breakpad.$current_cpu"
template("extract_symbols") {
  forward_variables_from(invoker,
                         [
                           "deps",
                           "testonly",
                         ])
  action("${target_name}") {
    dump_syms_label = "//third_party/breakpad:dump_syms($host_toolchain)"
    dump_syms_binary =
        get_label_info(dump_syms_label, "root_out_dir") + "/" + "dump_syms"

    script = "//build/linux/dump_app_syms.py"
    inputs = [
      invoker.binary,
      dump_syms_binary,
    ]
    outputs = [ invoker.symbol_file ]
    args = [
      "./" + rebase_path(dump_syms_binary, root_build_dir),
      "0",  # strip_binary = false
      rebase_path(invoker.binary, root_build_dir),
      rebase_path(invoker.symbol_file, root_build_dir),
    ]

    deps += [ dump_syms_label ]
  }
}
