# 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/config.gni")

visibility = [ "//src/developer/forensics/feedback_data/*" ]

###############################################################################
# SOURCES
###############################################################################
source_set("archive_accessor") {
  sources = [
    "archive_accessor_ptr.cc",
    "archive_accessor_ptr.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.diagnostics",
    "//sdk/lib/fit-promise",
    "//sdk/lib/sys/cpp",
    "//src/developer/forensics/utils:errors",
    "//src/developer/forensics/utils/fidl:oneshot_ptr",
    "//src/developer/forensics/utils/fit",
    "//src/lib/fxl",
    "//zircon/public/lib/async",
    "//zircon/public/lib/async-cpp",
  ]

  deps = [
    "//garnet/public/lib/fostr/fidl/fuchsia.diagnostics",
    "//sdk/lib/syslog/cpp",
  ]
}

source_set("config") {
  sources = [
    "config.cc",
    "config.h",
  ]

  public_deps = [
    "//src/developer/forensics/feedback_data/annotations:types",
    "//src/developer/forensics/feedback_data/attachments:types",
    "//zircon/public/lib/zx",
  ]

  deps = [
    "//sdk/lib/syslog/cpp",
    "//src/lib/files",
    "//third_party/rapidjson",
  ]
}

source_set("constants") {
  sources = [ "constants.h" ]

  public_deps = [
    "//sdk/fidl/fuchsia.feedback",
    "//src/developer/forensics/utils/cobalt",
  ]
}

source_set("data_provider") {
  public = [ "data_provider.h" ]

  sources = [
    "data_provider.cc",
    "data_provider.h",
    "image_conversion.cc",
    "image_conversion.h",
  ]

  public_deps = [
    ":inspect_budget",
    ":metadata",
    "//sdk/fidl/fuchsia.feedback",
    "//sdk/lib/sys/cpp",
    "//src/developer/forensics/utils/cobalt",
    "//src/lib/timekeeper:system",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
  ]

  deps = [
    ":constants",
    ":datastore",
    "//garnet/public/lib/fostr/fidl/fuchsia.images",
    "//sdk/fidl/fuchsia.images",
    "//sdk/fidl/fuchsia.mem",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/lib/syslog/cpp",
    "//src/developer/forensics/feedback_data/annotations:types",
    "//src/developer/forensics/feedback_data/annotations:utils",
    "//src/developer/forensics/feedback_data/attachments:attachment_providers",
    "//src/developer/forensics/feedback_data/attachments:types",
    "//src/developer/forensics/utils:archive",
    "//src/developer/forensics/utils/fit",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//src/lib/uuid",
    "//third_party/libpng",
  ]
}

source_set("data_provider_controller") {
  sources = [
    "data_provider_controller.cc",
    "data_provider_controller.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.feedback",
    "//sdk/lib/syslog/cpp",
  ]

  deps = [
    ":constants",
    "//src/lib/files",
  ]
}

source_set("datastore") {
  sources = [
    "datastore.cc",
    "datastore.h",
  ]

  public_deps = [
    ":inspect_budget",
    "//sdk/lib/fit-promise",
    "//sdk/lib/sys/cpp",
    "//src/developer/forensics/feedback_data/annotations:annotation_providers",
    "//src/developer/forensics/feedback_data/annotations:types",
    "//src/developer/forensics/feedback_data/attachments:types",
    "//src/developer/forensics/utils:previous_boot_file",
    "//src/developer/forensics/utils/cobalt",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/zx",
  ]

  deps = [
    ":constants",
    "//sdk/lib/syslog/cpp",
    "//src/developer/forensics/feedback_data/annotations:annotation_providers",
    "//src/developer/forensics/feedback_data/annotations:static_annotations",
    "//src/developer/forensics/feedback_data/attachments:attachment_providers",
    "//src/developer/forensics/feedback_data/attachments:static_attachments",
  ]
}

source_set("data_register") {
  sources = [
    "data_register.cc",
    "data_register.h",
  ]

  public_deps = [
    ":constants",
    ":datastore",
    "//sdk/fidl/fuchsia.feedback",
    "//src/developer/forensics/feedback_data/annotations:types",
    "//src/lib/fxl",
  ]

  deps = [
    "//sdk/lib/syslog/cpp",
    "//third_party/rapidjson",
  ]
}

source_set("device_id_provider") {
  sources = [
    "device_id_provider.cc",
    "device_id_provider.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.feedback",
    "//src/developer/forensics/feedback_data/annotations:types",
  ]

  deps = [
    ":constants",
    "//sdk/lib/syslog/cpp",
    "//src/developer/forensics/utils:errors",
    "//src/lib/files",
    "//src/lib/fxl",
    "//src/lib/uuid",
  ]
}

source_set("errors") {
  sources = [ "errors.h" ]

  public_deps = [
    "//sdk/lib/syslog/cpp",
    "//src/developer/forensics/utils:errors",
  ]
}

source_set("main_service") {
  sources = [
    "main_service.cc",
    "main_service.h",
  ]

  public_deps = [
    ":config",
    ":data_provider",
    ":data_provider_controller",
    ":data_register",
    ":datastore",
    ":device_id_provider",
    ":inspect_manager",
    "//sdk/fidl/fuchsia.process.lifecycle",
    "//src/developer/forensics/utils/cobalt",
    "//src/lib/fxl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
  ]

  deps = [
    ":constants",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/developer/forensics/feedback_data/attachments:attachment_providers",
    "//src/developer/forensics/feedback_data/system_log_recorder:reader",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:production",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:version",
    "//src/developer/forensics/utils:previous_boot_file",
    "//src/lib/files",
    "//src/lib/fxl",
    "//src/lib/uuid",
    "//zircon/public/lib/zx",
  ]
}

source_set("inspect_manager") {
  public = [ "inspect_manager.h" ]

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

  public_deps = [ "//src/developer/forensics/utils:inspect_node_manager" ]

  deps = [ "//src/developer/forensics/utils:inspect_protocol_stats" ]
}

source_set("inspect_budget") {
  sources = [
    "inspect_data_budget.cc",
    "inspect_data_budget.h",
  ]

  public_deps = [
    "//sdk/lib/sys/inspect/cpp",
    "//src/developer/forensics/utils:archive",
    "//src/developer/forensics/utils:inspect_node_manager",
    "//src/developer/forensics/utils/cobalt",
  ]

  deps = [
    ":constants",
    "//sdk/lib/syslog/cpp",
    "//src/developer/forensics/utils:inspect_protocol_stats",
  ]
}

source_set("metadata") {
  sources = [
    "metadata.cc",
    "metadata.h",
    "metadata_schema.h",
  ]

  public_deps = [
    "//sdk/lib/fit-promise",
    "//src/developer/forensics/feedback_data/annotations:types",
    "//src/developer/forensics/feedback_data/attachments:types",
    "//src/developer/forensics/utils:utc_time_provider",
  ]

  deps = [
    ":constants",
    ":errors",
    "//src/developer/forensics/utils:errors",
    "//third_party/rapidjson",
  ]
}

source_set("main") {
  sources = [
    "main.cc",
    "main.h",
  ]

  deps = [
    ":main_service",
    "//sdk/fidl/fuchsia.feedback",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/developer/forensics/utils/component",
    "//zircon/public/lib/zx",
  ]

  visibility += [ "//src/developer/forensics/*" ]
}

###############################################################################
# CONFIGS
###############################################################################
config_data("sysmgr_config") {
  for_pkg = "sysmgr"

  sources = [ "config/sysmgr.config" ]
  outputs = [ "device_id_provider.config" ]

  visibility += [ "*" ]
}
