| # 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") |
| |
| # 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") { |
| # package_name = "my-package" |
| # } |
| # |
| # 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 |
| # |
| # package_name (required) |
| # The name of the package in which this component will run. |
| # Type: string |
| # |
| # deps |
| # visibility |
| template("isolated_devmgr_v2_component") { |
| assert(defined(invoker.package_name), |
| "the package_name where the IsolateDevMgr will run must be defined") |
| package_name = invoker.package_name |
| manifest_path = "${target_gen_dir}/meta/isolated-devmgr.cml" |
| generated_file(manifest_path) { |
| contents = { |
| include = [ |
| "sdk/lib/diagnostics/inspect/client.shard.cml", |
| "sdk/lib/diagnostics/syslog/client.shard.cml", |
| ] |
| program = { |
| runner = "elf" |
| binary = "bin/support" |
| } |
| children = [ |
| { |
| name = "driver-manager-test" |
| url = "fuchsia-pkg://fuchsia.com/${package_name}#meta/driver-manager-test.cm" |
| }, |
| ] |
| capabilities = [ |
| { |
| protocol = [ |
| "fuchsia.boot.Arguments", |
| "fuchsia.kernel.RootJob", |
| ] |
| }, |
| ] |
| offer = [ |
| { |
| protocol = [ |
| "fuchsia.logger.LogSink", |
| "fuchsia.process.Launcher", |
| "fuchsia.sys.Launcher", |
| ] |
| from = "parent" |
| to = [ "#driver-manager-test" ] |
| }, |
| { |
| protocol = [ |
| "fuchsia.boot.Arguments", |
| "fuchsia.kernel.RootJob", |
| ] |
| from = "self" |
| to = [ "#driver-manager-test" ] |
| }, |
| ] |
| expose = [ |
| { |
| directory = "dev" |
| from = "#driver-manager-test" |
| }, |
| ] |
| } |
| outputs = [ "$manifest_path" ] |
| output_conversion = "json" |
| testonly = true |
| visibility = [ ":*" ] |
| } |
| |
| fuchsia_component(target_name) { |
| forward_variables_from(invoker, [ "visibility" ]) |
| testonly = true |
| component_name = "isolated-devmgr" |
| manifest = manifest_path |
| deps = [] |
| if (defined(invoker.deps)) { |
| deps += invoker.deps |
| } |
| deps += [ |
| ":$manifest_path", |
| "//src/lib/isolated_devmgr/v2_component:driver-manager-test", |
| "//src/lib/isolated_devmgr/v2_component:support", |
| ] |
| } |
| } |
| |
| template("isolated_devmgr_unittest_v2_component") { |
| if (!defined(invoker.manifest)) { |
| generated_target = "${target_name}_generated_manifest" |
| manifest = "$target_out_dir/${generated_target}.cml" |
| package_name = invoker.package_name |
| generated_file(generated_target) { |
| contents = { |
| include = [ |
| "sdk/lib/diagnostics/inspect/client.shard.cml", |
| "sdk/lib/diagnostics/syslog/client.shard.cml", |
| ] |
| program = { |
| if (defined(invoker.runner)) { |
| runner = invoker.runner |
| } else { |
| runner = "gtest_runner" |
| } |
| binary = invoker.executable_path |
| } |
| children = [ |
| { |
| name = "isolated-devmgr" |
| url = "fuchsia-pkg://fuchsia.com/${package_name}#meta/isolated-devmgr.cm" |
| startup = "eager" |
| }, |
| ] |
| capabilities = [ |
| { |
| protocol = "fuchsia.test.Suite" |
| }, |
| ] |
| 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" ] |
| }, |
| ] |
| expose = [ |
| { |
| protocol = "fuchsia.test.Suite" |
| from = "self" |
| }, |
| ] |
| } |
| outputs = [ "$manifest" ] |
| output_conversion = "json" |
| testonly = true |
| visibility = [ ":*" ] |
| } |
| } |
| fuchsia_component(target_name) { |
| testonly = true |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "manifest", |
| "visibility", |
| "component_name", |
| ]) |
| if (defined(generated_target)) { |
| deps += [ ":$generated_target" ] |
| } |
| } |
| } |