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

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/fxl",
      "//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/fxl/test:gtest_main",
      "//third_party/googletest:gmock",
      "//third_party/googletest:gtest",
    ]
  }

  test("symbolizer_e2e_tests") {
    sources = [ "e2e_test.cc" ]
    defines = [
      "TEST_CASES_DIR=" + rebase_path("test_cases"),
      "TEST_SYMBOLS_DIR=" +
          rebase_path("//prebuilt/test_data/symbolizer/symbols"),
    ]
    deps = [
      ":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)" ]
}
