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

source_set("mem_lib") {
  sources = [
    "capture.cc",
    "capture.h",
    "printer.cc",
    "printer.h",
    "summary.cc",
    "summary.h",
  ]

  deps = [
    "//garnet/public/lib/fsl",
    "//src/lib/fxl",
    "//zircon/public/fidl/fuchsia-sysinfo:fuchsia-sysinfo_c",
    "//zircon/public/lib/task-utils",
  ]
}

executable("mem_bin") {
  output_name = "mem"
  sources = [
    "mem_main.cc",
  ]
  deps = [
    ":mem_lib",
    "//src/lib/fxl",
    "//sdk/lib/sys/cpp",
  ]
}

package("mem") {
  deps = [
    ":mem_bin",
  ]
  binaries = [
    {
      name = "mem"
      shell = true
    },
  ]
}

source_set("mon_lib") {
  sources = [
    "monitor.cc",
    "monitor.h",
  ]
  public_deps = [
    ":mem_lib",
    "//garnet/public/lib/inspect",
    "//sdk/fidl/fuchsia.memory",
    "//sdk/lib/sys/cpp",
  ]
  deps = [
    "//garnet/public/lib/fsl",
    "//src/lib/fxl",
    "//zircon/public/fidl/fuchsia-sysinfo:fuchsia-sysinfo_c",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/trace-provider",
  ]
}

executable("mon_bin") {
  output_name = "memory_monitor"
  sources = [
    "mon_main.cc",
  ]
  deps = [
    ":mon_lib",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/trace-provider",
  ]
}

package("memory_monitor") {
  deps = [
    ":mon_bin",
  ]
  binary = "memory_monitor"
  meta = [
    {
      path = rebase_path("meta/memory_monitor.cmx")
      dest = "memory_monitor.cmx"
    },
  ]
}

config_data("config") {
  for_pkg = "sysmgr"
  sources = [
    "memory_monitor.config",
  ]
}
