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

assert(is_fuchsia)

# Creates a tarball of unstripped binaries, structured according to the
# ".build_ids" convention used by the symbolizer and GNU GDB.
#
# Parameters:
#   deps: Must all be cr_fuchsia_package() or fuchsia_package() targets.
#   ids_txt: The "ids.txt" file which lists the relative paths to unstripped
#            executables and libraries, along with their build IDs.
#   archive_name: The path to the compressed tarball that will be generated.
template("symbol_archive") {
  assert(!is_debug)

  action(target_name) {
    _ids_txt = invoker.ids_txt
    _build_ids = invoker.archive_name

    script = "//build/config/fuchsia/build_symbol_archive.py"

    inputs = [ _ids_txt ]

    outputs = [ _build_ids ]

    # For each package in |deps| it is necessary to additionally depend upon
    # the corresponding archive-manifest target, which is what creates the
    # ids.txt file.
    deps = []
    foreach(package, invoker.deps) {
      deps += [
        package,
        package + "__archive-manifest",
      ]
    }

    args = [
      rebase_path(_ids_txt),
      "-o",
      rebase_path(_build_ids),
      "--fuchsia-build-id-dir",
      rebase_path("//third_party/fuchsia-sdk/sdk/.build-id"),
    ]
  }
}
