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

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

## BAZEL2GN SENTINEL - DO NOT EDIT BELOW THIS LINE ##
#
#  ________  _________  ________  ________
# |\   ____\|\___   ___\\   __  \|\   __  \
# \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
#  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
#   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
#     ____\_\  \   \ \__\ \ \_______\ \__\
#    |\_________\   \|__|  \|_______|\|__|
#    \|_________|
#
#
# AUTO-GENERATED - DO NOT EDIT
#
# The targets below are auto-generated based on the targets defined in the
# BUILD.bazel file from the same directory. If you made changes to targets in
# Bazel, instead of editing this file manually, run:
#
#   > fx bazel2gn
#
# Please do NOT edit this file directly. Instead, edit the BUILD.bazel file and
# rerun bazel2gn.

import("//build/tools/bazel2gn/bazel_migration.gni")

# A self-verification target for generated content in this file.
if (is_host) {
  verify_bazel2gn("verify_bazel2gn") {
  }
}

sdk_source_set("cpp_base") {
  sources = [
    "natural_coding_traits.cc",
    "natural_decoder.cc",
    "natural_encoder.cc",
    "natural_types.cc",
  ]
  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",
  ]
  sdk_area = "FIDL"
  build_as_static = true
  category = "partner"
  sdk_name = "fidl_cpp_base_v2"
  deps = [ "//sdk/lib/fidl_base" ]
  public_configs = [ ":cpp_base.headers" ]
  stable = true
  visibility = [ "*" ]
  public_deps = [
    "//sdk/lib/fidl/cpp/wire",
    "//sdk/lib/stdcompat",
    "//zircon/system/ulib/zx",
  ]
}
if (is_fuchsia) {
  sdk_source_set("cpp") {
    sources = [
      "any_error_in.cc",
      "internal/natural_message_encoder.cc",
    ]
    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",
    ]
    sdk_area = "FIDL"
    build_as_static = true
    category = "partner"
    sdk_name = "fidl_cpp_v2"
    stable = true
    visibility = [ "*" ]
    public_deps = [
      ":cpp_base",
      "//sdk/lib/async",
      "//sdk/lib/fidl_base",
    ]
  }
}
sdk_source_set("hlcpp_conversion") {
  public = [ "include/lib/fidl/cpp/hlcpp_conversion.h" ]
  sdk_area = "FIDL"
  category = "partner"
  sdk_name = "fidl_cpp_hlcpp_conversion"
  public_configs = [ ":cpp_base.headers" ]
  stable = true
  visibility = [ "*" ]
  public_deps = [ ":cpp_base" ]
}
sdk_source_set("natural_ostream") {
  public = [ "include/lib/fidl/cpp/natural_ostream.h" ]
  sdk_area = "FIDL"
  category = "partner"
  sdk_name = "fidl_cpp_natural_ostream"
  public_configs = [ ":cpp_base.headers" ]
  stable = true
  visibility = [ "*" ]
  public_deps = [ ":cpp_base" ]
}
