[assembly] Add support for board configs
Change-Id: Ib9cfcbf00c6f89db4d1b2b88885947e4c173dd46
Reviewed-on: https://fuchsia-review.googlesource.com/c/sdk-integration/+/788502
Commit-Queue: Aidan Wolter <awolter@google.com>
Reviewed-by: Jiaming Li <lijiaming@google.com>
Fuchsia-Auto-Submit: Aidan Wolter <awolter@google.com>
diff --git a/bazel_rules_fuchsia/fuchsia/assembly.bzl b/bazel_rules_fuchsia/fuchsia/assembly.bzl
index 2734ecc..fbf524b 100644
--- a/bazel_rules_fuchsia/fuchsia/assembly.bzl
+++ b/bazel_rules_fuchsia/fuchsia/assembly.bzl
@@ -48,6 +48,10 @@
_fuchsia_product_configuration = "fuchsia_product_configuration",
)
load(
+ "//fuchsia/private/assembly:fuchsia_board_configuration.bzl",
+ _fuchsia_board_configuration = "fuchsia_board_configuration",
+)
+load(
"//fuchsia/private/assembly:providers.bzl",
_FuchsiaProductAssemblyBundleInfo = "FuchsiaProductAssemblyBundleInfo",
_FuchsiaProductImageInfo = "FuchsiaProductImageInfo",
@@ -145,6 +149,7 @@
fuchsia_platform_connectivity_wlan_configuration = _fuchsia_platform_connectivity_wlan_configuration
fuchsia_platform_development_support_configuration = _fuchsia_platform_development_support_configuration
fuchsia_product_configuration = _fuchsia_product_configuration
+fuchsia_board_configuration = _fuchsia_board_configuration
fuchsia_product_image = _fuchsia_product_image
fuchsia_partitions_configuration = _fuchsia_partitions_configuration
fuchsia_product_bundle = _fuchsia_product_bundle
diff --git a/bazel_rules_fuchsia/fuchsia/private/assembly/fuchsia_board_configuration.bzl b/bazel_rules_fuchsia/fuchsia/private/assembly/fuchsia_board_configuration.bzl
new file mode 100644
index 0000000..9bd5edc
--- /dev/null
+++ b/bazel_rules_fuchsia/fuchsia/private/assembly/fuchsia_board_configuration.bzl
@@ -0,0 +1,42 @@
+# 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.
+
+load(
+ ":providers.bzl",
+ "FuchsiaBoardConfigInfo",
+)
+
+def _fuchsia_board_configuration_impl(ctx):
+ board_config = {}
+ board_config["name"] = ctx.attr.board_name
+ board_config["provided_features"] = ctx.attr.provided_features
+
+ board_config_file = ctx.actions.declare_file(ctx.label.name + "_board_config.json")
+ content = json.encode_indent(board_config, indent = " ")
+ ctx.actions.write(board_config_file, content)
+
+ return [
+ DefaultInfo(
+ files = depset(
+ direct = [board_config_file],
+ ),
+ ),
+ FuchsiaBoardConfigInfo(
+ board_config = board_config_file,
+ ),
+ ]
+
+fuchsia_board_configuration = rule(
+ doc = """Generates a board configuration file.""",
+ implementation = _fuchsia_board_configuration_impl,
+ attrs = {
+ "board_name": attr.string(
+ doc = "Name of this board.",
+ mandatory = True,
+ ),
+ "provided_features": attr.string_list(
+ doc = "The features that this board provides to the product.",
+ ),
+ },
+)
diff --git a/bazel_rules_fuchsia/fuchsia/private/assembly/fuchsia_product_image.bzl b/bazel_rules_fuchsia/fuchsia/private/assembly/fuchsia_product_image.bzl
index 56884f8..802d6b0 100644
--- a/bazel_rules_fuchsia/fuchsia/private/assembly/fuchsia_product_image.bzl
+++ b/bazel_rules_fuchsia/fuchsia/private/assembly/fuchsia_product_image.bzl
@@ -9,6 +9,7 @@
"FuchsiaAssemblyConfigInfo",
"FuchsiaProductAssemblyBundleInfo",
"FuchsiaProductConfigInfo",
+ "FuchsiaBoardConfigInfo",
"FuchsiaProductImageInfo",
)
@@ -27,6 +28,7 @@
assembly \
product \
--product $ORIG_DIR/$PRODUCT_CONFIG_PATH \
+ --board-info $ORIG_DIR/$BOARD_CONFIG_PATH \
--legacy-bundle $ORIG_DIR/$LEGACY_AIB \
--input-bundles-dir $ORIG_DIR/$PLATFORM_AIB_DIR \
--outdir $ORIG_DIR/$OUTDIR
@@ -53,11 +55,13 @@
images_config_info = ctx.attr.image[FuchsiaAssemblyConfigInfo]
images_config_file = images_config_info.config
product_config_file = ctx.attr.product_config[FuchsiaProductConfigInfo].product_config
+ board_config_file = ctx.attr.board_config[FuchsiaBoardConfigInfo].board_config
ffx_inputs = [
ctx.file._sdk_manifest,
ffx_tool,
product_config_file,
+ board_config_file,
]
ffx_inputs += legacy_aib.files
ffx_inputs += platform_aibs.files
@@ -81,6 +85,7 @@
"FFX_ISOLATE_DIR": ffx_isolate_dir.path,
"OUTDIR": out_dir.path,
"PRODUCT_CONFIG_PATH": product_config_file.path,
+ "BOARD_CONFIG_PATH": board_config_file.path,
"LEGACY_AIB": legacy_aib.dir.path,
"PLATFORM_AIB_DIR": platform_aibs.dir.path,
"IMAGES_CONFIG_PATH": images_config_file.path,
@@ -111,6 +116,11 @@
providers = [FuchsiaProductConfigInfo],
mandatory = True,
),
+ "board_config": attr.label(
+ doc = "A board configuration target.",
+ providers = [FuchsiaBoardConfigInfo],
+ mandatory = True,
+ ),
"image": attr.label(
doc = "A fuchsia_images_configuration target.",
providers = [FuchsiaAssemblyConfigInfo],
diff --git a/bazel_rules_fuchsia/fuchsia/private/assembly/providers.bzl b/bazel_rules_fuchsia/fuchsia/private/assembly/providers.bzl
index 103da16..0a68c6f 100644
--- a/bazel_rules_fuchsia/fuchsia/private/assembly/providers.bzl
+++ b/bazel_rules_fuchsia/fuchsia/private/assembly/providers.bzl
@@ -66,6 +66,13 @@
},
)
+FuchsiaBoardConfigInfo = provider(
+ doc = "A board-info used to containing the board_config.json and deps.",
+ fields = {
+ "board_config": "The JSON board configuration file.",
+ },
+)
+
FuchsiaAssemblyConfigInfo = provider(
doc = "Private provider that includes a single JSON configuration file.",
fields = {