# 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/fidl/args.gni")
import("//build/zircon/migrated_targets.gni")

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

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

sdk_source_set("llcpp") {
  # TODO(fxbug.dev/80525): Change this back to "partner" post API stability.
  category = "experimental"
  api = "fidl_cpp_wire.api"
  sdk_name = "fidl_cpp_wire"

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

  public = [
    "include/lib/fidl/llcpp/arena.h",
    "include/lib/fidl/llcpp/array.h",
    "include/lib/fidl/llcpp/coding_errors.h",
    "include/lib/fidl/llcpp/envelope.h",
    "include/lib/fidl/llcpp/internal/display_error.h",
    "include/lib/fidl/llcpp/internal/transport.h",
    "include/lib/fidl/llcpp/message_storage.h",
    "include/lib/fidl/llcpp/object_view.h",
    "include/lib/fidl/llcpp/soft_migration.h",
    "include/lib/fidl/llcpp/string_view.h",
    "include/lib/fidl/llcpp/traits.h",
    "include/lib/fidl/llcpp/vector_view.h",
    "include/lib/fidl/llcpp/wire_coding_traits.h",
    "include/lib/fidl/llcpp/wire_decoder.h",
    "include/lib/fidl/llcpp/wire_encoder.h",
    "include/lib/fidl/llcpp/wire_types.h",
  ]
  if (is_fuchsia) {
    public += [
      "include/lib/fidl/llcpp/async_binding.h",
      "include/lib/fidl/llcpp/async_transaction.h",
      "include/lib/fidl/llcpp/channel.h",
      "include/lib/fidl/llcpp/client.h",
      "include/lib/fidl/llcpp/client_base.h",
      "include/lib/fidl/llcpp/connect_service.h",
      "include/lib/fidl/llcpp/extract_resource_on_destruction.h",
      "include/lib/fidl/llcpp/internal/arrow.h",
      "include/lib/fidl/llcpp/internal/client_continuation.h",
      "include/lib/fidl/llcpp/internal/client_details.h",
      "include/lib/fidl/llcpp/internal/debug_thread_checker.h",
      "include/lib/fidl/llcpp/internal/endpoints.h",
      "include/lib/fidl/llcpp/internal/make_response_context.h",
      "include/lib/fidl/llcpp/internal/server_details.h",
      "include/lib/fidl/llcpp/internal/thenable.h",
      "include/lib/fidl/llcpp/internal/thread_checker.h",
      "include/lib/fidl/llcpp/message.h",
      "include/lib/fidl/llcpp/server.h",
      "include/lib/fidl/llcpp/service_handler_interface.h",
      "include/lib/fidl/llcpp/status.h",
      "include/lib/fidl/llcpp/sync_call.h",
      "include/lib/fidl/llcpp/transaction.h",
      "include/lib/fidl/llcpp/wire_coding_common.h",
      "include/lib/fidl/llcpp/wire_messaging.h",
      "include/lib/fidl/llcpp/wire_messaging_declarations.h",
    ]
  }
  if (is_fuchsia) {
    public += [ "include/lib/fidl/llcpp/internal/transport_channel.h" ]
  } else {
    public += [ "include/lib/fidl/llcpp/internal/transport_channel_host.h" ]
  }
  public += wavl_tree_headers

  private_headers = [ "include/lib/fidl/llcpp/internal/transport.h" ]
  if (is_fuchsia) {
    private_headers += [
      "include/lib/fidl/llcpp/internal/arrow.h",
      "include/lib/fidl/llcpp/internal/client_continuation.h",
      "include/lib/fidl/llcpp/internal/client_details.h",
      "include/lib/fidl/llcpp/internal/debug_thread_checker.h",
      "include/lib/fidl/llcpp/internal/endpoints.h",
      "include/lib/fidl/llcpp/internal/make_response_context.h",
      "include/lib/fidl/llcpp/internal/server_details.h",
      "include/lib/fidl/llcpp/internal/thenable.h",
      "include/lib/fidl/llcpp/internal/thread_checker.h",
    ]
  }
  if (is_fuchsia) {
    private_headers += [ "include/lib/fidl/llcpp/internal/transport_channel.h" ]
  } else {
    private_headers +=
        [ "include/lib/fidl/llcpp/internal/transport_channel_host.h" ]
  }
  private_headers += wavl_tree_headers

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

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

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

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

    # <lib/fidl/llcpp/message.h> has #include <lib/fidl/cpp/transaction_header.h>
    "//zircon/system/ulib/fidl:fidl_base",
  ]

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

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

      # <lib/fidl/llcpp/traits.h> has #include <lib/zx/object.h>.
      "//zircon/system/ulib/zx",
    ]
  }

  if (is_fuchsia) {
    deps = [ "//zircon/system/ulib/fidl" ]
  }

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

  public_configs = [ ":include" ]
}
