# 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/component_tree_stats.rs",
    "src/config.rs",
    "src/constants.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/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"
}
