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

##########################################
# Though under //zircon, this build file #
# is meant to be used in the Fuchsia GN  #
# build.                                 #
# See fxb/36139.                         #
##########################################

assert(!defined(zx) || zx != "/",
       "This file can only be used in the Fuchsia GN build.")

import("//build/unification/images/migrated_manifest.gni")

group("psutils") {
  deps = [
    ":handles",
    ":kill",
    ":killall",
    ":kstats",
    ":memgraph",
    ":ps",
    ":signal",
    ":threads",
    ":top",
    ":vmaps",
    ":vmos",
  ]
}

source_set("ps_internal") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "ps_internal.c" ]
  deps = [
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/pretty",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

source_set("handles_internal") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [
    "handles-internal.cc",
    "object-utils.cc",
  ]
  deps = [
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/pretty",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

executable("ps") {
  output_dir = "$root_out_dir/zircon-migrated"
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "ps.c" ]
  deps = [
    ":ps_internal",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/pretty",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

executable("top") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "top.c" ]
  deps = [
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/pretty",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

executable("kill") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "kill.c" ]
  deps = [
    "//zircon/public/lib/fdio",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

executable("killall") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "killall.c" ]
  deps = [
    "//zircon/public/lib/fdio",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

executable("vmaps") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "vmaps.c" ]
  deps = [
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/pretty",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

executable("vmos") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [
    "vmo-utils.c",
    "vmos.cc",
  ]
  deps = [
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/pretty",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

executable("memgraph") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [
    "memgraph.cc",
    "object-utils.cc",
    "resources.c",
    "vmo-utils.c",
  ]
  include_dirs = [ target_gen_dir ]
  deps = [
    ":gen-memgraph-schema",
    "//zircon/public/lib/fdio",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

# Generate an include file that contains the schema JSON.
action("gen-memgraph-schema") {
  outputs = [ "$target_gen_dir/memgraph-schema.h" ]
  sources = [ "memgraph-schema.json" ]
  script = "gen-memgraph-schema-header.sh"
  args = rebase_path(outputs, root_build_dir) +
         rebase_path(sources, root_build_dir)
}

executable("kstats") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [
    "kstats.c",
    "resources.c",
  ]
  deps = [
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/pretty",
    "//zircon/system/fidl/fuchsia-boot:c",
  ]
}

executable("threads") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "threads.cc" ]
  deps = [
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/inspector",
    "//zircon/public/lib/pretty",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

executable("signal") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "signal.c" ]
  deps = [
    "//zircon/public/lib/fdio",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

executable("handles") {
  output_dir = "$root_out_dir/zircon-migrated"
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "handles.cc" ]
  deps = [
    ":handles_internal",
    "//zircon/public/lib/fdio",
    "//zircon/system/fidl/fuchsia-boot:c",
    "//zircon/system/ulib/task-utils",
  ]
}

migrated_manifest("ps-manifest") {
  deps = [ ":ps" ]
}

migrated_manifest("top-manifest") {
  deps = [ ":top" ]
}

migrated_manifest("kill-manifest") {
  deps = [ ":kill" ]
}

migrated_manifest("killall-manifest") {
  deps = [ ":killall" ]
}

migrated_manifest("vmaps-manifest") {
  deps = [ ":vmaps" ]
}

migrated_manifest("vmos-manifest") {
  deps = [ ":vmos" ]
}

migrated_manifest("memgraph-manifest") {
  deps = [ ":memgraph" ]
}

migrated_manifest("kstats-manifest") {
  deps = [ ":kstats" ]
}

migrated_manifest("threads-manifest") {
  deps = [ ":threads" ]
}

migrated_manifest("signal-manifest") {
  deps = [ ":signal" ]
}

migrated_manifest("handles-manifest") {
  deps = [ ":handles" ]
}
