# Copyright 2021 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")

# The base library that supports domain objects.
#
# It works on host and Fuchsia.
sdk_source_set("cpp_base") {
  category = "partner"

  # TODO(https://fxbug.dev/42055960): Rename SDK element to "fidl_cpp_base".
  sdk_name = "fidl_cpp_base_v2"
  stable = true

  build_as_static = true

  public = [
    "include/lib/fidl/cpp/box.h",
    "include/lib/fidl/cpp/internal/framework_err.h",
    "include/lib/fidl/cpp/internal/natural_types.h",
    "include/lib/fidl/cpp/natural_coding_traits.h",
    "include/lib/fidl/cpp/natural_decoder.h",
    "include/lib/fidl/cpp/natural_encoder.h",
    "include/lib/fidl/cpp/natural_types.h",
    "include/lib/fidl/cpp/wire_natural_conversions.h",
  ]
  sources = [
    "natural_coding_traits.cc",
    "natural_decoder.cc",
    "natural_encoder.cc",
    "natural_types.cc",
  ]
  public_deps = [
    "//sdk/lib/fidl/cpp/wire",
    "//sdk/lib/stdcompat",
    "//zircon/system/ulib/zx",
  ]
  deps = [ "//sdk/lib/fidl_base" ]
  public_configs = [ ":cpp_base.headers" ]
}

config("cpp_base.headers") {
  include_dirs = [ "include" ]
}

# The IPC library that adds messaging APIs on top of domain objects.
#
# It is Fuchsia-only.
if (is_fuchsia) {
  sdk_source_set("cpp") {
    category = "partner"
    stable = true

    # TODO(https://fxbug.dev/42055960): Rename SDK element to "fidl_cpp".
    sdk_name = "fidl_cpp_v2"

    build_as_static = true

    public = [
      "include/lib/fidl/cpp/any_error_in.h",
      "include/lib/fidl/cpp/channel.h",
      "include/lib/fidl/cpp/client.h",
      "include/lib/fidl/cpp/internal/channel_endpoint_conversions.h",
      "include/lib/fidl/cpp/internal/client_details.h",
      "include/lib/fidl/cpp/internal/make_response_context.h",
      "include/lib/fidl/cpp/internal/natural_client_base.h",
      "include/lib/fidl/cpp/internal/natural_message_encoder.h",
      "include/lib/fidl/cpp/internal/thenable.h",
      "include/lib/fidl/cpp/unified_messaging.h",
      "include/lib/fidl/cpp/unified_messaging_declarations.h",
    ]
    sources = [
      "any_error_in.cc",
      "internal/natural_message_encoder.cc",
    ]
    public_deps = [
      "//sdk/lib/async",
      "//sdk/lib/fidl/cpp:cpp_base",
      "//sdk/lib/fidl_base",
    ]
  }
}

# The support header for HLCPP / Natural conversion
sdk_source_set("hlcpp_conversion") {
  category = "partner"
  stable = true
  sdk_name = "fidl_cpp_hlcpp_conversion"
  public = [ "include/lib/fidl/cpp/hlcpp_conversion.h" ]
  public_configs = [ ":cpp_base.headers" ]
  public_deps = [ "//sdk/lib/fidl/cpp:cpp_base" ]
}

# The support header for Natural type printing
sdk_source_set("natural_ostream") {
  category = "partner"
  stable = true
  sdk_name = "fidl_cpp_natural_ostream"
  public = [ "include/lib/fidl/cpp/natural_ostream.h" ]
  public_deps = [ "//sdk/lib/fidl/cpp:cpp_base" ]
  public_configs = [ ":cpp_base.headers" ]
}
