blob: 7f2b24b5be12d1ee4ff928fcf343ae8963e27236 [file] [log] [blame]
# 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")
import("//build/testing/golden_files.gni")
import("//build/toolchain/zircon/gcc.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
# - Required: Location of ifs file generated by a shared_library() target.
# - Type: path
#
# * reference
# - Required: Location of checked in reference ifs file.
# - Type: path
#
# * library_name
# - Required: A human-readable library name for debugging purposes.
# - Type: string
#
# * ifs_args
# - Optional: list of args to pass to llvm-ifs.
# - Type: list of string
#
# * testonly, visibility
# - Optional: As for action().
#
# When adding a new library to be tracked by `verify_public_symbols`, you can
# create an empty file, traditionally this would be named ${library_name}.ifs,
# run the build, it will fail, and give a cp command to run.
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")
abi_file = "$target_gen_dir/$target_name.abi.ifs"
main_target = target_name
action("$target_name.abi.ifs") {
visibility = [ ":$main_target" ]
forward_variables_from(invoker, [ "testonly" ])
script = "$clang_prefix/llvm-ifs"
forward_variables_from(invoker, [ "deps" ])
inputs = [ invoker.current ]
outputs = [ abi_file ]
args = [
"--strip-undefined",
"--strip-ifs-target",
"--strip-needed",
"--strip-size",
rebase_path(invoker.current, root_build_dir),
"--output-ifs",
rebase_path(abi_file, root_build_dir),
]
if (defined(invoker.ifs_args)) {
args += invoker.ifs_args
}
args += ifs_extra_switches
}
golden_files(main_target) {
forward_variables_from(invoker,
[
"visibility",
"testonly",
])
deps = [ ":$target_name.abi.ifs" ]
comparisons = [
{
candidate = abi_file
golden = invoker.reference
},
]
message = "ABI has changed! In library ${invoker.library_name}"
}
}