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

# Adds an ELF binary to the .build-id directory by hard-linking.
#
# Parameters
#
#   debug
#     Type: file
#     Required: This file will be linked into the .build-id directory
#     with the ".debug" extension
#
#   stripped
#     Type: file
#     Optional: If set this file will be linked into the .build-id directory
#     with no extension
template("build_id_entry") {
  action(target_name) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "testonly",
                             "visibility",
                             "data_deps",
                           ])
    assert(defined(invoker.debug), "Must define debug")
    sources = [
      invoker.debug,
    ]
    stamp = "${invoker.debug}.build-id.stamp"
    outputs = [
      stamp,
    ]

    script = "//prebuilt/tools/buildidtool/${host_platform}/buildidtool"
    args = [
      "-entry",
      ".debug=" + rebase_path(invoker.debug, root_build_dir),
      "-build-id-dir",
      ".build-id",
      "-stamp",
      rebase_path(stamp, root_build_dir),
    ]
    if (defined(invoker.stripped)) {
      sources += [ invoker.stripped ]
      args += [
        "-entry",
        "=" + rebase_path(invoker.stripped, root_build_dir),
      ]
    }
  }
}
