blob: 3a8002996138243966c6b6b0bc90837d4b07d328 [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/assembly/bootfs_files_for_assembly.gni")
import("//build/component/component_id_index.gni")
import("//build/component/config.gni")
import("//build/components.gni")
import("//build/images/filesystem_limits.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//build/testing/environments.gni")
import("//tools/fidl/measure-tape/measure_tape.gni")
rustc_library("lib") {
name = "component_manager"
with_unit_tests = true
edition = "2021"
deps = [
":measure_tape_for_events",
":measure_tape_for_instance",
"//sdk/fidl/fuchsia.boot:fuchsia.boot_rust",
"//sdk/fidl/fuchsia.component:fuchsia.component_rust",
"//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_rust",
"//sdk/fidl/fuchsia.component.internal:fuchsia.component.internal_rust",
"//sdk/fidl/fuchsia.component.resolution:fuchsia.component.resolution_rust",
"//sdk/fidl/fuchsia.component.runner:fuchsia.component.runner_rust",
"//sdk/fidl/fuchsia.diagnostics.types:fuchsia.diagnostics.types_rust",
"//sdk/fidl/fuchsia.hardware.power.statecontrol:fuchsia.hardware.power.statecontrol_rust",
"//sdk/fidl/fuchsia.io:fuchsia.io_rust",
"//sdk/fidl/fuchsia.kernel:fuchsia.kernel_rust",
"//sdk/fidl/fuchsia.logger:fuchsia.logger_rust",
"//sdk/fidl/fuchsia.mem:fuchsia.mem_rust",
"//sdk/fidl/fuchsia.process:fuchsia.process_rust",
"//sdk/fidl/fuchsia.sys2:fuchsia.sys2_rust",
"//sdk/fidl/fuchsia.time:fuchsia.time_rust",
"//src/lib/diagnostics/inspect/runtime/rust",
"//src/lib/diagnostics/inspect/rust",
"//src/lib/error/clonable_error",
"//src/lib/fdio/rust:fdio",
"//src/lib/fidl/rust/fidl",
"//src/lib/flyweights",
"//src/lib/fuchsia-async",
"//src/lib/fuchsia-component",
"//src/lib/fuchsia-fs",
"//src/lib/fuchsia-runtime",
"//src/lib/fuchsia-url",
"//src/lib/injectable-time",
"//src/lib/storage/vfs/rust:vfs",
"//src/lib/versioning/version-history/rust:version-history",
"//src/lib/zircon/rust:fuchsia-zircon",
"//src/lib/zircon/rust:fuchsia-zircon-status",
"//src/sys/component_manager/lib/logger",
"//src/sys/component_manager/lib/runner",
"//src/sys/component_manager/lib/task_scope",
"//src/sys/component_manager/lib/util",
"//src/sys/lib/cm_fidl_validator",
"//src/sys/lib/cm_moniker",
"//src/sys/lib/cm_rust",
"//src/sys/lib/cm_types",
"//src/sys/lib/config_encoder",
"//src/sys/lib/elf_runner",
"//src/sys/lib/fidl-fuchsia-component-abi-ext",
"//src/sys/lib/fuchsia-bootfs",
"//src/sys/lib/fuchsia-zbi",
"//src/sys/lib/mem_util",
"//src/sys/lib/moniker",
"//src/sys/lib/routing",
"//src/sys/pkg/lib/fuchsia-pkg",
"//src/sys/pkg/lib/package-directory",
"//src/sys/pkg/lib/system-image",
"//third_party/rust_crates:anyhow",
"//third_party/rust_crates:async-trait",
"//third_party/rust_crates:derivative",
"//third_party/rust_crates:futures",
"//third_party/rust_crates:lazy_static",
"//third_party/rust_crates:maplit",
"//third_party/rust_crates:parking_lot",
"//third_party/rust_crates:rand",
"//third_party/rust_crates:thiserror",
"//third_party/rust_crates:tracing",
]
sources = [
"src/bootfs.rs",
"src/builtin/arguments.rs",
"src/builtin/capability.rs",
"src/builtin/cpu_resource.rs",
"src/builtin/crash_introspect.rs",
"src/builtin/debug_resource.rs",
"src/builtin/energy_info_resource.rs",
"src/builtin/factory_items.rs",
"src/builtin/fuchsia_boot_resolver.rs",
"src/builtin/hypervisor_resource.rs",
"src/builtin/info_resource.rs",
"src/builtin/ioport_resource.rs",
"src/builtin/irq_resource.rs",
"src/builtin/items.rs",
"src/builtin/kernel_stats.rs",
"src/builtin/log.rs",
"src/builtin/mexec_resource.rs",
"src/builtin/mmio_resource.rs",
"src/builtin/mod.rs",
"src/builtin/power_resource.rs",
"src/builtin/process_launcher.rs",
"src/builtin/realm_builder.rs",
"src/builtin/root_job.rs",
"src/builtin/root_resource.rs",
"src/builtin/runner.rs",
"src/builtin/smc_resource.rs",
"src/builtin/svc_stash_provider.rs",
"src/builtin/system_controller.rs",
"src/builtin/time.rs",
"src/builtin/vmex_resource.rs",
"src/builtin_environment.rs",
"src/capability.rs",
"src/constants.rs",
"src/diagnostics/cpu/component_stats.rs",
"src/diagnostics/cpu/component_tree_stats.rs",
"src/diagnostics/cpu/constants.rs",
"src/diagnostics/cpu/measurement.rs",
"src/diagnostics/cpu/mod.rs",
"src/diagnostics/cpu/runtime_stats_source.rs",
"src/diagnostics/cpu/task_info.rs",
"src/diagnostics/cpu/testing.rs",
"src/diagnostics/mod.rs",
"src/diagnostics/startup.rs",
"src/directory_ready_notifier.rs",
"src/elf_runner.rs",
"src/framework/binder.rs",
"src/framework/lifecycle_controller.rs",
"src/framework/mod.rs",
"src/framework/pkg_dir.rs",
"src/framework/realm.rs",
"src/framework/realm_query.rs",
"src/framework/route_validator.rs",
"src/lib.rs",
"src/model/actions/destroy.rs",
"src/model/actions/destroy_child.rs",
"src/model/actions/discover.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/actions/unresolve.rs",
"src/model/component.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/mod.rs",
"src/model/events/registry.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/mod.rs",
"src/model/model.rs",
"src/model/mutable_directory.rs",
"src/model/namespace.rs",
"src/model/ns_dir.rs",
"src/model/resolver.rs",
"src/model/routing/mod.rs",
"src/model/routing/open.rs",
"src/model/routing/providers.rs",
"src/model/routing/service.rs",
"src/model/routing_fns.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/tests/availability.rs",
"src/model/tests/lifecycle.rs",
"src/model/tests/mod.rs",
"src/model/tests/policy.rs",
"src/model/tests/rights.rs",
"src/model/tests/routing.rs",
"src/model/tests/storage.rs",
"src/model/tests/storage_admin.rs",
"src/root_stop_notifier.rs",
"src/startup.rs",
]
test_deps = [
"//examples/components/routing/fidl:echo_rust",
"//sdk/fidl/fuchsia.data:fuchsia.data_rust",
"//src/lib/diagnostics/hierarchy/rust",
"//src/lib/diagnostics/log/message/rust",
"//src/lib/fuchsia",
"//src/lib/process_builder:test-util-fidl_rust",
"//src/sys/lib/cm_rust/testing",
"//src/sys/lib/component_id_index",
"//src/sys/lib/library_loader",
"//src/sys/lib/routing/testing:routing_test_helpers",
"//third_party/rust_crates:assert_matches",
"//third_party/rust_crates:byteorder",
"//third_party/rust_crates:paste",
"//third_party/rust_crates:pretty_assertions",
"//third_party/rust_crates:proptest",
"//third_party/rust_crates:serde_json",
"//third_party/rust_crates:tempfile",
"//third_party/rust_crates:test-case",
"//third_party/rust_crates:zerocopy",
]
# component_manager should not depend on json5
assert_no_deps = [
# component_manager should not depend on json5
"//third_party/rust_crates:serde_json5",
# TODO(fxbug.dev/119607): remove dep on regex (there are still
# transitive deps)
#"//third_party/rust_crates:regex",
]
}
rustc_binary("bin") {
name = "component_manager"
edition = "2021"
configs += [ "//build/config/rust:bootfs" ]
deps = [
":lib",
"//sdk/fidl/fuchsia.component.internal:fuchsia.component.internal_rust",
"//src/lib/diagnostics/log/rust",
"//src/lib/fuchsia-async",
"//src/lib/fuchsia-runtime",
"//src/lib/zircon/rust:fuchsia-zircon",
"//src/sys/component_manager/lib/logger",
"//src/sys/lib/routing",
"//third_party/rust_crates:anyhow",
"//third_party/rust_crates:tracing",
]
sources = [ "src/main.rs" ]
}
# This v2 component bundles component manager with a config suitable for running
# a nested component manager inside of realm builder.
fuchsia_component("component-manager-realm-builder-cmp") {
deps = [
":bin",
":component_manager_realm_builder_config",
]
component_name = "component_manager"
manifest = "meta/component_manager.cml"
}
# This v2 component bundles component manager with a debug config suitable for running
# a nested component manager inside of realm builder.
fuchsia_component("component-manager-realm-builder-debug-cmp") {
deps = [
":bin",
":component_id_index_for_debug_config",
":component_manager_realm_builder_debug_config",
]
component_name = "component_manager"
manifest = "meta/component_manager_debug.cml"
}
resource("component_manager_tests_invalid_manifest") {
sources = [ "meta/component_manager_tests.invalid_cm" ]
outputs = [ "meta/{{source_file_part}}" ]
}
fuchsia_component("component-manager-tests-cmp") {
testonly = true
deps = [
":lib_test",
"//src/lib/process_builder:test_util",
]
component_name = "component_manager_tests"
manifest = "meta/component_manager_tests.cml"
}
fuchsia_test_package("component-manager-tests") {
# Many tests generate routing errors.
test_specs = {
log_settings = {
max_severity = "ERROR"
}
}
test_components = [ ":component-manager-tests-cmp" ]
deps = [
":component_manager_tests_invalid_manifest",
"tests/crash_introspect:panic_on_start",
"//examples/hello_world/rust:hello-world-rust-component",
"//src/sys/component_manager/testing/echo_server",
"//src/sys/component_manager/testing/lifecycle",
]
}
measure_tape("measure_tape_for_events") {
target_binding = "rust"
target_types = [ "fuchsia.component/Event" ]
fidls = [
"//sdk/fidl/fuchsia.component",
"//sdk/fidl/fuchsia.io",
]
}
measure_tape("measure_tape_for_instance_info") {
target_binding = "rust"
target_types = [ "fuchsia.sys2/InstanceInfo" ]
fidls = [ "//sdk/fidl/fuchsia.sys2" ]
}
measure_tape("measure_tape_for_instance") {
target_binding = "rust"
target_types = [ "fuchsia.sys2/Instance" ]
fidls = [ "//sdk/fidl/fuchsia.sys2" ]
}
group("tests") {
testonly = true
deps = [
":component-manager-tests",
"lib:tests",
"stress_tests",
"stress_tests_alt:component-manager-stress-tests-short",
"tests",
]
}
bootfs_files_for_assembly("bootfs") {
deps = [
":bin",
"//src/sys/startup:bootfs",
]
}
component_config("component_manager_realm_builder_config") {
sources = [ "configs/realm_builder_config.json5" ]
dest = "data/component_manager_realm_builder_config"
}
component_config("component_manager_realm_builder_debug_config") {
sources = [ "configs/realm_builder_debug_config.json5" ]
dest = "data/component_manager_realm_builder_debug_config"
}
component_config("component_manager_bootfs_config") {
sources = [
"//src/security/policy/component_manager_policy.json5",
"configs/bootfs_config.json5",
"configs/enable_introspection.json5",
]
dest = "config/component_manager"
}
component_id_index("component_id_index_for_debug") {
source = "configs/component_id_index_for_debug.json5"
}
component_id_index_config("component_id_index_for_debug_config") {
deps = [ ":component_id_index_for_debug" ]
}