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

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

    output_name = "fidlcat"

    sources = [
      "main.cc",
    ]
    deps = [
      "//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/cmdline",
      "//zircon/public/lib/fidl_base",
    ]
  }

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

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

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

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