# 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")
import("//build/sdk/config.gni")

# Verifies the list of public symbols from a prebuilt library to be added to
# the SDK against a golden file.
# Additionally, checks that none of the symbols is a C++ symbol.
#
# Parameters
#
#   current
#     Location of generated symbols file from the extract_public_symbols action.
#
#   reference
#     Location of checked in reference symbol file.
#
#   library_name
#     A human-readable library name for debugging purposes.

template("verify_public_symbols") {
  assert(defined(invoker.current), "current must be provided")
  assert(defined(invoker.reference), "reference must be provided")
  assert(defined(invoker.library_name), "library_name must be provided")

  stamp_file = "$target_gen_dir/$target_name.public_symbols.verified.stamp"

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

    forward_variables_from(invoker, [ "deps" ])

    inputs = [
      invoker.current,
      invoker.reference,
      "$clang_prefix/llvm-cxxfilt",
    ]

    outputs = [ stamp_file ]

    args = [
      "$rebased_clang_prefix/llvm-cxxfilt",
      invoker.library_name,
      rebase_path(invoker.current, root_build_dir),
      rebase_path(invoker.reference, root_build_dir),
      rebase_path(stamp_file, root_build_dir),
    ]

    if (warn_on_sdk_changes) {
      args += [ "--warn" ]
    }
  }
}
