blob: b493f3fdb63a334ca1bd4b359d55b0ff15ac8070 [file]
# Copyright 2023 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/bazel/bazel_build_action.gni")
import("//build/bazel/drivers/verify_driver_package.gni")
import("//build/packages/exported_fuchsia_package_archive.gni")
import("//build/packages/prebuilt_package.gni")
# Wraps a `fuchsia_package()` in a `BUILD.bazel` file.
# Use this template to make a `fuchsia_package()` target in a `BUILD.bazel`
# file be available in the GN build. Depending on the GN target will ensure
# that the corresponding Bazel target is built.
#
# Example:
# BUILD.gn:
# bazel_fuchsia_package("pkg") {
# bazel_target = "//bar:foo"
# package_name = "example_package"
# }
#
# Args:
# bazel_target: (required)
# Bazel target to wrap.
# This target should be a `fuchsia_package()` target.
#
# package_name: (required)
# The `package_name` of the wrapped `fuchsia_package`.
#
# bazel_inputs: (optional)
# List of GN labels to bazel_input_xxx() targets required by the
# bazel_target.
# Type: list of strings (GN labels)
#
# deps:
# testonly:
# visibility:
# Usual GN meaning.
template("bazel_driver_package") {
assert(defined(invoker.bazel_target), "bazel_target must be defined")
assert(defined(invoker.package_name), "package_name must be defined")
bazel_target = invoker.bazel_target
package_name = invoker.package_name
bazel_build_target = "$target_name.bazel_build"
bazel_build_action(bazel_build_target) {
forward_variables_from(invoker,
[
"deps",
"metadata",
"testonly",
"visibility",
"inputs",
])
bazel_target = bazel_target
bazel_config = "fuchsia_sdk"
if (defined(invoker.bazel_inputs)) {
if (!defined(deps)) {
deps = []
}
deps += invoker.bazel_inputs
}
package_outputs = [
{
package_label = bazel_target
archive = "$package_name.far"
copy_debug_symbols = true
},
]
metadata = {
# Used by the check_included_drivers template.
fuchsia_driver_labels =
[ get_label_info(":$target_name", "label_no_toolchain") ]
}
}
# From the perspective of GN/Ninja, this package is a prebuilt
# even though we just built it ourselves.
package_target = target_name
prebuilt_package(package_target) {
forward_variables_from(invoker,
[
"deps",
"testonly",
"visibility",
])
package_name = package_name
archive = "$target_out_dir/$package_name.far"
if (!defined(deps)) {
deps = []
}
deps += [ ":$bazel_build_target" ]
metadata = {
# Used by the assert_driver_components template.
driver_component_barrier = []
}
}
archive_target = target_name + "-archive"
exported_fuchsia_package_archive(archive_target) {
forward_variables_from(invoker, [ "testonly" ])
package = ":${package_target}"
}
}