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

import("//build/config/clang/clang.gni")

# Extracts the list of imported symbols from a prebuilt library.
#
# Parameters
#
#   library
#     Location of the prebuilt library.
#
#   symbols
#     Location of the output symbol list. It should fall within the output
#     directory for the build.

template("extract_imported_symbols") {
  assert(defined(invoker.library), "library must be provided")
  assert(defined(invoker.symbols), "symbols must be provided")

  action(target_name) {
    script = "//build/cpp/extract_imported_symbols.sh"

    # TODO(http://fxbug.dev/68780): Remove suppression when fixed.
    # This is causing crashes on some Mac builders, possibly because the size
    # of the symbol list is overflowing the fsatrace buffer. We suppress on
    # all platforms because the problem could spread beyond Macs as the
    # symbol lists grow.
    hermetic_deps = false
    all_outputs_fresh = false

    forward_variables_from(invoker, [ "deps" ])

    inputs = [
      invoker.library,
      rebase_path("$clang_prefix/llvm-nm", ".", root_build_dir),
    ]

    outputs = [ invoker.symbols ]

    args = [
      "$clang_prefix/llvm-nm",
      rebase_path(invoker.library),
      rebase_path(invoker.symbols),
    ]
  }
}
