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

if (is_host) {
  executable("fidlcat") {
    output_name = "fidlcat"

    sources = [ "main.cc" ]
    deps = [
      ":lib",
      "//sdk/lib/fidl_base",
      "//src/developer/debug/ipc:client",
      "//src/developer/debug/zxdb/client",
      "//src/developer/debug/zxdb/common",
      "//src/lib/fidl_codec",
      "//src/lib/fxl",
      "//third_party/protobuf:protobuf_full",
      "//third_party/rapidjson",
      "//tools/fidlcat/lib:host_lib",
      "//zircon/system/ulib/cmdline",
    ]
  }

  sdk_host_tool("fidlcat_sdk") {
    category = "partner"
    output_name = "fidlcat"
    deps = [ ":fidlcat" ]
  }

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

    sources = [ "command_line_options.cc" ]

    deps = [
      "//src/lib/fidl_codec",
      "//src/lib/fxl",
      "//zircon/system/ulib/cmdline",
    ]

    public_deps = [
      "//src/lib/analytics/cpp/core_dev_tools",
      "//third_party/re2",
    ]
  }

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

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

    # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
    configs += [ "//build/config:Wno-conversion" ]
  }
}

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