# Copyright 2019 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/test.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

if (current_toolchain == host_toolchain) {
  sdk_executable("bin") {
    category = "partner"

    output_name = "fidlcat"

    sources = [
      "main.cc",
    ]
    deps = [
      ":lib",
      "//src/developer/debug/ipc:client",
      "//src/developer/debug/zxdb/client",
      "//src/developer/debug/zxdb/common",
      "//src/developer/debug/zxdb/console",
      "//src/lib/fxl",
      "//third_party/rapidjson",
      "//tools/fidlcat/lib",
      "//tools/fidlcat/lib:host_lib",
      "//zircon/public/lib/fidl_base",
    ]
  }

  static_library("lib") {
    public = [
      "command_line_options.h",
    ]

    sources = [
      "command_line_options.cc",
    ]

    deps = [
      "//zircon/public/lib/cmdline",
    ]
  }

  test("fidlcat_host_tests") {
    deps = [
      ":host_tests",
      ":lib",
      "//src/lib/fxl/test:gtest_main",
      "//tools/fidlcat/lib:host_tests",
    ]
  }

  source_set("host_tests") {
    testonly = true
    sources = [
      "command_line_options_test.cc",
    ]
    deps = [
      ":lib",
      "//third_party/googletest:gtest",
      "//zircon/public/lib/cmdline",
    ]
  }
}

executable("fidlcat_lib_tests") {
  testonly = true
  output_name = "fidlcat_lib_tests"
  sources = []
  deps = [
    "//tools/fidlcat/lib:tests",
  ]
}

unittest_package("fidlcat_tests") {
  deps = [
    ":fidlcat_lib_tests",
  ]
  tests = [
    {
      name = "fidlcat_lib_tests"
      environments = basic_envs
    },
  ]
}

install_host_tools("fidlcat_host") {
  deps = [
    ":bin",
  ]
  outputs = [
    "fidlcat",
  ]
}
