blob: 301ceacf343720a9d958218d0f74bc8885a8096b [file] [log] [blame]
# 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/sdk/sdk_host_tool.gni")
import("//build/testing/host_test.gni")
import("//build/testing/host_test_data.gni")
import("./build/ffx.gni")
import("config.gni")
# A note for developers interested in generating a Cargo.toml file for this tool:
# FFX generates a `ffx_bin_unversioned` rule, which is what should be used as the target for
# cargo gen. The appropriate command is:
# `fx gen-cargo '//src/developer/ffx:ffx_bin_unversioned(//build/toolchain:host_x64)'`
group("ffx") {
testonly = true
public_deps = [
":ffx_tool",
":tests",
"lib($host_toolchain)",
"tools($host_toolchain)",
]
}
if (is_host) {
ffx("ffx") {
version = "0.1.0"
edition = "2021"
with_unit_tests = true
# Essential plugins you can't really use ffx without, don't remove these
# when trying to build a cut-down ffx
plugin_deps = [
"//src/developer/ffx/plugins/config:ffx_config_plugin",
"//src/developer/ffx/plugins/daemon:ffx_daemon_plugin",
"//src/developer/ffx/plugins/schema:ffx_schema",
"//src/developer/ffx/plugins/target:ffx_target",
"//src/developer/ffx/plugins/version:ffx_version",
]
# Plugins that can be disabled without breaking ffx as a whole. You
# can do so in local development to reduce compile times while iterating on
# a specific plugin.
#
# Moving any of these plugins to be built externally will allow them to be
# used with the `ffx_build_dual_mode_plugins_as_subtools`. See the next
# section for this.
plugin_deps += [
"//src/connectivity/network/net-cli/ffx:ffx_net",
"//src/connectivity/network/testing/network-test-realm/ffx:ffx_net_test_realm",
"//src/developer/ffx/plugins/agis:ffx_agis",
"//src/developer/ffx/plugins/coverage:ffx_coverage",
"//src/developer/ffx/plugins/cts:ffx_cts",
"//src/developer/ffx/plugins/doctor:ffx_doctor",
"//src/developer/ffx/plugins/driver:ffx_driver",
"//src/developer/ffx/plugins/fuzz:ffx_fuzz",
"//src/developer/ffx/plugins/input:ffx_input",
"//src/developer/ffx/plugins/log:ffx_log",
"//src/developer/ffx/plugins/overnet:ffx_overnet_plugin",
"//src/developer/ffx/plugins/process_explorer:ffx_process_explorer",
"//src/developer/ffx/plugins/product_bundle:ffx_product_bundle",
"//src/developer/ffx/plugins/sdk:ffx_sdk",
"//src/developer/ffx/plugins/self-test:ffx_selftest",
"//src/developer/ffx/plugins/test:ffx_test",
"//src/developer/ffx/plugins/trace:ffx_trace",
"//src/developer/ffx/plugins/triage:ffx_triage",
"//src/storage/ffx:ffx_storage",
"//src/virtualization/ffx:ffx_guest",
]
# Any plugins that can be built in dual mode should be listed here, and that
# will cause them to be not included in the main ffx build if the
# `ffx_build_dual_mode_plugins_as_subtools` config is set.
#
# Keep this set in sync with tools/BUILD.gn's opposite listing.
if (!ffx_build_dual_mode_plugins_as_subtools) {
# LINT.IfChange
plugin_deps += dual_mode_plugins # from config.gni
# LINT.ThenChange(tools/BUILD.gn)
}
deps = [ "//third_party/rust_crates:anyhow" ]
ffx_deps = [
"//src/developer/ffx:ffx_lib_args",
"//src/developer/ffx:ffx_lib_sub_command",
"//src/developer/ffx:ffx_lib_suite",
"//src/developer/ffx/command:lib",
"//src/developer/ffx/config:lib",
"//src/developer/ffx/lib/errors:lib",
"//src/developer/ffx/lib/fho:lib",
"//src/developer/ffx/plugins/daemon:ffx_daemon_plugin_args",
"//src/developer/ffx/plugins/daemon:ffx_daemon_plugin_sub_command",
"//src/lib/fuchsia-async",
"//third_party/rust_crates:argh",
"//third_party/rust_crates:async-trait",
"//third_party/rust_crates:tempfile",
]
args_sources = [ "src/args.rs" ]
sources = [
"src/lib.rs",
"src/main.rs",
]
}
sdk_host_tool("bin_sdk") {
# TODO(fxbug.dev/57313): 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("ffx-e2e-without-target") {
binary_path = "$root_out_dir/ffx"
args = [
"self-test",
"--include-target",
"false",
]
deps = [ ":ffx_bin" ]
}
host_test("ffx-e2e-with-target") {
binary_path = "$root_out_dir/ffx"
args = [
"--config",
"sdk.root=.,sdk.type=in-tree",
"self-test",
]
deps = [
":ffx-e2e-test-data",
":ffx_bin",
# Required by the test_debug_limbo in `ffx self-test`.
# We cannot add it to the dependency of `ffx self-test` plugin because that will make
# the crasher into all production builds.
"//src/developer/forensics/crasher($target_toolchain)",
]
# TODO(fxbug.dev/60683): split additional dimensions such as multi-device
# mac + device, etc.
environments = [
# XXX(fxbug.dev/64897): support arm64 HTI tests
# emu_env,
nuc_env,
]
}
host_test_data("ffx-e2e-test-data") {
sources = [
"$root_out_dir/gen/src/developer/debug/zxdb/zxdb_sdk.meta.json",
"$root_out_dir/zxdb",
]
}
}
install_host_tools("host") {
deps = [ ":ffx_bin" ]
outputs = [ "ffx" ]
}
group("ffx_tool") {
deps = [
":ffx_bin($host_toolchain)",
":host",
]
}
group("runtime") {
deps = [
# The tool
":host",
# Target-side dependencies
"//src/developer/remote-control:runtime",
]
}
group("tests") {
testonly = true
deps = [
# ffx end to end tests, through `ffx self-test` invocations, one includes
# tests that must have a target present, the other can be run without a
# target present.
":ffx-e2e-with-target($host_toolchain)",
":ffx-e2e-without-target($host_toolchain)",
# Most ffx plugin test suites are included downstream of the group defined
# by the ffx template above.
":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)",
"logger:tests($host_toolchain)",
"plugins/package:tests($host_toolchain)",
"tests",
]
}