# Copyright 2016 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/component_id_index.gni")
import("//build/config.gni")
import("//build/package.gni")
import("//build/test/test_package.gni")
import("//src/sys/build/components.gni")

source_set("lib") {
  sources = [
    "allow_list.cc",
    "allow_list.h",
    "cache_control.cc",
    "cache_control.h",
    "component_controller_impl.cc",
    "component_controller_impl.h",
    "component_event_provider_impl.cc",
    "component_event_provider_impl.h",
    "component_id_index.cc",
    "component_id_index.h",
    "constants.h",
    "cpu_watcher.cc",
    "cpu_watcher.h",
    "crash_introspector.cc",
    "crash_introspector.h",
    "debug_info_retriever.cc",
    "debug_info_retriever.h",
    "dynamic_library_loader.cc",
    "dynamic_library_loader.h",
    "environment_controller_impl.cc",
    "environment_controller_impl.h",
    "hub/component_hub.cc",
    "hub/component_hub.h",
    "hub/hub.cc",
    "hub/hub.h",
    "hub/hub_info.cc",
    "hub/hub_info.h",
    "hub/realm_hub.cc",
    "hub/realm_hub.h",
    "job_provider_impl.cc",
    "job_provider_impl.h",
    "log_connector_impl.cc",
    "log_connector_impl.h",
    "moniker.cc",
    "moniker.h",
    "namespace.cc",
    "namespace.h",
    "namespace_builder.cc",
    "namespace_builder.h",
    "policy_checker.cc",
    "policy_checker.h",
    "realm.cc",
    "realm.h",
    "runner_holder.cc",
    "runner_holder.h",
    "scheme_map.cc",
    "scheme_map.h",
    "service_provider_dir_impl.cc",
    "service_provider_dir_impl.h",
    "storage_watchdog.cc",
    "storage_watchdog.h",
    "system_diagnostics_directory.cc",
    "system_diagnostics_directory.h",
    "util.cc",
    "util.h",
  ]

  public_deps = [
    "//garnet/lib/loader",
    "//garnet/public/lib/json",
    "//sdk/fidl/fuchsia.hardware.power.statecontrol",
    "//sdk/fidl/fuchsia.process",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.sys.internal",
    "//sdk/fidl/fuchsia.sys.test",
    "//sdk/fidl/fuchsia.sys2",
    "//sdk/lib/stdcompat",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/inspect/cpp",
    "//src/lib/cmx",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//src/lib/loader_service",
    "//src/lib/pkg_url",
    "//third_party/googletest:gtest_prod",
    "//third_party/rapidjson",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxc",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/fs",
    "//zircon/system/ulib/inspector",
    "//zircon/system/ulib/syslog",
    "//zircon/system/ulib/task-utils",
    "//zircon/system/ulib/trace",
    "//zircon/system/ulib/trace-provider:trace-provider-with-fdio",
  ]

  configs += [ "//build/config:all_source" ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("appmgr_for_test") {
  testonly = true

  sources = [
    "appmgr.cc",
    "appmgr.h",
    "lifecycle.cc",
    "lifecycle.h",
    "startup_service.cc",
    "startup_service.h",
  ]

  public_deps = [
    ":lib",
    "fidl/fuchsia.appmgr",
    "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle",
    "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle_llcpp",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.sys.test",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//src/sys/lib/stdout-to-debuglog/cpp",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/fs",
  ]
}

executable("bin") {
  output_name = "appmgr"

  sources = [
    "appmgr.cc",
    "appmgr.h",
    "lifecycle.cc",
    "lifecycle.h",
    "main.cc",
    "startup_service.cc",
    "startup_service.h",
  ]

  deps = [
    ":lib",
    "fidl/fuchsia.appmgr",
    "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle",
    "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle_llcpp",
    "//sdk/lib/sys/cpp",
    "//src/sys/lib/stdout-to-debuglog/cpp",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
  ]

  # appmgr starts early in the boot sequence before shared libraries from
  # packages are available, so it has to avoid dynamically linking against
  # libraries outside of /boot/lib. These rules ensure that appmgr statically
  # links against the C++ standard library and prevents dependencies on some
  # shared library targets that are easy to pull in unintentionally.
  configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
  assert_no_deps = [ "//garnet/public/lib/fostr/*" ]
}

executable("unittest_bin") {
  testonly = true

  output_name = "appmgr_unittests"

  sources = [
    "allow_list_unittest.cc",
    "component_controller_unittest.cc",
    "component_event_provider_unittest.cc",
    "component_id_index_unittest.cc",
    "cpu_watcher_unittest.cc",
    "hub/hub_holder_unittest.cc",
    "log_connector_impl_unittest.cc",
    "moniker_unittest.cc",
    "namespace_builder_unittest.cc",
    "namespace_unittest.cc",
    "policy_checker_unittest.cc",
    "scheme_map_unittest.cc",
    "service_provider_dir_unittest.cc",
    "storage_unittest.cc",
    "storage_watchdog_unittest.cc",
    "util_unittest.cc",
  ]

  deps = [
    ":appmgr_for_test",
    ":lib",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.sys.internal",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/cpp/testing:unit",
    "//sdk/lib/vfs/cpp",
    "//src/lib/fxl/test:gtest_main",
    "//src/testing/fidl:placeholders",
    "//third_party/googletest:gmock",
    "//zircon/system/ulib/memfs",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

fuchsia_package_with_single_component("appmgr") {
  manifest = "meta/appmgr.cml"
  deps = [ ":bin" ]
}

config_data("appmgr_scheme_config") {
  for_pkg = "appmgr"
  sources = [ "scheme_map.config" ]
  outputs = [ "scheme_map/default.config" ]
}

# Supply a component ID index to appmgr. This index contains component ID
# entries for components whose source-code lives in this repository
# (fuchsia.git).
component_id_index("core_component_id_index") {
  source = "config/core_component_id_index.json"
}

# If this target is included in the build, all components are allowed to use
# isolated-persistent-storage, even if they are not in the component ID index.
component_id_index("component_id_index_no_restrict_storage") {
  source = "config/component_id_index_no_restrict_storage.json"
}

executable("test_component_using_storage_bin") {
  output_name = "test_component_using_storage"
  sources = [ "test/test_component_using_storage.cc" ]
}

fuchsia_component("test_component_using_storage") {
  deps = [ ":test_component_using_storage_bin" ]
  manifest = "meta/test_component_using_storage.cmx"
}

fuchsia_unittest_package("appmgr_unittests") {
  deps = [
    ":test_component_using_storage",
    ":unittest_bin",
  ]

  manifest = "meta/appmgr_unittests.cmx"

  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

group("tests") {
  testonly = true
  deps = [
    ":appmgr_unittests",
    "integration_tests",
  ]
}
