| # 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" ] |
| } |
| } |
| } |