blob: 6c32bd39f4d3f88af9c3f19669e43a2638199ebd [file] [log] [blame]
# 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/bind/bind.gni")
# Generates a driver bind library for a FIDL library.
#
# Parameters
#
# * library_name
# - Required: The name of the FIDL library.
# - Type: string
#
# * fidl_gen_dir
# - Required: The directory under which bindings should be generated.
# - Type: path
#
# * fidl_ir_json
# - Required: The path to the associated FIDL IR JSON file.
# - Type: path
#
# * fidl_ir_target
# - Required: The label of the target that generates the FIDL IR JSON file.
# - Type: label
#
# * testonly, visibility
# - Optional: Usual GN meanings.
#
template("fidl_bind_library") {
assert(defined(invoker.library_name),
"fidl_bind_library(\"$target_name\") must define `library_name`")
assert(defined(invoker.fidl_gen_dir),
"fidl_bind_library(\"$target_name\") must define `fidl_gen_dir`")
assert(defined(invoker.fidl_ir_json),
"fidl_bind_library(\"$target_name\") must define `fidl_ir_json`")
assert(defined(invoker.fidl_ir_target),
"fidl_bind_library(\"$target_name\") must define `fidl_ir_target`")
generation_target = "${target_name}_generate"
forward_variables_from(invoker,
[
"fidl_gen_dir",
"library_name",
])
bind_library_file_name = "${library_name}.bind"
generated_bind_library = "$fidl_gen_dir/$bind_library_file_name"
if (current_toolchain == fidl_toolchain) {
compiled_action(generation_target) {
forward_variables_from(invoker,
[
"applicable_licenses",
"testonly",
"fidl_ir_json",
"fidl_ir_target",
])
visibility = [ ":*" ]
tool = "//tools/bindc:bin"
mnemonic = "BINDC"
tool_output_name = "bindc"
inputs = [ fidl_ir_json ]
outputs = [ generated_bind_library ]
deps = [ fidl_ir_target ]
args = [
"generate-bind",
"--output",
rebase_path("${generated_bind_library}", root_build_dir),
rebase_path(fidl_ir_json, root_build_dir),
]
metadata = {
generated_sources = rebase_path(outputs, root_build_dir)
}
}
not_needed(invoker, [ "visibility" ])
} else {
not_needed(invoker,
[
"fidl_ir_json",
"fidl_ir_target",
])
bind_library(target_name) {
forward_variables_from(invoker,
[
"applicable_licenses",
"testonly",
"visibility",
])
source_dep = ":$generation_target($fidl_toolchain)"
source = generated_bind_library
name = library_name
}
}
}