blob: 7d2e4914dd60c976060df2502127dd4bb9cd7b46 [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/component/config.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//build/testing/environments.gni")
import("//src/sys/build/components.gni")
template("component_manager") {
forward_variables_from(invoker, [ "is_test" ])
if (!defined(is_test)) {
is_test = false
}
_deps = [
"//garnet/lib/rust/files_async",
"//garnet/lib/rust/io_util",
"//sdk/fidl/fuchsia.boot:fuchsia.boot-rustc",
"//sdk/fidl/fuchsia.component:fuchsia.component-rustc",
"//sdk/fidl/fuchsia.component.internal:fuchsia.component.internal-rustc",
"//sdk/fidl/fuchsia.component.runner:fuchsia.component.runner-rustc",
"//sdk/fidl/fuchsia.data:fuchsia.data-rustc",
"//sdk/fidl/fuchsia.diagnostics.types:fuchsia.diagnostics.types-rustc",
"//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
"//sdk/fidl/fuchsia.io2:fuchsia.io2-rustc",
"//sdk/fidl/fuchsia.kernel:fuchsia.kernel-rustc",
"//sdk/fidl/fuchsia.logger:fuchsia.logger-rustc",
"//sdk/fidl/fuchsia.mem:fuchsia.mem-rustc",
"//sdk/fidl/fuchsia.process:fuchsia.process-rustc",
"//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle-rustc",
"//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
"//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
"//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
"//sdk/fidl/fuchsia.time:fuchsia.time-rustc",
"//src/diagnostics/archivist:lib",
"//src/lib/by_addr:by_addr",
"//src/lib/diagnostics/inspect/contrib/rust",
"//src/lib/diagnostics/inspect/rust",
"//src/lib/error/clonable_error",
"//src/lib/fdio/rust:fdio",
"//src/lib/fidl/rust/fidl",
"//src/lib/from-enum",
"//src/lib/fuchsia",
"//src/lib/fuchsia-async",
"//src/lib/fuchsia-component",
"//src/lib/fuchsia-runtime",
"//src/lib/fuchsia-url",
"//src/lib/process_builder",
"//src/lib/scoped_task",
"//src/lib/storage/vfs/rust:vfs",
"//src/lib/syslog",
"//src/lib/trace/rust:trace",
"//src/lib/zircon/rust:fuchsia-zircon",
"//src/lib/zircon/rust:fuchsia-zircon-status",
"//src/lib/zircon/rust:fuchsia-zircon-sys",
"//src/sys/lib/cm_fidl_validator",
"//src/sys/lib/cm_rust",
"//src/sys/lib/cm_types",
"//src/sys/lib/component_id_index",
"//src/sys/lib/directory_broker",
"//src/sys/lib/moniker",
"//src/sys/lib/routing",
"//src/sys/lib/runner",
"//third_party/rust_crates:anyhow",
"//third_party/rust_crates:async-trait",
"//third_party/rust_crates:byteorder",
"//third_party/rust_crates:futures",
"//third_party/rust_crates:lazy_static",
"//third_party/rust_crates:log",
"//third_party/rust_crates:maplit",
"//third_party/rust_crates:matches",
"//third_party/rust_crates:parking_lot",
"//third_party/rust_crates:rand",
"//third_party/rust_crates:tempfile",
"//third_party/rust_crates:thiserror",
"//third_party/rust_crates:url",
"//third_party/rust_crates:void",
# This is a 'logical' test-only dep, in that it's only used in the
# model::testing helpers, but that module is currently included in the main
# library (rather than being guarded with '#[cfg(test)]') to allow use in
# separate integration test targets.
"//garnet/examples/fidl/services:echo-rustc",
]
_non_rust_deps = [
"//zircon/system/ulib/trace",
"//zircon/system/ulib/trace-provider:trace-provider-with-fdio",
]
_sources = [
"src/builtin/arguments.rs",
"src/builtin/capability.rs",
"src/builtin/debug_resource.rs",
"src/builtin/hypervisor_resource.rs",
"src/builtin/info_resource.rs",
"src/builtin/ioport_resource.rs",
"src/builtin/irq_resource.rs",
"src/builtin/kernel_stats.rs",
"src/builtin/log.rs",
"src/builtin/mmio_resource.rs",
"src/builtin/mod.rs",
"src/builtin/process_launcher.rs",
"src/builtin/root_job.rs",
"src/builtin/root_resource.rs",
"src/builtin/runner.rs",
"src/builtin/smc_resource.rs",
"src/builtin/system_controller.rs",
"src/builtin/time.rs",
"src/builtin/vmex_resource.rs",
"src/builtin_environment.rs",
"src/capability.rs",
"src/capability_ready_notifier.rs",
"src/channel.rs",
"src/config.rs",
"src/constants.rs",
"src/diagnostics/component_stats.rs",
"src/diagnostics/component_tree_stats.rs",
"src/diagnostics/constants.rs",
"src/diagnostics/measurement.rs",
"src/diagnostics/mod.rs",
"src/diagnostics/runtime_stats_source.rs",
"src/diagnostics/task_info.rs",
"src/diagnostics/testing.rs",
"src/elf_runner/component.rs",
"src/elf_runner/config.rs",
"src/elf_runner/error.rs",
"src/elf_runner/launcher.rs",
"src/elf_runner/mod.rs",
"src/elf_runner/runtime_dir.rs",
"src/elf_runner/stdout.rs",
"src/framework.rs",
"src/fuchsia_boot_resolver.rs",
"src/fuchsia_pkg_resolver.rs",
"src/klog.rs",
"src/lib.rs",
"src/model/actions/delete_child.rs",
"src/model/actions/destroy.rs",
"src/model/actions/discover.rs",
"src/model/actions/mark_deleted.rs",
"src/model/actions/mod.rs",
"src/model/actions/resolve.rs",
"src/model/actions/shutdown.rs",
"src/model/actions/start.rs",
"src/model/actions/stop.rs",
"src/model/addable_directory.rs",
"src/model/binding.rs",
"src/model/component.rs",
"src/model/component_controller.rs",
"src/model/component_id_index.rs",
"src/model/context.rs",
"src/model/dir_tree.rs",
"src/model/environment.rs",
"src/model/error.rs",
"src/model/event_logger.rs",
"src/model/events/dispatcher.rs",
"src/model/events/error.rs",
"src/model/events/event.rs",
"src/model/events/filter.rs",
"src/model/events/mod.rs",
"src/model/events/mode_set.rs",
"src/model/events/registry.rs",
"src/model/events/running_provider.rs",
"src/model/events/serve.rs",
"src/model/events/source.rs",
"src/model/events/source_factory.rs",
"src/model/events/stream.rs",
"src/model/events/stream_provider.rs",
"src/model/events/synthesizer.rs",
"src/model/exposed_dir.rs",
"src/model/hooks.rs",
"src/model/hub.rs",
"src/model/logging.rs",
"src/model/mod.rs",
"src/model/model.rs",
"src/model/namespace.rs",
"src/model/policy.rs",
"src/model/resolver.rs",
"src/model/rights.rs",
"src/model/routing/error.rs",
"src/model/routing/mod.rs",
"src/model/routing/open.rs",
"src/model/routing/service.rs",
"src/model/routing_fns.rs",
"src/model/runner.rs",
"src/model/storage/admin_protocol.rs",
"src/model/storage/mod.rs",
"src/model/testing/echo_service.rs",
"src/model/testing/mocks.rs",
"src/model/testing/mod.rs",
"src/model/testing/out_dir.rs",
"src/model/testing/routing_test_helpers.rs",
"src/model/testing/test_helpers.rs",
"src/model/testing/test_hook.rs",
"src/model/walk_state.rs",
"src/path.rs",
"src/root_stop_notifier.rs",
"src/startup.rs",
"src/work_scheduler/delegate.rs",
"src/work_scheduler/dispatcher.rs",
"src/work_scheduler/hook.rs",
"src/work_scheduler/mod.rs",
"src/work_scheduler/timer.rs",
"src/work_scheduler/work_item.rs",
"src/work_scheduler/work_scheduler.rs",
]
if (is_test) {
rustc_test(target_name) {
edition = "2018"
sources = _sources
deps = _deps
non_rust_deps = _non_rust_deps
sources += [
"src/model/tests/mod.rs",
"src/model/tests/rights.rs",
"src/model/tests/routing.rs",
"src/model/tests/storage.rs",
"src/model/tests/storage_admin.rs",
"src/work_scheduler/routing_tests.rs",
]
# Test-only deps. Prefer adding deps used only in tests here instead of
# above, which has the benefit of keeping unneeded deps out of the production
# binary and allows depending on 'testonly' targets.
deps += [
"//src/lib/diagnostics/hierarchy/rust",
"//src/lib/diagnostics/testing",
"//src/lib/process_builder:test-util-fidl-rustc",
"//src/sys/lib/directory_broker",
"//src/sys/lib/library_loader",
"//src/sys/lib/routing/testing:routing_test_helpers",
]
}
} else {
rustc_library(target_name) {
name = "component_manager_lib"
edition = "2018"
sources = _sources
deps = _deps
non_rust_deps = _non_rust_deps
# Only for internal use.
visibility = [
"//src/session/*",
"//src/sys/component_manager/*",
]
}
}
}
component_manager("lib") {
}
component_manager("component_manager_test") {
is_test = true
}
component_manager("component_manager_boot_env_test") {
is_test = true
}
rustc_binary("bin") {
name = "component_manager"
edition = "2018"
force_opt = "z"
# Component manager must always be small (even in debug builds) since it
# is part of the Zircon boot image.
#
# We use a Thin LTO, which provides a ~65% decrease in binary size, albeit at
# the cost of a ~5x increase in compile wall time (or roughly 10 seconds on
# a 2018-era workstation). Fat LTO provides an even smaller binary (~70%
# decrease from no-LTO), but is single threaded, requiring ~6x more wall time
# to build (or roughly 60 seconds on a 2018-era workstation).
configs += [ "//build/config/lto:thinlto" ]
configs -= [ "//build/config/lto:thinlto" ]
configs += [ "//build/config/lto:thinlto" ]
configs -= [ "//build/config/fuchsia:dynamic_rust_standard_library" ]
deps = [
":lib",
"//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
"//sdk/fidl/fuchsia.io2:fuchsia.io2-rustc",
"//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
"//src/lib/fidl/rust/fidl",
"//src/lib/fuchsia-async",
"//src/lib/fuchsia-runtime",
"//src/lib/storage/pseudo-fs",
"//src/lib/trace/rust:trace-provider",
"//src/lib/zircon/rust:fuchsia-zircon",
"//third_party/rust_crates:anyhow",
"//third_party/rust_crates:futures",
"//third_party/rust_crates:log",
"//third_party/rust_crates:thiserror",
]
sources = [ "src/main.rs" ]
}
# Note that this package and the component it contains wrap component_manager
# as a v1 Component for interactive testing purposes through the shell. This
# will eventually go away.
fuchsia_component("component-manager-cmp") {
deps = [
":bin",
":component_manager_appmgr_config",
":component_manager_debug_config",
]
component_name = "component_manager"
manifest = "meta/component_manager.cmx"
}
# This component is identical to `component-manager-cmp`, except the manifest
# includes the arguments to point component_manager at the bundled config file
fuchsia_component("component-manager-for-examples-cmp") {
deps = [
":bin",
":component_manager_for_examples_config",
]
component_name = "component_manager_for_examples"
manifest = "meta/component_manager_for_examples.cmx"
}
fuchsia_package("component-manager-for-examples") {
deps = [ ":component-manager-for-examples-cmp" ]
}
fuchsia_package("component-manager") {
deps = [ ":component-manager-cmp" ]
}
fuchsia_component("component-manager-tests-cmp") {
testonly = true
deps = [
":component_manager_debug_config",
":component_manager_test",
"//src/lib/process_builder:test_util",
]
component_name = "component_manager_tests"
manifest = "meta/component_manager_tests.cmx"
}
resource("component_manager_tests_invalid_manifest") {
sources = [ "meta/component_manager_tests_invalid.cm" ]
outputs = [ "meta/{{source_file_part}}" ]
}
fuchsia_component("component-manager-boot-env-tests-cmp") {
testonly = true
deps = [
":component_manager_boot_env_test",
":component_manager_debug_config",
"//src/lib/process_builder:root_job_test_runner",
"//src/lib/process_builder:test_util",
]
component_name = "component_manager_boot_env_tests"
manifest = "meta/component_manager_boot_env_tests.cmx"
}
fuchsia_test_package("component-manager-tests") {
# Many tests generate routing errors.
test_specs = {
log_settings = {
max_severity = "ERROR"
}
}
test_components = [
":component-manager-tests-cmp",
":component-manager-boot-env-tests-cmp",
]
deps = [
":component_manager_tests_invalid_manifest",
"src/elf_runner/tests/lifecycle:run-indefinitely",
"//examples/components/basic:hello-world",
"//examples/components/basic:lifecycle-full",
"//examples/hello_world/rust:hello-world-rust-component-v2",
"//garnet/examples/fidl/echo_server_rust:echo-server-rust-cmp",
]
}
group("tests") {
testonly = true
deps = [
":component-manager",
":component-manager-tests",
"src/elf_runner/tests",
"stress_tests",
"stress_tests_alt",
"tests",
]
}
group("bootfs") {
deps = [
":bin",
"//src/sys/startup:bootfs",
]
}
component_config("component_manager_appmgr_config") {
sources = [ "configs/appmgr_config.json5" ]
}
component_config("component_manager_debug_config") {
sources = [ "configs/debug_config.json5" ]
}
component_config("component_manager_bootfs_config") {
sources = [
"//src/security/policy/component_manager_policy.json5",
"configs/bootfs_config.json5",
]
dest = "config/component_manager"
}
component_config("component_manager_for_examples_config") {
sources = [ "configs/for_examples_config.json5" ]
dest = "data/component_manager_config"
}