# Copyright 2022 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

include($ENV{PW_ROOT}/pw_build/pigweed.cmake)

pw_add_library(pw_rpc.pwpb.server_api STATIC
  HEADERS
    public/pw_rpc/pwpb/internal/method.h
    public/pw_rpc/pwpb/internal/method_union.h
    public/pw_rpc/pwpb/server_reader_writer.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_bytes
    pw_rpc.config
    pw_rpc.pwpb.common
    pw_rpc.raw.server_api
    pw_rpc.server
  SOURCES
    server_reader_writer.cc
  PRIVATE_DEPS
    pw_log
    pw_rpc.log_config
)

pw_add_library(pw_rpc.pwpb.client_api INTERFACE
  HEADERS
    public/pw_rpc/pwpb/client_reader_writer.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_function
    pw_rpc.pwpb.common
    pw_rpc.common
)

pw_add_library(pw_rpc.pwpb.common INTERFACE
  HEADERS
    public/pw_rpc/pwpb/internal/common.h
    public/pw_rpc/pwpb/serde.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_assert.assert
    pw_bytes
    pw_log
    pw_protobuf
    pw_rpc.client
    pw_rpc.common
    pw_rpc.log_config
    pw_rpc.server
    pw_span
    pw_status
)

pw_add_library(pw_rpc.pwpb.test_method_context INTERFACE
  HEADERS
    public/pw_rpc/pwpb/fake_channel_output.h
    public/pw_rpc/pwpb/test_method_context.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_assert
    pw_containers
    pw_rpc.pwpb.server_api
    pw_rpc.test_utils
    pw_span
)

pw_add_library(pw_rpc.pwpb.client_testing INTERFACE
  HEADERS
    public/pw_rpc/pwpb/client_testing.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_rpc.client
    pw_rpc.pwpb.test_method_context
    pw_rpc.raw.client_testing
)

pw_add_library(pw_rpc.pwpb.client_server_testing INTERFACE
  HEADERS
    public/pw_rpc/pwpb/client_server_testing.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_rpc.pwpb.test_method_context
    pw_rpc.client_server_testing
)

pw_add_library(pw_rpc.pwpb.client_server_testing_threaded INTERFACE
  HEADERS
    public/pw_rpc/pwpb/client_server_testing_threaded.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_rpc.pwpb.test_method_context
    pw_rpc.client_server_testing_threaded
)

pw_add_library(pw_rpc.pwpb.internal_test_utils INTERFACE
  HEADERS
    pw_rpc_pwpb_private/internal_test_utils.h
  PUBLIC_DEPS
    pw_status
    pw_stream
)

pw_add_library(pw_rpc.pwpb.echo_service INTERFACE
  HEADERS
    public/pw_rpc/echo_service_pwpb.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_rpc.protos.pwpb_rpc
)

pw_add_library(pw_rpc.pwpb.client_integration_test STATIC
  SOURCES
    client_integration_test.cc
  PRIVATE_DEPS
    pw_assert
    pw_rpc.integration_testing
    pw_rpc.protos.pwpb_rpc
    pw_sync.binary_semaphore
    pw_unit_test
)

pw_add_test(pw_rpc.pwpb.client_call_test
  SOURCES
    client_call_test.cc
  PRIVATE_DEPS
    pw_rpc.pwpb.client_api
    pw_rpc.pwpb.internal_test_utils
    pw_rpc.test_protos.pwpb
    pw_rpc.test_utils
  GROUPS
    modules
    pw_rpc.pwpb
)

pw_add_test(pw_rpc.pwpb.client_reader_writer_test
  SOURCES
    client_reader_writer_test.cc
  PRIVATE_DEPS
    pw_rpc.pwpb.client_api
    pw_rpc.pwpb.client_testing
    pw_rpc.test_protos.pwpb_rpc
  GROUPS
    modules
    pw_rpc.pwpb
)

if(NOT "${pw_sync.mutex_BACKEND}" STREQUAL "")
  pw_add_test(pw_rpc.pwpb.client_server_context_test
    SOURCES
      client_server_context_test.cc
    PRIVATE_DEPS
      pw_rpc.pwpb.client_api
      pw_rpc.pwpb.client_server_testing
      pw_rpc.test_protos.pwpb_rpc
      pw_sync.mutex
    GROUPS
      modules
      pw_rpc.pwpb
  )
endif()

if(("${pw_thread.thread_BACKEND}" STREQUAL "pw_thread_stl.thread") AND
   (NOT "${pw_sync.binary_semaphore_BACKEND}" STREQUAL "") AND
   (NOT "${pw_sync.mutex_BACKEND}" STREQUAL ""))
  pw_add_test(pw_rpc.pwpb.client_server_context_threaded_test
    SOURCES
      client_server_context_threaded_test.cc
    PRIVATE_DEPS
      pw_rpc.pwpb.client_api
      pw_rpc.pwpb.client_server_testing_threaded
      pw_rpc.test_protos.pwpb_rpc
      pw_sync.binary_semaphore
      pw_sync.mutex
      pw_thread.non_portable_test_thread_options
      pw_thread.thread
      pw_thread_stl.test_threads
    GROUPS
      modules
      pw_rpc.pwpb
  )
