# 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

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

    if (is_linux) {
      # The breakpad dumpsyms prebuilt is only available for
      # and exercised on Linux at this time.
      inputs = [ breakpad_dump_syms_prebuilt ]
    }

    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)
        },
      ]
    }
  }
}
