| # 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") |
| |
| # 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. Must be relative to gen_dir. |
| # |
| # target_api_level (required) |
| # [string] Only compile APIs available at this Fuchsia API level. For more |
| # information, look for --available in `fidlc --help`. |
| # |
| # out_json_summary |
| # [path] If set, generates a JSON API summary file at the given path. |
| # Must be relative to gen_dir. |
| # |
| # Other parameters (see //build/fidl/fidl.gni for descriptions): |
| # |
| # sources (required) |
| # available |
| # experimental_flags |
| # goldens_dir |
| # non_fidl_deps |
| # public_deps |
| # testonly |
| # visibility |
| # |
| template("fidl_ir") { |
| assert( |
| current_toolchain == fidl_toolchain, |
| "This template can only be used in the FIDL toolchain $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.sources), "sources is required") |
| |
| 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 = [ ":*" ] |
| if (!defined(available)) { |
| available = [] |
| } |
| available += [ "fuchsia:" + invoker.target_api_level ] |
| } |
| |
| 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, [ "testonly" ]) |
| visibility = [ ":*" ] |
| inputs = [ invoker.json_representation ] |
| outputs = [ invoker.out_json_summary ] |
| deps = [ ":$fidlc_target_name" ] |
| |
| metadata = { |
| _summary_basename = get_path_info(invoker.out_json_summary, "file") |
| _new_golden_file = "${invoker.goldens_dir}/${invoker.target_api_level}/${_summary_basename}" |
| |
| compatibility_testing_goldens = [ |
| { |
| api_level = invoker.target_api_level |
| src = rebase_path(invoker.out_json_summary, root_build_dir) |
| dst = rebase_path(_new_golden_file, root_build_dir) |
| }, |
| ] |
| } |
| } |
| } |
| |
| group(target_name) { |
| forward_variables_from(invoker, |
| [ |
| "testonly", |
| "visibility", |
| ]) |
| public_deps = main_target_deps |
| } |
| } |