blob: d37448f56667b6486d3f4925910a367f91130c01 [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/compiled_action.gni")
import("//build/fidl/toolchain.gni")
# Declares a GIDL library.
#
# This target generates binding specific tests or benchmarks from GIDL inputs.
#
# Parameters
#
# type (required)
# String indicating the type of generation. Currently "conformance" or "benchmark".
#
# language (required)
# String indicating the binding name.
#
# inputs (required)
# List of input GIDL files
#
# fidl (required)
# Name of the FIDL GN target that defines types used in the GIDL files.
#
# output (required)
# Path of the output file to generate (in the case of 1 output). In the case of multiple
# outputs, this is the name of an output file used to generate all output file names.
# e.g. a.cc, a2.cc, a3.cc...
#
# visibility
# Standard GN meaning.
template("gidl") {
assert(defined(invoker.language))
# Output filename used to generate the output paths in the gidl tool.
assert(defined(invoker.output))
assert(defined(invoker.type))
assert(defined(invoker.fidl))
assert(defined(invoker.inputs))
extra_args = []
if (defined(invoker.extra_args)) {
extra_args += invoker.extra_args
}
# All output targets.
output_args = []
if (defined(invoker.output)) {
output_args += [
"-out",
rebase_path(invoker.output),
]
}
fidl_target =
get_label_info(invoker.fidl, "label_no_toolchain") + "($fidl_toolchain)"
json_file = get_label_info(fidl_target, "target_gen_dir") + "/" +
get_label_info(fidl_target, "name") + ".fidl.json"
compiled_action(target_name) {
testonly = true
tool = "//tools/fidl/gidl:gidl"
args = output_args + [
"--type",
invoker.type,
"--language",
invoker.language,
"--json",
rebase_path(json_file),
] + extra_args + rebase_path(invoker.inputs)
inputs = invoker.inputs
outputs = [ invoker.output ]
deps = [ fidl_target ]
forward_variables_from(invoker, [ "visibility" ])
}
}
template("_gidl_cc_source_set") {
assert(defined(invoker.type))
assert(defined(invoker.fidl))
assert(defined(invoker.inputs))
assert(defined(invoker.language))
assert(!defined(invoker.sources))
fidl_bindings = get_label_info(invoker.fidl, "dir") + ":" +
get_label_info(invoker.fidl, "name")
if (defined(invoker.bindings_suffix)) {
fidl_bindings = fidl_bindings + invoker.bindings_suffix
}
output_filename = "${target_gen_dir}/gidl_generated_${target_name}.cc"
gidl_target = "${target_name}_gidl"
gidl(gidl_target) {
type = invoker.type
language = invoker.language
output = output_filename
fidl = invoker.fidl
inputs = invoker.inputs
forward_variables_from(invoker,
[
"extra_args",
"visibility",
])
}
source_set(target_name) {
testonly = true
sources = [ output_filename ]
deps = [ ":${gidl_target}" ]
public_deps = [ fidl_bindings ]
if (defined(invoker.deps)) {
deps += invoker.deps
}
forward_variables_from(invoker,
"*",
[
"fidl",
"deps",
])
}
}
template("gidl_hlcpp_conformance") {
_gidl_cc_source_set(target_name) {
type = "conformance"
language = "hlcpp"
bindings_suffix = "_cpp_natural_types"
forward_variables_from(invoker, "*")
}
}
template("gidl_llcpp_conformance") {
_gidl_cc_source_set(target_name) {
type = "conformance"
language = "llcpp"
bindings_suffix = "_llcpp"
forward_variables_from(invoker, "*")
}
}
template("gidl_c_conformance") {
_gidl_cc_source_set(target_name) {
type = "conformance"
language = "c"
bindings_suffix = "_llcpp"
forward_variables_from(invoker, "*")
}
}
template("gidl_hlcpp_benchmarks") {
_gidl_cc_source_set(target_name) {
type = "benchmark"
language = "hlcpp"
forward_variables_from(invoker, "*")
}
}
template("gidl_llcpp_benchmarks") {
_gidl_cc_source_set(target_name) {
type = "benchmark"
language = "llcpp"
bindings_suffix = "_llcpp"
forward_variables_from(invoker, "*")
}
}
template("gidl_walker_benchmarks") {
_gidl_cc_source_set(target_name) {
type = "benchmark"
language = "walker"
bindings_suffix = "_llcpp"
forward_variables_from(invoker, "*")
}
}
template("gidl_reference_benchmarks") {
_gidl_cc_source_set(target_name) {
type = "benchmark"
language = "reference"
bindings_suffix = "_llcpp"
forward_variables_from(invoker, "*")
}
}