# Copyright 2018 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/config/clang/clang.gni")
import("//build/rust/config.gni")

# Run a command that verifies that the ELF binaries listed in a given
# FINI manifest. More specifically, this checks that:
#
#  - ELF binaries are all unstripped.
#  - ELF executables have their dependencies available from the same
#    manifest.
#
# On success, this target simply writes a stamp file. On error, it will
# print an error message explaining the issue.
#
# Arguments:
#   manifest (required)
#     [file path] Path to input manifest to verify.
#
#   check_debug_files (optional)
#     [boolean] Set to true to verify that all binaries have proper debug
#     files.
#
#   deps (required)
#     [list of GN labels] List of dependencies this target depends on.
#     It should at the very least list the target that generates
#     the manifest.
#
template("verify_manifest_elf_binaries") {
  action(target_name) {
    forward_variables_from(invoker,
                           [
                             "testonly",
                             "visibility",
                           ])
    script = "//build/dist/verify_manifest_elf_binaries.py"
    inputs = [ "//build/images/elfinfo.py" ]
    sources = [ invoker.manifest ]
    outputs = [ "$target_gen_dir/${target_name}" ]
    depfile = outputs[0] + ".d"
    args = [
      "--check-stripped",
      "--depfile=" + rebase_path(depfile, root_build_dir),
      "--manifest=" + rebase_path(sources[0], root_build_dir),
      "--stamp=" + rebase_path(outputs[0], root_build_dir),
    ]
    if (defined(invoker.check_debug_files) && invoker.check_debug_files) {
      args += [
        "--check-debug-files",
        "--toolchain-lib-dir=${rebased_clang_prefix}/../lib",
        "--toolchain-lib-dir=${rebased_rustc_prefix}/../lib",
      ]
    }
    deps = invoker.deps
  }
}
