# Copyright 2018 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/cpp/sdk_source_set.gni")
import("//build/fidl/fidl.gni")
import("//build/test.gni")
import("//sdk/ctf/build/ctf.gni")
import("//tools/fidl/gidl/gidl.gni")

# Limit visibility for the HLCPP bindings libraries:
hlcpp_visibility = [
  "//build/sdk:*",
  "//examples/components/routing/fidl:*",
  "//examples/components/services/fidl:*",
  "//examples/diagnostics/inspect/codelab/fidl:*",
  "//examples/fidl/fuchsia.examples:*",
  "//examples/intl/wisdom/fidl:*",
  "//sdk:*",
  "//sdk/ctf/tests/examples/fidl/fuchsia.examples/testing/fidl:*",
  "//sdk/ctf/tests/fidl/fuchsia.element/testing/fidl:*",
  "//sdk/ctf/tests/fidl/fuchsia.settings/testing/fidl:*",
  "//sdk/ctf/tests/pkg/fidl/cpp:*",
  "//sdk/ctf/tests/pkg/fidl/cpp:*",
  "//sdk/fidl/*",
  "//sdk/lib/component/tests:*",
  "//sdk/lib/driver/power/cpp/testing:*",
  "//sdk/lib/fidl/cpp/tests/hlcpp_conversion/fidl:*",
  "//sdk/lib/fidl/hlcpp:*",
  "//sdk/lib/fuzzing/cpp:*",
  "//sdk/testing/fidl:*",
  "//sdk/testing/fidl:*",
  "//sdk/testing/fidl/protocols_tests:*",
  "//sdk/testing/fidl/types_tests:*",
  "//src/camera/bin/camera-gym/fidl:*",
  "//src/camera/bin/device_watcher:*",
  "//src/camera/bin/factory:*",
  "//src/camera/bin/virtual_camera:*",
  "//src/connectivity/bluetooth/lib/fidl:*",
  "//src/connectivity/ethernet/drivers/asix-88179:*",
  "//src/connectivity/network/testing/netemul/network-context/fidl:*",
  "//src/connectivity/network/testing/netemul/sync-manager/fidl:*",
  "//src/developer/forensics/exceptions/fidl:*",
  "//src/developer/forensics/public/fakes:*",
  "//src/diagnostics/validator/inspect/fidl:*",
  "//src/diagnostics/validator/logs/fidl:*",
  "//src/lib/fake-clock/fidl:*",
  "//src/lib/fake-clock/named-timer:*",
  "//src/lib/fidl_codec:*",
  "//src/lib/fidl/c/coding_tables_tests:*",
  "//src/lib/fidl/c/walker_tests:*",
  "//src/lib/fostr:*",
  "//src/lib/fostr/test/fuchsia.example.fostr:*",
  "//src/lib/fostr/test/fuchsia.example.fostr2:*",
  "//src/lib/fsl/types:*",
  "//src/lib/intl/examples:*",
  "//src/lib/intl/intl_property_provider_impl:*",
  "//src/lib/intl/lookup/rust:*",
  "//src/lib/ui/input-synthesis:*",
  "//src/power/fidl/testing:*",
  "//src/sys/component_manager/tests/structured_config/fidl:*",
  "//src/sys/fuzzing/fidl:*",
  "//src/sys/fuzzing/libfuzzer/testing:*",
  "//src/sys/test_manager/fidl/fuchsia.test.debug:*",
  "//src/testing/fidl:*",
  "//src/tests/benchmarks/fidl/benchmark_suite:*",
  "//src/tests/fidl/compatibility/fidl:*",
  "//src/tests/fidl/conformance_suite:*",
  "//src/tests/fidl/dangerous_identifiers:*",
  "//src/tests/fidl/dynsuite/client_suite/fidl:*",
  "//src/tests/fidl/dynsuite/server_suite/fidl:*",
  "//src/tests/microbenchmarks:*",
  "//src/ui/a11y/lib/screen_reader/i18n:*",
  "//src/ui/a11y/lib/semantics/util:*",
  "//src/ui/a11y/testing/fidl:*",
  "//tools/fidl/measure-tape/testdata:*",
  "//tools/fidl/fidlc/testdata/*",
  "//vendor/*",
]

