| # Copyright 2020 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/dist/resource.gni") |
| |
| # Generates binary config using FIDL format and .json data values. |
| # |
| # Example instantiation: |
| # |
| # ``` |
| # component_config("some_config") { |
| # sources = [ "config.json" ] |
| # } |
| # ``` |
| # |
| # Inputs: |
| # |
| # - JSON file(s) with config values. |
| # |
| # Outputs: |
| # |
| # - Persistent FIDL binary config file. |
| # |
| # Parameters: |
| # |
| # product_configs (optional) |
| # Paths to one or more JSON files containing the product policy. |
| # |
| # sources (optional) |
| # Paths to one or more JSON files containing config values. |
| # |
| # build_type (optional) |
| # String enum (eng, userdebug, user) that chooses additional configs to |
| # merge in depending on the build type. If not provided, then no additional |
| # config will be included, and the caller is responsible for adding the |
| # platform configs. |
| # |
| # dest (optional) |
| # If specified, the packaged path for the generated binary config file. |
| # Default: "data/${target_name}" |
| template("component_config") { |
| _sources = [] |
| if (defined(invoker.sources)) { |
| _sources += invoker.sources |
| } |
| if (defined(invoker.build_type)) { |
| if (invoker.build_type == "eng") { |
| _sources += [ |
| "//src/security/policy/component_manager_policy.json5", |
| "//src/security/policy/component_manager_policy_eng.json5", |
| ] |
| } else if (invoker.build_type == "userdebug") { |
| _sources += |
| [ "//src/security/policy/component_manager_policy_userdebug.json5" ] |
| } else if (invoker.build_type == "user") { |
| _sources += |
| [ "//src/security/policy/component_manager_policy_user.json5" ] |
| } else { |
| assert(false, "build_type must be one of 'eng', 'userdebug', or 'user'") |
| } |
| _sources += [ |
| "//src/security/policy/component_manager_policy_base.json5", |
| "//src/security/policy/component_manager_policy_build_type_base.json5", |
| "//src/sys/component_manager/configs/bootfs_config.json5", |
| ] |
| } |
| |
| _product_configs = [] |
| if (defined(invoker.product_configs)) { |
| _product_configs += invoker.product_configs |
| } |
| |
| generate_target = "${target_name}_generate" |
| output = "$target_gen_dir/$target_name" |
| compiled_action(generate_target) { |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "testonly", |
| ]) |
| visibility = [ ":*" ] |
| |
| tool = "//tools/component_manager_config:generate_config_bin" |
| tool_output_name = "generate_config" |
| |
| inputs = _sources + _product_configs |
| outputs = [ output ] |
| |
| args = [ "--output" ] + rebase_path(outputs, root_build_dir) |
| foreach(source, _sources) { |
| args += [ |
| "--input", |
| rebase_path(source, root_build_dir), |
| ] |
| } |
| |
| foreach(product, _product_configs) { |
| args += [ |
| "--product", |
| rebase_path(product, root_build_dir), |
| ] |
| } |
| } |
| |
| resource(target_name) { |
| forward_variables_from(invoker, |
| [ |
| "testonly", |
| "visibility", |
| ]) |
| public_deps = [ ":$generate_target" ] |
| sources = [ output ] |
| if (defined(invoker.dest)) { |
| outputs = [ invoker.dest ] |
| } else { |
| outputs = [ "data/${target_name}" ] |
| } |
| } |
| } |