# Copyright 2020 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/sdk/sdk_host_tool.gni")
import("//build/test.gni")

if (is_host) {
  source_set("src") {
    sources = [
      "command_line_options.cc",
      "reader.cc",
      "symbol_index.cc",
    ]
    deps = [
      "//src/lib/fxl",
      "//zircon/system/ulib/cmdline",
    ]
    public_deps = [ "//src/lib/analytics/cpp/core_dev_tools" ]
  }

  executable("symbol-index") {
    sources = [ "main.cc" ]
    deps = [
      ":src",
      "//src/developer/debug/zxdb/common",
      "//src/lib/fxl",
    ]
  }

  sdk_host_tool("symbol_index_sdk") {
    category = "partner"
    deps = [ ":symbol-index" ]
    output_name = "symbol-index"
  }

  test("symbol_index_tests") {
    sources = [
      "command_line_options_test.cc",
      "reader_test.cc",
      "symbol_index_test.cc",
    ]
    deps = [
      ":src",
      "//src/lib/files",
      "//src/lib/fxl/test:gtest_main",
      "//third_party/googletest:gtest",
    ]
  }
}

group("tests") {
  testonly = true
  deps = [ ":symbol_index_tests($host_toolchain)" ]
}