# The complete high-level C++ bindings library supporting both asynchronous
# and synchronous APIs.
sdk_source_set("hlcpp") {
  category = "partner"

  sdk_name = "fidl_cpp"

  sources = [
    "include/lib/fidl/cpp/binding.h",
    "include/lib/fidl/cpp/binding_set.h",
    "include/lib/fidl/cpp/event_sender.h",
    "include/lib/fidl/cpp/interface_ptr.h",
    "include/lib/fidl/cpp/interface_ptr_set.h",
    "include/lib/fidl/cpp/internal/header.h",
    "include/lib/fidl/cpp/internal/implementation.h",
    "include/lib/fidl/cpp/internal/message_handler.h",
    "include/lib/fidl/cpp/internal/message_reader.h",
    "include/lib/fidl/cpp/internal/pending_response.h",
    "include/lib/fidl/cpp/internal/proxy.h",
    "include/lib/fidl/cpp/internal/proxy_controller.h",
    "include/lib/fidl/cpp/internal/stub.h",
    "include/lib/fidl/cpp/internal/stub_controller.h",
    "include/lib/fidl/cpp/internal/unknown_interactions_table.h",
    "include/lib/fidl/cpp/internal/weak_stub_controller.h",
    "include/lib/fidl/cpp/member_connector.h",
    "include/lib/fidl/cpp/service_connector.h",
    "include/lib/fidl/cpp/service_handler_base.h",
    "include/lib/fidl/cpp/type_converter.h",
    "include/lib/fidl/cpp/unknown_interactions_hlcpp.h",
    "internal/message_handler.cc",
    "internal/message_reader.cc",
    "internal/pending_response.cc",
    "internal/proxy.cc",
    "internal/proxy_controller.cc",
    "internal/stub.cc",
    "internal/stub_controller.cc",
    "internal/unknown_interactions_table.c",
    "internal/weak_stub_controller.cc",
    "unknown_interactions_hlcpp.cc",
  ]

  stable = true

  public_deps = [
    ":hlcpp_sync",
    "//sdk/lib/async",
    "//sdk/lib/async-default",
    "//sdk/lib/fidl",
    "//sdk/lib/fit",
    "//sdk/lib/fit-promise",
    "//zircon/system/ulib/zx",
  ]

  public_configs = [ "//sdk/config" ]

  visibility = hlcpp_visibility
}

# The synchronous high-level C++ bindings library.
sdk_source_set("hlcpp_sync") {
  category = "partner"

  sdk_name = "fidl_cpp_sync"
  stable = true

  sources = [
    "include/lib/fidl/cpp/internal/logging.h",
    "include/lib/fidl/cpp/internal/message_sender.h",
    "include/lib/fidl/cpp/internal/synchronous_proxy.h",
    "include/lib/fidl/cpp/synchronous_interface_ptr.h",
    "internal/logging.cc",
    "internal/message_sender.cc",
    "internal/synchronous_proxy.cc",
  ]

  public_configs = [ "//sdk/config" ]

  public_deps = [
    ":hlcpp_base",
    "//sdk/lib/fidl",
    "//sdk/lib/fit",
    "//zircon/system/ulib/zx",
  ]

  visibility = [
    ":*",
    "//build/sdk:*",
    "//src/tests/fidl/dynsuite/client_suite/*",
  ]
}

# The base library used to implement the natural domain-object types.
# It should not contain message dispatching functionality.
sdk_source_set("hlcpp_base") {
  category = "partner"

  sdk_name = "fidl_cpp_base"
  stable = true

  sources = [
    "clone.cc",
    "decoder.cc",
    "encoder.cc",
    "include/lib/fidl/cpp/clone.h",
    "include/lib/fidl/cpp/coding_traits.h",
    "include/lib/fidl/cpp/comparison.h",
    "include/lib/fidl/cpp/decoder.h",
    "include/lib/fidl/cpp/encoder.h",
    "include/lib/fidl/cpp/enum.h",
    "include/lib/fidl/cpp/internal/bitset.h",
    "include/lib/fidl/cpp/internal/natural_types_header.h",
    "include/lib/fidl/cpp/internal/natural_types_implementation.h",
    "include/lib/fidl/cpp/message.h",
    "include/lib/fidl/cpp/message_buffer.h",
    "include/lib/fidl/cpp/message_part.h",
    "include/lib/fidl/cpp/string.h",
    "include/lib/fidl/cpp/traits.h",
    "include/lib/fidl/cpp/types.h",
    "include/lib/fidl/cpp/vector.h",
    "message.cc",
    "message_buffer.cc",
  ]

  public_configs = [
    "//sdk/config",
    ":config",
  ]

  public_deps = [
    "//sdk/lib/fidl_base",
    "//sdk/lib/fit",
    "//sdk/lib/fit-promise",
  ]

  if (is_fuchsia) {
    sources += [
      "include/lib/fidl/cpp/interface_handle.h",
      "include/lib/fidl/cpp/interface_request.h",
    ]
    public_deps += [
      "//sdk/lib/fidl",
      "//zircon/system/ulib/zx",
    ]
  }

  visibility = [ ":*" ] + hlcpp_visibility
}

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