# 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/components.gni")
import("//build/fidl/fidl.gni")
import("//build/sdk/sdk.gni")
import("//build/test.gni")
import("//build/testing/environments.gni")
import("//third_party/protobuf/proto_library.gni")

static_library("fidl_codec") {
  friend = [ ":tests" ]

  public = [
    "builtin_semantic.h",
    "display_handle.h",
    "display_options.h",
    "encoder.h",
    "json_visitor.h",
    "library_loader.h",
    "logger.h",
    "memory_helpers.h",
    "message_decoder.h",
    "printer.h",
    "proto_value.h",
    "semantic.h",
    "semantic_parser.h",
    "status.h",
    "type_visitor.h",
    "visitor.h",
    "wire_object.h",
    "wire_parser.h",
    "wire_types.h",
  ]

  sources = [
    "builtin_semantic.cc",
    "display_handle.cc",
    "encoder.cc",
    "library_loader.cc",
    "logger.cc",
    "message_decoder.cc",
    "printer.cc",
    "proto_value.cc",
    "semantic.cc",
    "semantic_parser.cc",
    "status.cc",
    "wire_object.cc",
    "wire_parser.cc",
    "wire_types.cc",
  ]

  public_deps = [ "//src/lib/fxl" ]
  deps = [
    ":value_proto",
    "//sdk/fidl/fuchsia.io",
    "//third_party/rapidjson",
    "//zircon/system/public",
    "//zircon/system/ulib/fidl:fidl_base",
  ]
}

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

  sources = [ "//src/lib/fidl_codec/proto/value.proto" ]

  generate_python = false

  deps = [ "//third_party/protobuf:protobuf_full" ]
}

executable("fidl_codec_test_bin") {
  testonly = true
  sources = [
    "builtin_semantic_test.cc",
    "dispatcher_test.cc",
    "library_loader_test.cc",
    "message_decoder_test.cc",
    "printer_test.cc",
    "proto_test.cc",
    "semantic_parser_test.cc",
    "wire_object_test.cc",
    "wire_parser_test.cc",
    "wire_types_test.cc",
  ]

  deps = [
    ":fidl",
    ":fidl_codec",
    ":json_for_test",
    ":list_for_test",
    ":value_proto",
    "//sdk/testing/fidl:test",
    "//sdk/testing/fidl:test_support",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
    "//third_party/rapidjson",
    "//zircon/system/public:public",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_unittest_package("fidl-codec-tests") {
  deps = [ ":fidl_codec_test_bin" ]
}

group("tests") {
  testonly = true

  deps = [ ":fidl-codec-tests" ]
}

action("json_for_test") {
  testonly = true

  deps = [
    ":fidl($fidl_toolchain)",
    ":fidl-composed($fidl_toolchain)",
    ":fidl-sys($fidl_toolchain)",
    "//sdk/fidl/fuchsia.io($fidl_toolchain)",
    "//sdk/testing/fidl:frobinator($fidl_toolchain)",
  ]
  inputs = [
    "${root_build_dir}/fidling/gen/sdk/testing/fidl/frobinator.fidl.json",
    "${root_build_dir}/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io.fidl.json",
    "${root_build_dir}/fidling/gen/src/lib/fidl_codec/fidl.fidl.json",
    "${root_build_dir}/fidling/gen/src/lib/fidl_codec/fidl-composed.fidl.json",
    "${root_build_dir}/fidling/gen/src/lib/fidl_codec/fidl-sys.fidl.json",
  ]
  outputs = [ "${target_gen_dir}/library_loader_test_data.h" ]

  script = "generate_test_includes.sh"
  args = [
           rebase_path("${target_gen_dir}/library_loader_test_data.h",
                       root_build_dir),
           "FidlcodecExamples",
         ] + rebase_path(inputs, root_build_dir)
}

# NB: This exists because the core SDK is too large.  It is a subset
# of FIDL definitions in core.  If you need to remove a dep in this
# list, please add one to replace it, but make sure that you don't
# inflate the size of list_test_data as generated by :list_for_test
# too large.  See fxbug.dev/90389 for more detail.
sdk("stripped_sdk") {
  category = "internal"

  testonly = true

  deps = [
    "//sdk/fidl/fuchsia.bluetooth.a2dp:fuchsia.bluetooth.a2dp_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.bluetooth.sys:fuchsia.bluetooth.sys_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.component:fuchsia.component_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.component.runner:fuchsia.component.runner_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.component.test:fuchsia.component.test_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.component.types:fuchsia.component.types_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.data:fuchsia.data_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.feedback:fuchsia.feedback_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.input:fuchsia.input_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.inspect:fuchsia.inspect_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.io:fuchsia.io_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.kernel:fuchsia.kernel_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.logger:fuchsia.logger_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.math:fuchsia.math_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.mem:fuchsia.mem_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.net.interfaces:fuchsia.net.interfaces_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.process:fuchsia.process_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.sys:fuchsia.sys_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.sys.test:fuchsia.sys.test_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.sysinfo:fuchsia.sysinfo_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.url:fuchsia.url_sdk($fidl_toolchain)",
  ]
}

action("list_for_test") {
  testonly = true
  deps = [ ":stripped_sdk_fidl_json" ]
  inputs = [ "${root_gen_dir}/src/lib/fidl_codec/stripped_sdk.fidl_json.txt" ]
  outputs = [ "${target_gen_dir}/list_test_data.h" ]
  depfile = "${target_gen_dir}/list_test_data.h.d"
  script = "generate_test_includes.sh"
  args = [
    rebase_path("${target_gen_dir}/list_test_data.h", root_build_dir),
    "SdkExamples",
    "-content",
    rebase_path("${root_gen_dir}/src/lib/fidl_codec/stripped_sdk.fidl_json.txt",
                root_build_dir),
    rebase_path(depfile, root_build_dir),
  ]
}

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

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

  public_deps = [ "//zircon/vdso/zx" ]
}

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

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

  public_deps = [ ":fidl" ]
}

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

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

  public_deps = [ "//zircon/vdso/zx" ]
}
