# 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("//src/sys/build/components.gni")

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

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

  deps = [
    "//garnet/lib/debugger_utils",
    "//sdk/lib/sys/cpp",

    #"//src/lib/files",
    #"//src/lib/fsl",
    "//sdk/fidl/fuchsia.hardware.cpu.insntrace",
    "//sdk/fidl/fuchsia.tracing.kernel:fuchsia.tracing.kernel",
    "//src/lib/fxl",
    "//src/zircon/lib/zircon",
    "//zircon/public/lib/zircon-internal",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

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

fuchsia_shell_package("insntrace") {
  manifest = "meta/insntrace.cmx"
  deps = [ ":bin" ]
}
