| # 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") |
| |
| # Declares a driver's bind rules. |
| # |
| # Generate a C header that exposes a ZIRCON_DRIVER macro with the specified bind rules built in. |
| # For more details refer to //tools/bindc/README.md. |
| # |
| # Parameters |
| # |
| # rules (required) |
| # Path to the bind rules source file. |
| # |
| # deps |
| # List of bind_library targets included by the bind rules. |
| # |
| # output_file |
| # Name of the header file generated by the tool (defaults to target name + ".h"). |
| # |
| # disable_autobind |
| # Configure the bind compiler to disable autobind, so that the driver must be bound on a user's |
| # request. Defaults to false. |
| # TODO(43400): Eventually this option should be removed when we can define this configuration |
| # in the driver's component manifest. |
| # |
| template("bind_rules") { |
| assert(defined(invoker.rules), "Need a bind rules source") |
| |
| output_file = "$target_name.h" |
| if (defined(invoker.output)) { |
| output_file = invoker.output |
| } |
| |
| response_file_target = "${target_name}_response_file" |
| response_file = "$target_gen_dir/$target_name.rsp" |
| |
| generated_file(response_file_target) { |
| data_keys = [ "sources" ] |
| forward_variables_from(invoker, [ "deps" ]) |
| outputs = [ response_file ] |
| } |
| |
| compiled_action(target_name) { |
| tool = "//tools/bindc:bin" |
| tool_output_name = "bindc" |
| |
| sources = [ invoker.rules ] |
| |
| args = [ |
| rebase_path(invoker.rules, root_build_dir), |
| "--output", |
| rebase_path("$target_gen_dir/$output_file", root_build_dir), |
| "--include-file", |
| rebase_path(response_file, root_build_dir), |
| ] |
| |
| if (defined(invoker.disable_autobind) && invoker.disable_autobind) { |
| args += [ "--disable-autobind" ] |
| } |
| |
| inputs = [ response_file ] |
| |
| outputs = [ "$target_gen_dir/$output_file" ] |
| |
| deps = [ ":$response_file_target" ] |
| if (defined(invoker.deps)) { |
| deps += invoker.deps |
| } |
| } |
| } |
| |
| # Declares a bind library. |
| # |
| # Declare a bind library that may be included by other libraries or bind rules. For more details, |
| # refer to //tools/bindc/README.md. |
| # |
| # Parameters |
| # |
| # source (required) |
| # Path to the library source file. |
| # |
| # public_deps |
| # List of other bind_library targets included by the library. |
| # |
| template("bind_library") { |
| assert(defined(invoker.source), "Need a source file") |
| |
| group(target_name) { |
| metadata = { |
| sources = [ rebase_path(invoker.source, root_build_dir) ] |
| } |
| |
| forward_variables_from(invoker, [ "public_deps" ]) |
| } |
| } |