| # Copyright 2019 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/host.gni") |
| import("//build/product.gni") |
| import("//build/sdk/sdk_host_tool.gni") |
| import("//build/testing/host_test.gni") |
| import("//build/testing/host_test_data.gni") |
| import("//build/tools/json_merge/json_merge.gni") |
| import("//src/storage/fshost/generated_fshost_config.gni") |
| import("config.gni") |
| |
| group("ffx") { |
| testonly = true |
| |
| public_deps = [ |
| ":ffx-defaults.json($host_toolchain)", |
| ":ffx_tool($host_toolchain)", |
| ":tests", |
| "lib($host_toolchain)", |
| ] |
| } |
| |
| if (is_host) { |
| group("ffx_tool") { |
| deps = [ |
| ":host", |
| "frontends/ffx:ffx_bin($host_toolchain)", |
| "tools($host_toolchain)", |
| ] |
| } |
| |
| install_host_tools("host") { |
| deps = [ "frontends/ffx:ffx_bin" ] |
| outputs = [ "ffx" ] |
| } |
| |
| group("runtime") { |
| deps = [ |
| # The tool |
| ":host", |
| ] |
| } |
| |
| group("ffx_bin") { |
| public_deps = [ "frontends/ffx:ffx_bin" ] |
| |
| # Please prefer to use the appropriate host_test_data target defined below |
| # rather than directly depending on the ffx binary. |
| # |
| # The targets to use instead are: |
| # - ffx itself (`//src/developer/ffx:test_data`) if only using core |
| # functionality of ffx (no plugins not listed in `config.gni`'s |
| # `required_ffx_plugins` or `included_ffx_plugins` lists). This should be |
| # the rare case. |
| # - the whole "suite" of tools (`//src/developer/ffx:suite_test_data`) if |
| # a many subtools are used, or the subtools used aren't really usefully |
| # constrained. |
| # - a specific subtool's test data (eg. |
| # `//src/developer/ffx/plugins/tool:test_data`) if only one subtool is |
| # used and it's reasonable to write the test to call it directly (as |
| # `ffx-tool tool <args>` through fho's compatibility mode). |
| # - the SDK as a whole (See the `host_test_data("sdk_exported")`, for example: |
| # ``` |
| # host_test_data("sdk_exported") { |
| # sources = [ get_label_info("//sdk:core($default_toolchain)", |
| # "root_out_dir") + "/sdk/exported/core" ] |
| # |
| # deps = [ "//sdk:core($default_toolchain)" ] |
| # } |
| # ``` |
| # |
| # If you find yourself hitting this on something new, please try to use |
| # one of the above instead and if you're unsure reach out to the tools |
| # team for advice. |
| # |
| # TODO(b/296236928): change sdk description above to a reference to a |
| # normalized host_test_data. |
| visibility = [ |
| # These are well-defined users of the direct binary dependency and do not |
| # need to change. |
| "//bundles/infra/*", |
| "//src/developer/ffx/*", |
| |
| # TODO(b/296235955) Some things in vendor directories depend on this and |
| # probably shouldn't. We should fix that and remove this. |
| "//vendor/*", |
| |
| # Dart tests require special handling for their own kind of isolation, so |
| # these are 'allowed' to use this directly so they can copy it in where |
| # it's needed. |
| "//src/tests/end_to_end/package_manager:*", |
| |
| # TODO(b/295921890): The following are dependencies that existed at the |
| # time this visibility list was established, and they should eventually be |
| # moved to use the appropriate shared host_test_data. |
| "//build/assembly/update_package:*", |
| "//sdk/ctf/tests/examples/host_tool:*", |
| "//src/devices/bin/driver_tools/tests:*", |
| "//src/tests/end_to_end/*", |
| "//third_party/antlion/*", |
| "//tools/blackout/blackout-integration:*", |
| "//tools/blackout/blobfs-checkerboard:*", |
| "//tools/blackout/fs-tree:*", |
| ] |
| } |
| |
| sdk_host_tool("bin_sdk") { |
| # TODO(https://fxbug.dev/42135146): partner only at this time while we shake |
| # out alpha bugs and fill-in docs, etc. |
| category = "partner" |
| output_name = "ffx" |
| |
| deps = [ ":ffx_bin" ] |
| } |
| |
| host_test_data("test_data") { |
| # Needed for SDK inclusion |
| # |
| # TODO(b/330934833): Remove when IDK allows for `testonly` targets in dep |
| # tree or when we can separate the concept of data_dep from host_test_data. |
| testonly = false |
| deps = [ ":host" ] |
| sources = [ "${host_tools_dir}/ffx" ] |
| } |
| |
| group("suite_test_data") { |
| testonly = true |
| public_deps = [ ":test_data" ] |
| if (ffx_build_dual_mode_plugins_as_subtools) { |
| public_deps += dual_mode_subtool_test_data |
| } |
| } |
| |
| json_merge("ffx-defaults.json") { |
| # the "DEFAULT" config level will be made up of a json merge of the following |
| # source json, some of which may be generated. Anything that's part of an |
| # ffx_plugin() definition included under the main ffx binary will automatically |
| # be merged in by that machinery, but if it comes from an external subtool or a library |
| # it has to be manually added to this list. |
| sources = [ |
| rebase_path("//src/developer/ffx/data/config.json"), |
| rebase_path("//src/developer/ffx/daemon/data/config.json"), |
| rebase_path("//src/developer/ffx/lib/pbms/data/config.json"), |
| ] |
| |
| # Add in the 'dual-mode' config default files if we're doing dual mode |
| if (ffx_build_dual_mode_plugins_as_subtools) { |
| foreach(config, dual_mode_defaults) { |
| sources += [ rebase_path(config) ] |
| } |
| } |
| |
| # Add any dynamically generated config.json files (ie. from ffx plugin roots) here. |
| deps = [ |
| # This will bring in all built-in subtool config.json files. |
| "//src/developer/ffx/frontends/ffx:config.json($host_toolchain)", |
| |
| # These are separate subtools with plugin-generated config.json |
| "//src/developer/ffx/plugins/log:config.json($host_toolchain)", |
| "//src/developer/ffx/plugins/test:config.json($host_toolchain)", |
| "//src/developer/ffx/plugins/trace:config.json($host_toolchain)", |
| ] |
| |
| foreach(dep, deps) { |
| sources += [ get_label_info(dep, "target_out_dir") + "/config.json" ] |
| } |
| } |
| } |
| |
| # NOTE: this group is included in `//src/developer:tests` and `//src:tests` which get added as |
| # dependencies of the system image in infra builds. Tests which need to depend on a system image |
| # should be added to `host_tests` below. |
| group("tests") { |
| testonly = true |
| deps = [ |
| # Driver tests |
| "frontends/ffx:tests($host_toolchain)", |
| |
| # Subtool tests |
| "tools:tests($host_toolchain)", |
| |
| # Individual library tests, for libraries that are not plugins. |
| "command:tests($host_toolchain)", |
| "config:tests($host_toolchain)", |
| "core:tests($host_toolchain)", |
| "daemon:tests($host_toolchain)", |
| "lib:tests($host_toolchain)", |
| "playground:tests($host_toolchain)", |
| "plugins/package:tests($host_toolchain)", |
| "tests($host_toolchain)", |
| ] |
| } |
| |
| # NOTE: this group is for tests which need to transitively depend on a Fuchsia system image for |
| # "e2e" testing of ffx behavior. These are included in `//bundles/buildbot/host` in order to prevent |
| # dep cycles. |
| if (is_host) { |
| group("host_tests") { |
| testonly = true |
| deps = [] |
| |
| # ffx e2e host tests have a few constraints: |
| # |
| # 1. the assembly targets don't build correctly on mac bots |
| # 2. bringup bots can't depend on the main assembly that's used for ffx e2e tests |
| # 3. the minfs-no_hardware bot doesn't launch the emulator correctly |
| if (is_linux && !use_bringup_assembly && |
| data_filesystem_format != "minfs") { |
| deps += [ |
| "lib:host_tests", |
| "plugins:host_tests", |
| "tools:host_tests", |
| ] |
| } |
| } |
| } |
| |
| if (is_fuchsia) { |
| group("package_deps_for_host_tests") { |
| testonly = true |
| deps = [ |
| "plugins:package_deps_for_host_tests", |
| "tools/target-package/tests:package_deps_for_host_tests", |
| ] |
| } |
| } |
| |
| # Tests that are end to end, and should be part of the e2e test suite. |
| group("e2e_tests") { |
| testonly = true |
| deps = [ |
| "lib/fuchsia-controller:e2e_tests($host_toolchain)", |
| "plugins/emulator:e2e_tests", |
| "tests:e2e_tests($host_toolchain)", |
| ] |
| } |