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

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

    sources = [ "main.cc" ]
    deps = [
      ":lib",
      "//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",
      "//tools/fidlcat/lib:host_lib",
      "//zircon/public/lib/fidl_base",
      "//zircon/system/ulib/cmdline",

      # TODO(fxbug.dev/57392): Move it back to //third_party once unification completes.
      "//zircon/third_party/rapidjson",
    ]
  }

  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",
    ]
  }

  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",
    ]
  }
}

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