blob: 5973d92421d1b531f973e54dbb71589f8a0f8a91 [file]
# 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/components.gni")
isolated_devmgr_v2_manifest_path = rebase_path("meta/isolated-devmgr.cml")
isolated_devmgr_v2_deps = rebase_path([
":driver-manager-support",
":driver-manager-test",
])
# Produces a (testonly) component with an isolated driver manager to launch drivers. The component
# name will always be `isolated-devmgr`.
#
# Example Usage:
#
# ```
# isolated_devmgr_v2_component("my-component") {
# }
#
# fuchsia_package("my-package") {
# deps = [ ":my-component" ]
# }
# ```
# The above component will be accessible when building test realms (via CML or dynamically) as
# `fuchsia-pkg://fuchsia.com/my-package#meta/isolated-devmgr.cm`
#
# `isolated_devmgr_v2_component` may depend on any number of `driver_module()` targets to ensure
# that any `fuchsia_package()` that includes them will include the same drivers.
#
# ```
# driver_module("my_driver") {
# ...
# }
#
# isolated_devmgr_v2_component("my-component") {
# deps = [ ":my_driver" ]
# ...
# }
# ```
#
# The Isolated Device Manager defined above will be able to read my_driver under the path
# "my_driver.so".
#
# Parameters
# deps
# visibility
template("isolated_devmgr_v2_component") {
fuchsia_component(target_name) {
forward_variables_from(invoker, [ "visibility" ])
testonly = true
component_name = "isolated-devmgr"
manifest = isolated_devmgr_v2_manifest_path
deps = isolated_devmgr_v2_deps
if (defined(invoker.deps)) {
deps += invoker.deps
}
}
}
template("isolated_devmgr_unittest_v2_component") {
if (!defined(invoker.manifest)) {
generated_target = "${target_name}_generated_manifest"
fuchsia_test_component_manifest(generated_target) {
forward_variables_from(invoker, [ "deps" ])
visibility = [ ":*" ]
metadata = {
test_component_manifest_cml = [
{
children = [
{
name = "isolated-devmgr"
url = "fuchsia-pkg://fuchsia.com/${invoker.package_name}#meta/isolated-devmgr.cm"
startup = "eager"
},
]
use = [
{
protocol = "fuchsia.process.Launcher"
},
{
protocol = "fuchsia.sys2.Realm"
from = "framework"
},
]
offer = [
{
protocol = [
"fuchsia.logger.LogSink",
"fuchsia.process.Launcher",
"fuchsia.sys.Launcher",
]
from = "parent"
to = [ "#isolated-devmgr" ]
},
]
},
]
}
}
manifest = get_target_outputs(":$generated_target")
manifest = manifest[0]
}
fuchsia_component(target_name) {
testonly = true
forward_variables_from(invoker,
[
"deps",
"manifest",
"visibility",
"component_name",
])
if (defined(generated_target)) {
deps += [ ":$generated_target" ]
}
}
}