blob: db121c372267255ee150896aa1f1e819eaef77a9 [file] [log] [blame]
# Copyright 2022 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/fidl/fidl_summary.gni")
import("//build/fidl/fidlc.gni")
import("//build/testing/config.gni")
template("fidl_api_compatibility_test") {
assert(defined(invoker.fidl_target_name), "fidl_target_name is required")
assert(defined(invoker.target_api_level), "target_api_level is required")
assert(defined(invoker.golden_summary_json),
"golden_summary_json is required")
policy = "no_breaking_changes"
if (defined(invoker.policy)) {
policy = invoker.policy
}
# Let command-line build args override values from target declarations.
if (bless_goldens) {
policy = "update_golden"
}
target_api_level = invoker.target_api_level
fidlc_target_name = "${target_name}_fidlc"
json_representation = "$target_gen_dir/$target_name.fidl.json"
# Recompile the library at the target API level.
fidlc(fidlc_target_name) {
forward_variables_from(invoker,
[
"deps",
"fidl_deps",
"fidl_target_name",
"library_name",
"public_deps",
"sources",
"testonly",
])
target_api_platform = "fuchsia"
target_api_level = "$target_api_level"
# Avoid clobbering the generated FIDL sources from HEAD.
gen_dir = "$target_gen_dir/$target_api_level"
json_representation = json_representation
}
# Generate a new JSON summary to diff against the golden one.
summary_file_json = "$target_gen_dir/$target_name.api_summary.json"
summarization_target_name = "${target_name}_summary_json"
fidl_summary_json(summarization_target_name) {
forward_variables_from(invoker, [ "testonly" ])
visibility = [ ":*" ]
inputs = [ json_representation ]
outputs = [ summary_file_json ]
dest = "fidl"
deps = [ ":$fidlc_target_name" ]
}
# Run the test.
action(target_name) {
forward_variables_from(invoker, "*", [ "policy" ])
script = "//sdk/cts/build/scripts/fidl_api_compatibility_test.py"
stamp_file = "$target_gen_dir/$target_name.verified"
current_summary = summary_file_json
golden_summary = golden_summary_json
inputs = [
current_summary,
golden_summary,
"//sdk/cts/build/scripts/plasa_differ.py",
]
outputs = [ stamp_file ]
args = [
"--api-level",
"$target_api_level",
"--golden",
rebase_path(golden_summary, root_build_dir),
"--current",
rebase_path(current_summary, root_build_dir),
"--stamp",
rebase_path(stamp_file, root_build_dir),
"--fidl_api_diff_path",
rebase_path("$root_build_dir/host_x64/fidl_api_diff", root_build_dir),
"--policy",
policy,
]
deps += [
":$summarization_target_name",
"//tools/fidl/fidl_api_diff:host",
]
}
}