# 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")
import("//build/test.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",
    ]
  }

  test("zxdb_tests") {
    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",
  ]
}
