# 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")
import("//build/testing/environments.gni")
import("//build/testing/host_test_data.gni")

if (is_host) {
  source_set("src") {
    sources = [
      "command_line_options.cc",
      "log_parser.cc",
      "symbolizer_impl.cc",
    ]
    public_deps = [
      "//src/developer/debug/zxdb/client",
      "//src/developer/debug/zxdb/console",
      "//src/developer/debug/zxdb/symbols",
      "//src/lib/analytics/cpp/core_dev_tools",
      "//src/lib/fxl",
      "//third_party/rapidjson",
      "//zircon/system/ulib/cmdline",
    ]
  }

  executable("symbolizer") {
    sources = [ "main.cc" ]
    deps = [
      ":src",
      "//src/lib/fxl",
    ]
  }

  sdk_host_tool("sdk") {
    category = "partner"
    deps = [ ":symbolizer" ]
    output_name = "symbolizer"
  }

  test("symbolizer_tests") {
    sources = [
      "command_line_options_test.cc",
      "log_parser_test.cc",
      "symbolizer_impl_test.cc",
    ]
    deps = [
      ":src",
      "//src/lib/files",
      "//src/lib/fxl/test:gtest_main",
      "//third_party/googletest:gmock",
      "//third_party/googletest:gtest",
    ]
  }

  host_test_data("e2e_test_data") {
    sources = [
      "//prebuilt/test_data/symbolizer/symbols",
      "test_cases",
    ]
    outputs = [ "$root_out_dir/test_data/symbolizer/{{source_file_part}}" ]
  }

  test("symbolizer_e2e_tests") {
    sources = [ "e2e_test.cc" ]
    deps = [
      ":e2e_test_data",
      ":src",
      "//third_party/googletest:gtest",
    ]
    environments = [
      {
        dimensions = host_env.dimensions
        tags = [ "symbolizer-e2e" ]
      },
    ]
  }
}

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

group("e2e_tests") {
  testonly = true
  deps = [ ":symbolizer_e2e_tests($host_toolchain)" ]
}
