| # 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, "*") |
| } |
| } |