blob: cedf41a0b62736fc759118a3ed203f70a2bc9d04 [file] [log] [blame]
# 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("//src/sys/build/components.gni")
import("//tools/cmc/build/cmc.gni")
template("_weavestack_package") {
invoker_manifest = invoker.manifest
cmx_name = get_path_info(invoker_manifest, "name")
if (defined(invoker.extra_cmx)) {
manifest_merge_target = "${target_name}_${cmx_name}_merge"
cmc_merge(manifest_merge_target) {
sources = [ invoker_manifest ] + invoker.extra_cmx
output_name = "$manifest_merge_target.cmx"
}
invoker_manifest = get_target_outputs(":$manifest_merge_target")
invoker_manifest = invoker_manifest[0]
}
component_target = "${target_name}_${cmx_name}_component"
fuchsia_component(component_target) {
forward_variables_from(invoker, [ "testonly" ])
component_name = cmx_name
manifest = invoker_manifest
visibility = [ ":*" ]
if (!defined(deps)) {
deps = []
}
deps += [
"//src/connectivity/weave/weavestack:bin",
"//src/connectivity/weave/weavestack:default_environment_schema",
]
if (defined(manifest_merge_target)) {
deps += [ ":$manifest_merge_target" ]
}
}
fuchsia_package(target_name) {
forward_variables_from(invoker,
[
"effects",
"package_name",
"testonly",
"visibility",
])
deps = [ ":$component_target" ]
if (defined(applets)) {
deps += [ applets.target ]
}
}
}
# Creates a 'weavestack' package. All packages created with this template will be identical, except
# for the addition of selected applet modules.
#
# Example:
# ```
# weavestack_package("foo_weave") {
# package_name = "weave_package"
# applets = {
# target = "//path/to/applets/module"
# name = "module_name.so"
# }
# extra_cmx = [
# "meta/manifest.cmx",
# ]
# }
# ```
#
# Parameters
# applets (optional)
# A scope defining a loadable module that implements weave applets.
# Type: scope with the entries:
#
# target (required)
# The GN `loadable_module` target that builds the applets module.
# Type: path
#
# name (required)
# The name of the loadable module.
# Type: string
#
# package_name (optional)
# The name of the weavestack package. Defaults to 'target_name'.
# Type: string
# Default: ${target_name}
#
# extra_cmx (optional)
# Additional CMX manifests that will be merged with the base weavestack.cmx manifest.
# This can be used to add additional services or features that may be needed by different
# weave applets.
# Type: list(path)
template("weavestack_package") {
_weavestack_package(target_name) {
forward_variables_from(invoker,
[
"applets",
"extra_cmx",
"package_name",
])
manifest = "//src/connectivity/weave/meta/weavestack.cmx"
}
}