# 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")

source_set("e2e_test_headers") {
  public = [
    "main_e2e_test.h",
  ]
}

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

    sources = [
      "main_host.cc",
    ]
    deps = [
      "//src/developer/debug/ipc:client",
      "//src/developer/debug/zxdb/client",
      "//src/developer/debug/zxdb/console",
    ]
  }

  test("zxdb_e2e_tests") {
    sources = [
      "main_e2e_test.cc",
    ]
    deps = [
      ":e2e_test_headers",
      "//src/developer/debug/zxdb/console:e2e_tests",
      "//third_party/googletest:gtest",
    ]
  }

  test("zxdb_tests") {
    deps = [
      "//src/developer/debug/ipc:tests",
      "//src/developer/debug/shared:tests",
      "//src/developer/debug/zxdb/client:tests",
      "//src/developer/debug/zxdb/common:tests",
      "//src/developer/debug/zxdb/console:tests",
      "//src/developer/debug/zxdb/expr:tests",
      "//third_party/googletest:gtest",
      "//third_party/googletest:gtest_main",
    ]
  }

  test("zxdb_perftests") {
    sources = [
      "zxdb_perftests.cc",
    ]

    deps = [
      "//src/developer/debug/zxdb/common:perf_test",
      "//src/developer/debug/zxdb/symbols:perf_tests",
      "//third_party/googletest:gtest",
      "//zircon/public/lib/cmdline",
    ]
  }
}

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