| # Copyright 2021 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/dist/component_manifest_resources.gni") |
| import("//tools/cmc/build/cmc.gni") |
| |
| # Defines a new root realm. |
| # |
| # The core realm on Fuchsia is a packaged non-executable component that holds |
| # most of the interesting packaged CFv2 components. It can vary per-product to |
| # encode product specific differences in the component instance tree. Since |
| # there are different versions of it, the root component needs to change its |
| # child declaration for the core realm to contain the correct URL. |
| # |
| # This template generates a new root realm containing a custom child declaration |
| # for core. |
| # |
| # Parameters |
| # |
| # core_package_name (required) |
| # The name of the package holding the core realm on this product. This |
| # package name should be unique across all products, and thus usually is set |
| # to "core-$PRODUCT_NAME", for example "core-workstation" or "core-core". |
| # |
| # testonly |
| # visibility |
| template("root_realm") { |
| assert( |
| defined(invoker.core_package_name), |
| "The `core_package_name` argument was missing when calling root_realm($target_name)") |
| |
| core_child_shard_path = |
| "${target_out_dir}/${target_name}-${invoker.core_package_name}.cml" |
| write_file( |
| core_child_shard_path, |
| [ |
| "{", |
| " children: [", |
| " {", |
| " name: \"core\",", |
| " url: \"fuchsia-pkg://fuchsia.com/${invoker.core_package_name}#meta/core.cm\",", |
| " environment: \"#core-env\",", |
| " on_terminate: \"reboot\",", |
| " },", |
| " ],", |
| "}", |
| ]) |
| |
| merged_manifest_target = "${target_name}_merged_manifest" |
| cmc_merge(merged_manifest_target) { |
| forward_variables_from(invoker, [ "testonly" ]) |
| visibility = [ ":*" ] |
| output_name = "root.cml" |
| sources = [ |
| "//src/sys/root/root-base.shard.cml", |
| core_child_shard_path, |
| ] |
| } |
| |
| component_manifest_resources(target_name) { |
| forward_variables_from(invoker, [ "testonly" ]) |
| sources = get_target_outputs(":${merged_manifest_target}") |
| deps = [ ":${merged_manifest_target}" ] |
| } |
| } |