# 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/config.gni")
import("//build/package.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

source_set("lib") {
  sources = [
    "component_controller_impl.cc",
    "component_controller_impl.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",
    "namespace.cc",
    "namespace.h",
    "namespace_builder.cc",
    "namespace_builder.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_objects_directory.cc",
    "system_objects_directory.h",
    "util.cc",
    "util.h",
  ]

  public_deps = [
    "//garnet/lib/cmx",
    "//garnet/lib/loader",
    "//garnet/public/lib/backoff",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/inspect",
    "//garnet/public/lib/json",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.sys.test",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//src/lib/pkg_url",
    "//third_party/rapidjson",
    "//zircon/public/fidl/fuchsia-inspect",
    "//zircon/public/fidl/fuchsia-process",
    "//zircon/public/fidl/fuchsia-scheduler",
    "//zircon/public/fidl/fuchsia-virtualconsole",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/fs",
    "//zircon/public/lib/inspector",
    "//zircon/public/lib/loader-service",
    "//zircon/public/lib/trace-provider",
    "//zircon/public/lib/zx",
  ]

  deps = [
    "//zircon/public/fidl/fuchsia-device-manager",
    "//zircon/public/fidl/fuchsia-kernel",
  ]

  defines = [ "_ALL_SOURCE=1" ]
}

source_set("appmgr_for_test") {
  testonly = true

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

  public_deps = [
    ":lib",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.sys.test",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//zircon/public/lib/fs",
    "//zircon/public/lib/zx",
  ]
}

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

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

  deps = [
    ":lib",
    "//sdk/lib/sys/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("tests") {
  testonly = true

  output_name = "appmgr_unittests"

  sources = [
    "component_controller_unittest.cc",
    "hub/hub_holder_unittest.cc",
    "namespace_builder_unittest.cc",
    "namespace_unittest.cc",
    "scheme_map_unittest.cc",
    "service_provider_dir_unittest.cc",
    "storage_watchdog_unittest.cc",
    "util_unittest.cc",
  ]

  deps = [
    ":appmgr_for_test",
    ":lib",
    "//garnet/examples/fidl/services:echo",
    "//garnet/public/lib/gtest",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/cpp/testing:unit",
    "//sdk/lib/vfs/cpp",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gmock",
    "//zircon/public/fidl/fuchsia-device-manager",
    "//zircon/public/fidl/fuchsia-kernel",
    "//zircon/public/lib/memfs",
  ]
}

package("appmgr") {
  deprecated_system_image = true

  deps = [
    ":bin",
  ]
  binaries = [
    {
      name = "appmgr"
    },
  ]
}

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

test_package("appmgr_unittests") {
  deps = [
    ":tests",
  ]
  tests = [
    {
      name = "appmgr_unittests"
      environments = basic_envs
    },
  ]
}
