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

# ZXDB currently only compiles for the host.
if (current_toolchain == host_toolchain) {
  sdk_executable("zxdb") {
    category = "partner"

    sources = [
      "main_host.cc",
    ]
    deps = [
      "//garnet/bin/zxdb/client",
      "//garnet/bin/zxdb/console",
      "//garnet/lib/debug_ipc:client",
    ]
  }

  executable("zxdb_tests") {
    testonly = true
    output_name = "zxdb_tests"

    sources = []

    deps = [
      "//garnet/bin/zxdb/client:tests",
      "//garnet/bin/zxdb/common:tests",
      "//garnet/bin/zxdb/console:tests",
      "//garnet/bin/zxdb/expr:tests",
      "//garnet/lib/debug_ipc:tests",
      "//garnet/lib/debug_ipc/helper:tests",
      "//third_party/googletest:gtest",
      "//third_party/googletest:gtest_main",
    ]
  }
}

install_host_tools("zxdb_host") {
  deps = [
    ":zxdb",
  ]
  outputs = [
    "zxdb",
  ]
}
