blob: d33a2aad57c9c9b3d50d9b3680edaba0230f40c6 [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/compiled_action.gni")
# Generates the FIDL API summary files based on the FIDL IR generated
# by fidlc.
_fidl_api_summarize_tool = "//tools/fidl/fidl_api_summarize"
# Generates a human-readable FIDL API summary.
#
# For details on the FIDL API summary format, see RFC-0076 at:
# https://fuchsia.dev/fuchsia-src/contribute/governance/rfcs/0076_fidl_api_summaries
#
# Args:
#
# inputs: list(label)
# A singleton list naming the FIDL IR file to read.
#
# outputs: list(label)
# A singleton list naming the output API summary file to generate.
#
# testonly: bool(optional)
#
# deps: list[label]
#
# visiblility: list[label]
template("fidl_summary") {
compiled_action("${target_name}") {
forward_variables_from(invoker,
[
"testonly",
"deps",
"inputs",
"outputs",
"visibility",
])
assert(defined(inputs), "inputs is required")
assert(inputs != [] && inputs == [ inputs[0] ],
"inputs must have exactly one element")
assert(defined(outputs), "outputs is required")
assert(outputs != [] && outputs == [ outputs[0] ],
"outputs must have exactly one element")
tool = _fidl_api_summarize_tool
args = [
"--fidl-ir-file",
rebase_path(inputs[0], root_build_dir),
"--output-file",
rebase_path(outputs[0], root_build_dir),
]
}
}
# Generates a machine-readable, JSON-formatted, FIDL API summary.
#
# For details on the FIDL API summary format, see RFC-0076 at:
# https://fuchsia.dev/fuchsia-src/contribute/governance/rfcs/0076_fidl_api_summaries
#
# Generates metadata as follows:
#
# metadata = {
# plasa = [
# kind = ... # "api_fidl" if unset, or invoker.kind if set.
# file = ... # The label of the generated output file.
# path = ... # The filesystem path of the generated summary file
# dest = ... # Placement of the generated output file in the manifest.
# ]
# }
#
# Args:
#
# inputs: list(label)
# A singleton list naming the FIDL IR file to read.
#
# outputs: list(label)
# A singleton naming the output API summary file to generate.
#
# dest: "fidl"|"vdso"
# The destination packaging directory for the code.
#
# testonly: bool(optional)
# deps: list(label)
# visiblility: list(label)
template("fidl_summary_json") {
compiled_action("${target_name}") {
forward_variables_from(invoker,
[
"testonly",
"deps",
"dest",
"inputs",
"outputs",
"visibility",
])
assert(defined(dest), "dest is required")
assert(dest == "fidl" || dest == "vdso",
"dest must be either 'fidl' or 'vdso'")
assert(defined(inputs), "inputs is required")
assert(inputs != [] && inputs == [ inputs[0] ],
"inputs must have exactly one element")
_json_representation = inputs[0]
assert(defined(outputs), "outputs is required")
assert(defined(outputs) && outputs != [] && outputs == [ outputs[0] ],
"outputs must have exactly one element")
_summary_file_json = outputs[0]
tool = _fidl_api_summarize_tool
args = [
"--format",
"json",
"--fidl-ir-file",
rebase_path(_json_representation, root_build_dir),
"--output-file",
rebase_path(_summary_file_json, root_build_dir),
"--suppress-empty-library",
]
metadata = {
# Refer to //sdk/cts/plasa/plasa_artifacts.gni for the explanation of
# this metadata item.
plasa = [
{
kind = "api_${dest}"
file = _summary_file_json
path = rebase_path(_summary_file_json, root_build_dir)
dest = "${dest}/" + rebase_path(_summary_file_json, target_gen_dir)
},
]
if (defined(invoker.metadata)) {
forward_variables_from(invoker.metadata, "*")
}
}
}
}