| # 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/compiled_action.gni") |
| import("//build/config.gni") |
| |
| # Define a system power mode configuration target for a given JSON5 file. |
| # |
| # The template validates the provided JSON5 file to ensure it matches the expected system power mode |
| # configuration schema and criteria. If valid, a `resource` target will be created to allow the file |
| # to be included in a package. If invalid, the build will fail. |
| # |
| # When a `system_power_mode_config` target is added as a bootfs dependency, the provided JSON5 file |
| # will be accessible at the `output` path on the device (defaults to |
| # "/pkg/config/power_manager/system_power_mode_config.json"). |
| # |
| # Parameters: |
| # |
| # config_file (required) |
| # [string] The path to the JSON5 system power mode configuration file. |
| # |
| # output (optional) |
| # [string] The name of the JSON5 file as it will be published on the filesystem. Defaults to |
| # "system_power_mode_config.json", but the template accepts this as an argument to allow |
| # overriding for tests. |
| # |
| # Example usage: |
| # |
| # system_power_mode_config("astro") { |
| # config_file = "astro.json5" |
| # } |
| # |
| # system_power_mode_config("test_config") { |
| # config_file = "valid_system_power_mode_config.json5" |
| # output = "test_config.json" |
| # } |
| # |
| template("system_power_mode_config") { |
| assert(defined(invoker.config_file), "Need to specify a config file") |
| |
| output_config_name = "system_power_mode_config.json" |
| if (defined(invoker.output)) { |
| output_config_name = invoker.output |
| } |
| |
| compiled_action("${target_name}_validate") { |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "testonly", |
| ]) |
| |
| tool = "//src/power/power-manager/system_power_mode_config/validator" |
| tool_output_name = "system_power_mode_config_validator" |
| |
| inputs = [ invoker.config_file ] |
| outputs = [ "$target_gen_dir/$target_name.validated" ] |
| |
| args = [ |
| "--input", |
| rebase_path(inputs[0], root_build_dir), |
| "--stamp", |
| rebase_path(outputs[0], root_build_dir), |
| ] |
| } |
| |
| resource("${target_name}_data") { |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "testonly", |
| ]) |
| sources = [ invoker.config_file ] |
| outputs = [ "config/power_manager/${output_config_name}" ] |
| } |
| |
| group(target_name) { |
| forward_variables_from(invoker, [ "testonly" ]) |
| deps = [ |
| ":${target_name}_data", |
| ":${target_name}_validate", |
| ] |
| } |
| } |