# 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/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",
    "//zircon/public/lib/fit",
  ]

  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",

    # TODO(fxbug.dev/57392): Move it back to //third_party once unification completes.
    "//zircon/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 = [
    ":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 = [
    "//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/fit",
    "//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",

    # TODO(fxbug.dev/57392): Move it back to //third_party once unification completes.
    "//zircon/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",
    "//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("metadata") {
  sources = [
    "metadata.cc",
    "metadata.h",
    "metadata_schema.h",
  ]

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

  deps = [
    ":constants",
    ":errors",
    "//src/developer/forensics/utils:errors",

    # TODO(fxbug.dev/57392): Move it back to //third_party once unification completes.
    "//zircon/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 += [ "*" ]
}
