blob: 389195bf0da8df5b2cb362ce534ed9e543bf5acf [file] [log] [blame] [edit]
# 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")
# LINT.IfChange(fidl_ir)
# Compiles a FIDL library to IR and optionally generates API summaries.
#
# Compilation parameters
#
# fidl_target_name (required)
# [string] The name of the `fidl` target declaration.
#
# fidl_library_name (required)
# [string] The name of the `fidl` library.
#
# gen_dir (required)
# [path] Effectively replaces target_gen_dir. This is used to prevent
# multiple fidl targets from generating the same output files.
#
# json_representation (required)
# [path] Where to generate the FIDL IR.
#
# out_json_summary
# [path] If set, generates a JSON API summary file at the given path.
# Must be relative to `gen_dir`.
#
# target_api_level
# [string] Target Fuchsia API level. Required when out_json_summmary is set.
#
# Other parameters (see //build/fidl/fidl.gni for descriptions):
#
# available (required)
# sources (required)
# experimental_flags
# goldens_dir
# non_fidl_deps
# public_deps
# testonly
# versioned
# visibility
#
template("fidl_ir") {
assert(is_fidl_toolchain,
"This template can only be used in a FIDL toolchain.")
assert(defined(invoker.fidl_target_name), "fidl_target_name is required")
assert(defined(invoker.fidl_library_name), "fidl_library_name is required")
assert(defined(invoker.gen_dir), "gen_dir is required")
assert(defined(invoker.json_representation),
"json_representation is required")
assert(defined(invoker.available), "available is required")
assert(defined(invoker.sources), "sources is required")
assert(!defined(invoker.deps), "Use `public_deps` or `non_fidl_deps`")
main_target_deps = []
fidlc_target_name = "${target_name}_fidlc"
fidlc(fidlc_target_name) {
forward_variables_from(invoker,
"*",
[
"goldens_dir",
"out_json_summary",
"visibility",
"target_api_level",
])
visibility = [ ":*" ]
}
main_target_deps += [ ":$fidlc_target_name" ]
if (defined(invoker.out_json_summary)) {
fidl_summary_json_target_name = "${target_name}_summary_json"
main_target_deps += [ ":$fidl_summary_json_target_name" ]
fidl_summary_json(fidl_summary_json_target_name) {
forward_variables_from(invoker,
[
"applicable_licenses",
"testonly",
])
visibility = [ ":*" ]
inputs = [ invoker.json_representation ]
outputs = [ invoker.out_json_summary ]
deps = [ ":$fidlc_target_name" ]
}
}
group(target_name) {
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
public_deps = main_target_deps
}
}
# LINT.ThenChange(//build/bazel/rules/fidl/fidl_ir.bzl)