| # 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}" |
| } |
| } |