# 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.

###############################################################################
# SOURCES
###############################################################################
source_set("annotation_providers") {
  public = [
    "annotation_provider.h",
    "annotation_provider_factory.h",
  ]

  sources = [
    "annotation_provider.h",
    "annotation_provider_factory.cc",
    "annotation_provider_factory.h",
    "device_id_provider.cc",
    "device_id_provider.h",
    "time_provider.cc",
    "time_provider.h",
  ]

  deps = [
    ":board_info_provider",
    ":channel_provider",
    ":last_reboot_info_provider",
    ":product_info_provider",
    ":types",
    ":utils",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/developer/forensics/feedback_data:constants",
    "//src/developer/forensics/utils:errors",
    "//src/developer/forensics/utils:time",
    "//src/developer/forensics/utils/fidl:device_id_provider_ptr",
    "//src/lib/fxl",
    "//src/lib/timekeeper",
    "//src/lib/timekeeper:system",
    "//zircon/public/lib/fit",
  ]
}

# Exposed separately for unit test purposes.
source_set("board_info_provider") {
  public = [ "board_info_provider.h" ]

  sources = [
    "annotation_provider.h",
    "board_info_provider.cc",
    "board_info_provider.h",
  ]

  public_deps = [
    ":types",
    "//sdk/fidl/fuchsia.hwinfo",
    "//src/developer/forensics/utils:errors",
    "//src/developer/forensics/utils/cobalt",
    "//src/developer/forensics/utils/fidl:caching_ptr",
  ]

  deps = [
    ":utils",
    "//sdk/lib/sys/cpp",
    "//src/developer/forensics/feedback_data:constants",
    "//src/developer/forensics/utils:errors",
    "//src/developer/forensics/utils/fit",
    "//src/lib/fxl",
    "//zircon/public/lib/fit",
  ]
}

# Exposed separately for unit test purposes.
source_set("channel_provider") {
  public = [ "channel_provider.h" ]

  sources = [
    "annotation_provider.h",
    "channel_provider.cc",
    "channel_provider.h",
  ]

  public_deps = [
    ":types",
    "//sdk/fidl/fuchsia.update.channel",
    "//sdk/lib/sys/cpp",
    "//src/developer/forensics/utils/cobalt",
    "//src/lib/fxl",
    "//zircon/public/lib/async",
    "//zircon/public/lib/zx",
  ]

  deps = [
    ":utils",
    "//src/developer/forensics/feedback_data:constants",
    "//src/developer/forensics/utils:errors",
    "//src/developer/forensics/utils/fidl:channel_provider_ptr",
    "//src/developer/forensics/utils/fit",
  ]
}

# Exposed separately for unit test purposes.
source_set("last_reboot_info_provider") {
  public = [ "last_reboot_info_provider.h" ]

  sources = [
    "annotation_provider.h",
    "last_reboot_info_provider.cc",
    "last_reboot_info_provider.h",
  ]

  public_deps = [
    ":types",
    "//sdk/fidl/fuchsia.feedback",
    "//src/developer/forensics/utils:errors",
    "//src/developer/forensics/utils/cobalt",
    "//src/developer/forensics/utils/fidl:caching_ptr",
  ]

  deps = [
    ":utils",
    "//sdk/lib/sys/cpp",
    "//src/developer/forensics/feedback_data:constants",
    "//src/developer/forensics/utils:errors",
    "//src/developer/forensics/utils:time",
    "//src/developer/forensics/utils/fit",
    "//src/lib/fxl",
    "//zircon/public/lib/fit",
  ]
}

# Exposed separately for unit test purposes.
source_set("product_info_provider") {
  public = [ "product_info_provider.h" ]

  sources = [
    "annotation_provider.h",
    "product_info_provider.cc",
    "product_info_provider.h",
  ]

  public_deps = [
    ":types",
    "//sdk/fidl/fuchsia.hwinfo",
    "//src/developer/forensics/utils:errors",
    "//src/developer/forensics/utils/cobalt",
    "//src/developer/forensics/utils/fidl:caching_ptr",
  ]

  deps = [
    ":utils",
    "//sdk/fidl/fuchsia.intl",
    "//sdk/lib/sys/cpp",
    "//src/developer/forensics/feedback_data:constants",
    "//src/developer/forensics/utils:errors",
    "//src/developer/forensics/utils/fit",
    "//src/lib/fxl",
    "//zircon/public/lib/fit",
  ]
}

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

  sources = [
    "board_name_provider.cc",
    "board_name_provider.h",
    "static_annotations.cc",
    "static_annotations.h",
  ]

  public_deps = [
    ":types",
    "//src/developer/forensics/feedback_data:device_id_provider",
  ]

  deps = [
    ":utils",
    "//sdk/fidl/fuchsia.sysinfo",
    "//sdk/lib/fdio",
    "//sdk/lib/syslog/cpp",
    "//src/developer/forensics/feedback_data:constants",
    "//src/developer/forensics/utils:errors",
    "//src/lib/files",
    "//src/lib/fxl",
  ]
}

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

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

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

  public_deps = [
    ":types",
    "//sdk/fidl/fuchsia.feedback",
  ]

  # TODO(fxbug.dev/57392): Move it back to //third_party once unification completes.
  deps = [ "//zircon/third_party/rapidjson" ]
}
