blob: 06f0d0bb551fe30ec55d344d7411f874737f09ed [file] [log] [blame]
# Copyright 2013 The Flutter 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("//flutter/tools/executable_action.gni")
import("//flutter/tools/fuchsia/dart/dart_library.gni")
import("//flutter/tools/fuchsia/dart/toolchain.gni")
import("//flutter/tools/fuchsia/fidl/fidl.gni")
import("//flutter/tools/fuchsia/fidl/toolchain.gni")
import("//flutter/tools/fuchsia/gn-sdk/config/config.gni")
# Generates some Dart bindings for a FIDL library.
#
# The parameters for this template are defined in //flutter/tools/fuchsia/fidl/fidl.gni. The
# relevant parameters in this template are:
# - name;
template("fidl_dart") {
assert(current_toolchain == dart_toolchain,
"This template can only be used in the $dart_toolchain toolchain.")
not_needed(invoker,
[
"meta",
"sources",
])
main_target_name = target_name
generation_target_name = "${target_name}_dart_generate"
library_name = target_name
root_dir = "$target_gen_dir/${library_name}_package"
if (defined(invoker.name)) {
library_name = invoker.name
root_dir = "$target_gen_dir/${target_name}_${library_name}_package"
}
bindings_dir = "$root_dir/lib"
async_bindings_file = "$bindings_dir/fidl_async.dart"
test_bindings_file = "$bindings_dir/fidl_test.dart"
fidl_target_gen_dir =
get_label_info(":bogus($fidl_toolchain)", "target_gen_dir")
json_representation = "$fidl_target_gen_dir/$target_name.fidl.json"
executable_action(generation_target_name) {
visibility = [ ":*" ]
tool = "${fuchsia_tool_dir}/fidlgen_dart"
inputs = [ json_representation ]
outputs = [
async_bindings_file,
test_bindings_file,
]
args = [
"--json",
rebase_path(json_representation, root_build_dir),
"--output-async",
rebase_path(async_bindings_file, root_build_dir),
"--output-test",
rebase_path(test_bindings_file, root_build_dir),
]
deps = [ ":$main_target_name($fidl_toolchain)" ]
forward_variables_from(invoker, [ "testonly" ])
}
dart_library(main_target_name) {
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
package_root = root_dir
package_name = "fidl_" + string_replace(library_name, ".", "_")
null_safe = true
sources = [
rebase_path(async_bindings_file, bindings_dir),
rebase_path(test_bindings_file, bindings_dir),
]
deps = [ ":$generation_target_name" ]
if (defined(invoker.public_deps)) {
deps += invoker.public_deps
}
# invoker.deps are the non_fidl_deps passed in to the fidl() rule
if (defined(invoker.deps)) {
deps += invoker.deps
}
}
}