# 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"
}
