# Copyright 2023 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_module_config(pw_log_rpc_CONFIG)

pw_add_library(pw_log_rpc.config INTERFACE
  HEADERS
    public/pw_log_rpc/internal/config.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    ${pw_log_rpc_CONFIG}
)

pw_add_library(pw_log_rpc.log_config INTERFACE
  HEADERS
    public/pw_log_rpc/internal/log_config.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_log_rpc.config
)

pw_add_library(pw_log_rpc.log_service STATIC
  HEADERS
    public/pw_log_rpc/log_service.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_log_rpc.rpc_log_drain
    pw_log.protos.raw_rpc
  SOURCES
    log_service.cc
  PRIVATE_DEPS
    pw_log
    pw_log.protos.pwpb
    pw_log_rpc.log_config
)

pw_add_library(pw_log_rpc.log_filter_service STATIC
  HEADERS
    public/pw_log_rpc/log_filter_service.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_log.protos.raw_rpc
    pw_log_rpc.log_filter
    pw_protobuf.bytes_utils
  SOURCES
    log_filter_service.cc
  PRIVATE_DEPS
    pw_log
    pw_log.protos.pwpb
    pw_protobuf
)

pw_add_library(pw_log_rpc.log_filter STATIC
  HEADERS
    public/pw_log_rpc/log_filter.h
    public/pw_log_rpc/log_filter_map.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_assert
    pw_bytes
    pw_containers.vector
    pw_log.protos.pwpb
    pw_log_rpc.config
    pw_protobuf
    pw_span
    pw_status
  SOURCES
    log_filter.cc
  PRIVATE_DEPS
    pw_log
    pw_log.protos.pwpb
)

pw_add_library(pw_log_rpc.rpc_log_drain STATIC
  HEADERS
    public/pw_log_rpc/rpc_log_drain.h
    public/pw_log_rpc/rpc_log_drain_map.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_assert
    pw_chrono.system_clock
    pw_function
    pw_log.protos.pwpb
    pw_log.protos.raw_rpc
    pw_log_rpc.config
    pw_log_rpc.log_filter
    pw_multisink
    pw_protobuf
    pw_result
    pw_span
    pw_status
    pw_sync.lock_annotations
    pw_sync.mutex
  SOURCES
    rpc_log_drain.cc
)

pw_add_library(pw_log_rpc.rpc_log_drain_thread INTERFACE
  HEADERS
    public/pw_log_rpc/rpc_log_drain_thread.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_chrono.system_clock
    pw_log_rpc.log_service
    pw_log_rpc.rpc_log_drain
    pw_multisink
    pw_result
    pw_rpc.raw.server_api
    pw_status
    pw_sync.timed_thread_notification
    pw_thread.thread
)

pw_add_library(pw_log_rpc.test_utils STATIC
  HEADERS
    pw_log_rpc_private/test_utils.h
  PUBLIC_DEPS
    pw_bytes
    pw_containers.vector
    pw_log_tokenized.metadata
    pw_protobuf
    pw_unit_test
  SOURCES
    test_utils.cc
  PRIVATE_DEPS
    pw_log
    pw_log.protos.pwpb
    pw_protobuf.bytes_utils
)

if(NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "")
  pw_add_test(pw_log_rpc.log_service_test
    SOURCES
      log_service_test.cc
    PRIVATE_DEPS
      pw_containers.vector
      pw_log
      pw_log.proto_utils
      pw_log.protos.pwpb
      pw_log_rpc.log_filter
      pw_log_rpc.log_service
      pw_log_rpc.test_utils
      pw_log_tokenized.metadata
      pw_protobuf
      pw_protobuf.bytes_utils
      pw_result
      pw_rpc.raw.test_method_context
      pw_status
    GROUPS
      modules
      pw_log_rpc
  )
endif()

pw_add_test(pw_log_rpc.log_filter_service_test
  SOURCES
    log_filter_service_test.cc
  PRIVATE_DEPS
    pw_log.protos.pwpb
    pw_log_rpc.log_filter
    pw_log_rpc.log_filter_service
    pw_protobuf
    pw_protobuf.bytes_utils
    pw_result
    pw_rpc.raw.test_method_context
    pw_status
  GROUPS
    modules
    pw_log_rpc
)

pw_add_test(pw_log_rpc.log_filter_test
  SOURCES
    log_filter_test.cc
  PRIVATE_DEPS
    pw_log
    pw_log.proto_utils
    pw_log.protos.pwpb
    pw_log_rpc.log_filter
    pw_log_tokenized.metadata
    pw_result
    pw_status
  GROUPS
    modules
    pw_log_rpc
)

if(NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "")
  pw_add_test(pw_log_rpc.rpc_log_drain_test
    SOURCES
      rpc_log_drain_test.cc
    PRIVATE_DEPS
      pw_bytes
      pw_log.proto_utils
      pw_log.protos.pwpb
      pw_log_rpc.log_filter
      pw_log_rpc.log_service
      pw_log_rpc.rpc_log_drain
      pw_log_rpc.test_utils
      pw_log_tokenized.metadata
      pw_multisink
      pw_protobuf
      pw_rpc.common
      pw_rpc.raw.fake_channel_output
      pw_rpc.raw.server_api
      pw_rpc.raw.test_method_context
      pw_status
      pw_sync.mutex
    GROUPS
      modules
      pw_log_rpc
  )
endif()
