# 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 = [
      "code_generator/code_generator.h",
      "code_generator/cpp_visitor.h",
      "code_generator/test_generator.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",
      "top.h",
      "type_decoder.h",
    ]

    sources = [
      "code_generator/code_generator.cc",
      "code_generator/cpp_visitor.cc",
      "code_generator/test_generator.cc",
      "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_definition.cc",
      "top.cc",
      "type_decoder.cc",
    ]

    deps = [
      ":session_proto",
      "//src/developer/debug/ipc:client",
      "//src/developer/debug/zxdb/client",
      "//src/developer/debug/zxdb/common",
      "//src/lib/fidl_codec",
      "//src/lib/fidl_codec:value_proto",
      "//src/lib/fxl",
      "//third_party/protobuf:protobuf_full",
      "//tools/fidlcat:lib",
      "//zircon/public/lib/fidl_base",
      "//zircon/public/lib/fit",

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

    public_deps = [ "//zircon/system/public" ]
  }

  source_set("host_tests") {
    testonly = true
    sources = [
      "code_generator/code_generator_test.cc",
      "code_generator/cpp_visitor_test.cc",
      "comparator_test.cc",
    ]

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

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

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

action("json_for_test") {
  deps = [
    ":fidl($fidl_toolchain)",
    ":fidl-composed($fidl_toolchain)",
    ":fidl-sys($fidl_toolchain)",
    "//sdk/fidl/fuchsia.io",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/fidl/cpp/test:frobinator",
  ]
  outputs = [ "$target_gen_dir/library_loader_test_data.h" ]
  script = "generate_test_includes.sh"
  args = [
    rebase_path(target_gen_dir, root_build_dir) + "/library_loader_test_data.h",
    rebase_path(root_build_dir) +
        "/fidling/gen/sdk/lib/fidl/cpp/test/frobinator.fidl.json",
    rebase_path(root_build_dir) +
        "/fidling/gen/zircon/system/fidl/fuchsia-io/fuchsia-io.fidl.json",
    rebase_path(root_build_dir) +
        "/fidling/gen/tools/fidlcat/lib/fidl.fidl.json",
    rebase_path(root_build_dir) +
        "/fidling/gen/tools/fidlcat/lib/fidl-composed.fidl.json",
    rebase_path(root_build_dir) +
        "/fidling/gen/tools/fidlcat/lib/fidl-sys.fidl.json",
  ]
}

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

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

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

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

  public_deps = [ ":fidl" ]
}

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

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