# 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/fidl/fidl.gni")
import("//third_party/protobuf/proto_library.gni")

if (is_host) {
  static_library("host_lib") {
    public = [
      "analytics.h",
      "comparator.h",
      "decoder.h",
      "event.h",
      "exception_decoder.h",
      "fidlcat_printer.h",
      "inference.h",
      "interception_workflow.h",
      "replay.h",
      "statistics.h",
      "syscall_decoder.h",
      "syscall_decoder_dispatcher.h",
      "syscall_decoder_interface.h",
      "top.h",
      "type_decoder.h",
    ]

    sources = [
      "comparator.cc",
      "decoder.cc",
      "event.cc",
      "exception_decoder.cc",
      "fidlcat_printer.cc",
      "inference.cc",
      "interception_workflow.cc",
      "replay.cc",
      "statistics.cc",
      "syscall_decoder.cc",
      "syscall_decoder_dispatcher.cc",
      "syscall_decoder_interface.cc",
      "syscall_definition.cc",
      "top.cc",
      "type_decoder.cc",
    ]

    deps = [
      ":session_proto",
      "//sdk/lib/fidl_base",
      "//sdk/lib/fit",
      "//src/developer/debug/ipc",
      "//src/developer/debug/zxdb/client",
      "//src/developer/debug/zxdb/common",
      "//src/lib/analytics/cpp/core_dev_tools",
      "//src/lib/fidl_codec",
      "//src/lib/fidl_codec:value_proto",
      "//src/lib/fxl",
      "//third_party/protobuf:protobuf_full",
      "//third_party/rapidjson",
    ]

    public_deps = [
      "//third_party/re2",
      "//tools/fidlcat:lib",
      "//zircon/system/public",
    ]

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

  source_set("host_tests") {
    testonly = true
    sources = [ "comparator_test.cc" ]

    deps = [
      ":host_lib",
      "//sdk/lib/fidl_base",
      "//src/developer/debug/zxdb/client",
      "//src/lib/fidl_codec",
      "//third_party/googletest:gtest",
      "//third_party/protobuf:protobuf_full",
      "//third_party/rapidjson",
    ]

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

  proto_library("session_proto") {
    proto_in_dir = "//"

    sources = [ "//tools/fidlcat/proto/session.proto" ]

    generate_python = false

    deps = [
      "//src/lib/fidl_codec:value_proto",
      "//third_party/protobuf:protobuf_full",
    ]
  }
}

fidl("fidl") {
  testonly = true
  name = "test.fidlcat.examples"

  sources = [
    "testdata/empty.test.fidl",
    "testdata/types.test.fidl",
  ]
}

fidl("fidl-composed") {
  testonly = true
  name = "test.fidlcat.composedinto"

  sources = [ "testdata/composed_into.test.fidl" ]

  public_deps = [ ":fidl" ]
}

fidl("fidl-sys") {
  testonly = true
  name = "test.fidlcat.sys"

  sources = [ "testdata/sys.test.fidl" ]
}