endif()

pw_add_test(pw_rpc.pwpb.codegen_test
  SOURCES
    codegen_test.cc
  PRIVATE_DEPS
    pw_rpc.pwpb.client_api
    pw_rpc.pwpb.internal_test_utils
    pw_rpc.pwpb.server_api
    pw_rpc.pwpb.test_method_context
    pw_rpc.test_protos.pwpb_rpc
    pw_rpc.test_utils
  GROUPS
    modules
    pw_rpc.pwpb
)

pw_add_test(pw_rpc.pwpb.echo_service_test
  SOURCES
    echo_service_test.cc
  PRIVATE_DEPS
    pw_rpc.pwpb.echo_service
    pw_rpc.pwpb.server_api
    pw_rpc.pwpb.test_method_context
  GROUPS
    modules
    pw_rpc.pwpb
)

pw_add_test(pw_rpc.pwpb.fake_channel_output_test
  SOURCES
    fake_channel_output_test.cc
  PRIVATE_DEPS
    pw_rpc.pwpb.server_api
    pw_rpc.pwpb.test_method_context
    pw_rpc.test_protos.pwpb_rpc
  GROUPS
    modules
    pw_rpc.pwpb
)

pw_add_test(pw_rpc.pwpb.method_test
  SOURCES
    method_test.cc
  PRIVATE_DEPS
    pw_containers
    pw_rpc.pwpb.internal_test_utils
    pw_rpc.pwpb.server_api
    pw_rpc.test_protos.pwpb
    pw_rpc.test_utils
  GROUPS
    modules
    pw_rpc.pwpb
)

pw_add_test(pw_rpc.pwpb.method_info_test
  SOURCES
    method_info_test.cc
  PRIVATE_DEPS
    pw_rpc.common
    pw_rpc.test_protos.pwpb_rpc
    pw_rpc.test_utils
  GROUPS
    modules
    pw_rpc.pwpb
)

pw_add_test(pw_rpc.pwpb.method_lookup_test
  SOURCES
    method_lookup_test.cc
  PRIVATE_DEPS
    pw_rpc.pwpb.server_api
    pw_rpc.pwpb.test_method_context
    pw_rpc.raw.test_method_context
    pw_rpc.test_protos.pwpb_rpc
    pw_rpc.test_utils
  GROUPS
    modules
    pw_rpc.pwpb
)

pw_add_test(pw_rpc.pwpb.method_union_test
  SOURCES
    method_union_test.cc
  PRIVATE_DEPS
    pw_rpc.pwpb.internal_test_utils
    pw_rpc.pwpb.server_api
    pw_rpc.test_protos.pwpb
    pw_rpc.test_utils
  GROUPS
    modules
    pw_rpc.pwpb
)

pw_add_test(pw_rpc.pwpb.serde_test
  SOURCES
    serde_test.cc
  PRIVATE_DEPS
    pw_rpc.pwpb.server_api
    pw_rpc.test_protos.pwpb
  GROUPS
    modules
    pw_rpc.pwpb
)

pw_add_test(pw_rpc.pwpb.server_callback_test
  SOURCES
    server_callback_test.cc
  PRIVATE_DEPS
    pw_rpc.pwpb.server_api
    pw_rpc.pwpb.test_method_context
    pw_rpc.test_protos.pwpb_rpc
  GROUPS
    modules
    pw_rpc.pwpb
)

pw_add_test(pw_rpc.pwpb.server_reader_writer_test
  SOURCES
    server_reader_writer_test.cc
  PRIVATE_DEPS
    pw_rpc.pwpb.server_api
    pw_rpc.pwpb.test_method_context
    pw_rpc.test_protos.pwpb_rpc
  GROUPS
    modules
    pw_rpc.pwpb
)

pw_add_test(pw_rpc.pwpb.stub_generation_test
  SOURCES
    stub_generation_test.cc
  PRIVATE_DEPS
    pw_rpc.test_protos.pwpb_rpc
  GROUPS
    modules
    pw_rpc.pwpb
)

# TODO: b/231950909 - Test disabled as pw_work_queue lacks CMakeLists.txt
if((TARGET pw_work_queue.pw_work_queue) AND
   ("${pw_thread.thread_BACKEND}" STREQUAL "pw_thread_stl.thread") AND
   (NOT "${pw_sync.timed_thread_notification_BACKEND}" STREQUAL
   "pw_sync.timed_thread_notification.NO_BACKEND_SET"))
  pw_add_test(pw_rpc.pwpb.synchronous_call_test
    SOURCES
      synchronous_call_test.cc
    PRIVATE_DEPS
      pw_rpc.pwpb.test_method_context
      pw_rpc.synchronous_client_api
      pw_rpc.test_protos.pwpb_rpc
      pw_rpc_transport.test_loopback_service_registry
      pw_thread.thread
      pw_work_queue.pw_work_queue
      pw_work_queue.stl_test_thread
      pw_work_queue.test_thread
    GROUPS
      modules
      pw_rpc.pwpb
  )
endif()
