# Copyright 2018 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/components.gni")
import("//build/config.gni")
import("//src/sys/core/build/core_shard.gni")
import("//third_party/cobalt/metrics_registry.gni")

source_set("lib") {
  sources = [
    "debugger.cc",
    "debugger.h",
    "high_water.cc",
    "high_water.h",
    "logger.cc",
    "logger.h",
    "metrics.cc",
    "metrics.h",
    "monitor.cc",
    "monitor.h",
    "pressure_notifier.cc",
    "pressure_notifier.h",
    "pressure_observer.cc",
    "pressure_observer.h",
  ]
  public_deps = [
    "//sdk/fidl/fuchsia.feedback",
    "//sdk/fidl/fuchsia.hardware.ram.metrics",
    "//sdk/fidl/fuchsia.memory",
    "//sdk/fidl/fuchsia.memorypressure",
    "//sdk/fidl/fuchsia.metrics",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/inspect/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/developer/memory/metrics",
    "//zircon/system/ulib/inspect",
    "//zircon/system/ulib/trace",
  ]
  deps = [
    ":memory_metrics_registry",
    "//sdk/fidl/fuchsia.kernel:fuchsia.kernel_c",
    "//src/devices/lib/amlogic",
    "//src/lib/cobalt/cpp:metric_event_builder",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/trace-provider",
    "//zircon/system/ulib/trace-vthread",
  ]

  # TODO(fxbug.dev/95833): This target uses the deprecated C bindings.
  # Consider switching to the C++ bindings. See linked bug for details.
  configs += [ "//build/c:fidl-deprecated-c-bindings" ]
}

metrics_registry("memory_metrics_registry") {
  # This must match the ID of our Cobalt project as specified in:
  # third_party/cobalt_config/projects.yaml
  project_id = 3509424520
  namespace = "cobalt_registry"
  generate_cc = true
  generate_binarypb = false
}

executable("bin") {
  output_name = "memory_monitor"
  sources = [ "main.cc" ]
  deps = [
    ":lib",
    "//sdk/fidl/fuchsia.scheduler",
    "//sdk/lib/sys/cpp",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//zircon/system/ulib/async-default",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/trace-provider",
  ]
}

fuchsia_component("component") {
  component_name = "memory_monitor"
  manifest = "meta/memory_monitor.cml"
  deps = [ ":bin" ]
}

# Allow launching legacy v1 component to support existing use cases in tests.
# TODO(fxbug.dev/77702): delete this.
fuchsia_component("legacy_component") {
  component_name = "memory_monitor"
  manifest = "meta/memory_monitor.cmx"
  deps = [ ":bin" ]
}

fuchsia_package("monitor") {
  package_name = "memory_monitor"
  deps = [
    ":component",
    ":legacy_component",
  ]
}

core_shard("memory_monitor_core_shard") {
  shard_file = "meta/memory_monitor.core_shard.cml"
}

config_data("userdebug_config") {
  for_pkg = "memory_monitor"
  sources = [ "config/send_critical_pressure_crash_reports" ]
  outputs = [ "send_critical_pressure_crash_reports" ]
}
