# 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/components.gni")
import("//tools/cmc/build/cmc.gni")

# Defines a new core realm.
#
# The core realm on Fuchsia is a packaged non-executable component that holds
# most of the interesting packaged CFv2 components. This realm is configurable
# on a per-product basis to allow product owners to control which features and
# functionality the component instance tree is capable of on their product.
#
# For typical product definitions, the arguments to this template are set
# through GN arguments, declared in //build/product.gni.
#
# Parameters
#
#   deps
#   testonly
#   visibility
template("core_realm_definition") {
  if (defined(invoker.deps)) {
    shard_deps = invoker.deps
  } else {
    shard_deps = []
  }

  generated_file_target = "${target_name}"
  generated_file(generated_file_target) {
    forward_variables_from(invoker,
                           [
                             "testonly",
                             "metadata",
                           ])
    deps = shard_deps
    data_keys = [ "shard_files" ]
    outputs = [ "$target_out_dir/${target_name}_core_shard_list" ]
  }
}
