# Copyright 2020 The Fuchsia 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/compiled_action.gni")
import("//build/toolchain/breakpad.gni")

# Generate a manifest of prebuilt binaries provided in .build-id format.
#
# Parameters
#
#   build_id_dir (required)
#     Path to the .build-id directory to consume.
template("prebuilt_binaries") {
  assert(defined(invoker.build_id_dir), "build_id_dir is required")

  binary_manifest = "$target_gen_dir/${target_name}_binaries.json"

  compiled_action(target_name) {
    testonly = true
    hermetic_deps = false

    tool = "//tools/debug/generate_breakpad"
    outputs = [ binary_manifest ]

    depfile = "$target_gen_dir/$target_name.d"

    args = [
      "-build-id-dir-in",
      rebase_path(invoker.build_id_dir),
      "-build-id-dir-out",
      rebase_path("$root_build_dir/.build-id", root_build_dir),
      "-cpu",
      target_cpu,
      "-os",
      target_os,
      "-output-manifest",
      rebase_path(binary_manifest, root_build_dir),
      "-dump-syms",
      breakpad_dump_syms,
      "-depfile",
      rebase_path(depfile, root_build_dir),
    ]

    metadata = {
      prebuilt_binaries = [
        {
          name = target_name
          manifest = rebase_path(binary_manifest, root_build_dir)
        },
      ]
    }
  }
}
