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

executable("bin") {
  output_name = "insntrace"

  if (current_cpu == "x64") {
    sources = [
      "control.cc",
      "control.h",
      "main.cc",
      "server.cc",
      "server.h",
    ]
  } else {
    sources = [
      "main.cc",
    ]
  }

  deps = [
    "//garnet/lib/debugger_utils",
    "//garnet/lib/inferior_control",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/svc/cpp",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/zircon-internal",
  ]

  libs = [ "zircon" ]
}

install_host_tools("host_insntrace_print") {
  deps = [
    "print:insntrace_print",
  ]
  outputs = [
    "insntrace_print",
  ]
}

package("insntrace") {
  deps = [
    ":bin",
  ]

  binaries = [
    {
      name = "insntrace"
      shell = true
    },
  ]

  meta = [
    {
      path = rebase_path("meta/insntrace.cmx")
      dest = "insntrace.cmx"
    },
  ]
}
