# Copyright 2022 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_source_set.gni")
import("//build/zircon/migrated_targets.gni")

config("include") {
  include_dirs = [ "include" ]
}

wavl_tree_headers = [
  "include/lib/fidl/cpp/wire/internal/intrusive_container/node_utils.h",
  "include/lib/fidl/cpp/wire/internal/intrusive_container/container_utils.h",
  "include/lib/fidl/cpp/wire/internal/intrusive_container/pointer_traits.h",
  "include/lib/fidl/cpp/wire/internal/intrusive_container/wavl_tree.h",
  "include/lib/fidl/cpp/wire/internal/intrusive_container/wavl_tree_internal.h",
  "include/lib/fidl/cpp/wire/internal/intrusive_container/helper_macros.h",
]

sdk_source_set("wire") {
  category = "partner"
  api = "fidl_cpp_wire.api"
  sdk_name = "fidl_cpp_wire"

  # TODO(https://fxbug.dev/42172264): We should represent the library as a
  # `sdk_static_library` when supported.
  build_as_static = true
  stable = true

  public = [
    "include/lib/fidl/cpp/wire/arena.h",
    "include/lib/fidl/cpp/wire/array.h",
    "include/lib/fidl/cpp/wire/coding_errors.h",
    "include/lib/fidl/cpp/wire/decoded_value.h",
    "include/lib/fidl/cpp/wire/envelope.h",
    "include/lib/fidl/cpp/wire/incoming_message.h",
    "include/lib/fidl/cpp/wire/internal/coding_config.h",
    "include/lib/fidl/cpp/wire/internal/display_error.h",
    "include/lib/fidl/cpp/wire/internal/transport.h",
    "include/lib/fidl/cpp/wire/message_storage.h",
    "include/lib/fidl/cpp/wire/object_view.h",
    "include/lib/fidl/cpp/wire/optional.h",
    "include/lib/fidl/cpp/wire/outgoing_message.h",
    "include/lib/fidl/cpp/wire/string_view.h",
    "include/lib/fidl/cpp/wire/traits.h",
    "include/lib/fidl/cpp/wire/vector_view.h",
    "include/lib/fidl/cpp/wire/wire_coding_traits.h",
    "include/lib/fidl/cpp/wire/wire_decoder.h",
    "include/lib/fidl/cpp/wire/wire_encoder.h",
    "include/lib/fidl/cpp/wire/wire_types.h",
  ]
  if (is_fuchsia) {
    public += [
      "include/lib/fidl/cpp/wire/async_binding.h",
      "include/lib/fidl/cpp/wire/async_transaction.h",
      "include/lib/fidl/cpp/wire/base_wire_result.h",
      "include/lib/fidl/cpp/wire/channel.h",
      "include/lib/fidl/cpp/wire/client.h",
      "include/lib/fidl/cpp/wire/client_base.h",
      "include/lib/fidl/cpp/wire/connect_service.h",
      "include/lib/fidl/cpp/wire/extract_resource_on_destruction.h",
      "include/lib/fidl/cpp/wire/internal/arrow.h",
      "include/lib/fidl/cpp/wire/internal/client_continuation.h",
      "include/lib/fidl/cpp/wire/internal/client_details.h",
      "include/lib/fidl/cpp/wire/internal/endpoints.h",
      "include/lib/fidl/cpp/wire/internal/framework_err.h",
      "include/lib/fidl/cpp/wire/internal/make_response_context.h",
      "include/lib/fidl/cpp/wire/internal/server_details.h",
      "include/lib/fidl/cpp/wire/internal/synchronization_checker.h",
      "include/lib/fidl/cpp/wire/internal/thenable.h",
      "include/lib/fidl/cpp/wire/message.h",
      "include/lib/fidl/cpp/wire/server.h",
      "include/lib/fidl/cpp/wire/service_handler.h",
      "include/lib/fidl/cpp/wire/status.h",
      "include/lib/fidl/cpp/wire/sync_call.h",
      "include/lib/fidl/cpp/wire/transaction.h",
      "include/lib/fidl/cpp/wire/unknown_interaction_handler.h",
      "include/lib/fidl/cpp/wire/unknown_interactions.h",
      "include/lib/fidl/cpp/wire/wire_coding_common.h",
      "include/lib/fidl/cpp/wire/wire_messaging.h",
      "include/lib/fidl/cpp/wire/wire_messaging_declarations.h",
    ]
  }
  if (is_fuchsia) {
    public += [ "include/lib/fidl/cpp/wire/internal/transport_channel.h" ]
  } else {
    public += [ "include/lib/fidl/cpp/wire/internal/transport_channel_host.h" ]
  }
  public += wavl_tree_headers

  sdk_headers_for_internal_use =
      [ "include/lib/fidl/cpp/wire/internal/transport.h" ]
  if (is_fuchsia) {
    sdk_headers_for_internal_use += [
      "include/lib/fidl/cpp/wire/internal/arrow.h",
      "include/lib/fidl/cpp/wire/internal/client_continuation.h",
      "include/lib/fidl/cpp/wire/internal/client_details.h",
      "include/lib/fidl/cpp/wire/internal/endpoints.h",
      "include/lib/fidl/cpp/wire/internal/make_response_context.h",
      "include/lib/fidl/cpp/wire/internal/server_details.h",
      "include/lib/fidl/cpp/wire/internal/thenable.h",
      "include/lib/fidl/cpp/wire/internal/synchronization_checker.h",
    ]
  }
  if (is_fuchsia) {
    sdk_headers_for_internal_use +=
        [ "include/lib/fidl/cpp/wire/internal/transport_channel.h" ]
  } else {
    sdk_headers_for_internal_use +=
        [ "include/lib/fidl/cpp/wire/internal/transport_channel_host.h" ]
  }
  sdk_headers_for_internal_use += wavl_tree_headers

  sources = [
    "arena.cc",
    "coding_errors.cc",
    "display_error.cc",
    "incoming_message.cc",
    "message.cc",
    "message_storage.cc",
    "outgoing_message.cc",
    "status.cc",
    "transport.cc",
    "wire_coding_traits.cc",
    "wire_decoder.cc",
    "wire_encoder.cc",
    "wire_messaging.cc",
    "wire_types.cc",
  ]
  if (is_fuchsia) {
    sources += [
      "async_binding.cc",
      "async_transaction.cc",
      "client_base.cc",
      "client_details.cc",
      "server.cc",
      "thenable.cc",
      "transaction.cc",
      "unknown_interactions.cc",
    ]
  }
  if (is_fuchsia) {
    sources += [ "transport_channel.cc" ]
  } else {
    sources += [ "transport_channel_host.cc" ]
  }

  deps = [ "//zircon/system/ulib/async:async-cpp" ]

  public_deps = [
    # <lib/fidl/cpp/wire/wire_messaging.h> has #include <lib/fit/function.h>.
    "//sdk/lib/fit",

    # Validating UTF-8 strings.
    "//sdk/lib/utf-utils",

    # Syscall headers.
    "//src/zircon/lib/zircon",

    # Various result-returning API uses #include <lib/zx/result.h>.
    "//zircon/system/ulib/zx",

    # <lib/fidl/cpp/wire/message.h> has #include <lib/fidl/cpp/transaction_header.h>
    "//sdk/lib/fidl_base",
  ]

  if (is_fuchsia) {
    public_deps += [
      # <lib/fidl/cpp/wire/async_binding.h> has #include <lib/async/dispatcher.h>
      "//zircon/system/ulib/async",

      # <lib/fidl/cpp/wire/async_binding.h> has #include <lib/sync/completion.h>
      "//zircon/system/ulib/sync",

      # <lib/fidl/cpp/wire/traits.h> has #include <lib/zx/object.h>.
      "//zircon/system/ulib/zx",

      # <lib/fidl/cpp/wire/internal/transport_channel.h> has
      # #include <lib/fidl/epitaph.h>
      "//sdk/lib/fidl",
    ]
  }

  # TODO(https://fxbug.dev/42052612): GN check fails without this condition.
  if (zircon_toolchain != false) {
    public_deps += [ "//zircon/system/public" ]
  }

  public_configs = [ ":include" ]
}
