# Copyright 2020 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.

# gn-format disable
import("//build_overrides/pigweed.gni")

import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_protobuf_compiler/proto.gni")
import("$dir_pw_unit_test/test.gni")
config("default_config") {
  include_dirs = [ "public" ]
  visibility = [ ":*" ]
}

# pw_rpc servers depend on the protobuf library used to encode and decode
# requests and responses when invoking methods. This template is used to create
# instances of the pw_rpc server library with different implementations.
#
# The implementation parameter must refer to a library that provides the
# definition of the Method class in pw_rpc/internal/method.h. The Method class
# provides the Invoke function, which handles the server use to call into the
# RPC functions themselves.
template("_pw_rpc_server_library") {
  assert(defined(invoker.implementation),
         "_pw_rpc_server_library requires an implementation to be set")
  _target_name = target_name

  pw_source_set(_target_name) {
    forward_variables_from(invoker, "*")

    public_deps = [
      ":server_library_deps",
      implementation,
    ]
    deps = [
      dir_pw_assert,
      dir_pw_log,
    ]
    public = [
      "public/pw_rpc/server.h",
      "public/pw_rpc/server_context.h",
    ]
    sources = [
      "base_server_writer.cc",
      "public/pw_rpc/internal/base_server_writer.h",
      "public/pw_rpc/internal/server.h",
      "server.cc",
      "service.cc",
    ]
    allow_circular_includes_from = [ implementation ]
    friend = [ "./*" ]
  }

  pw_source_set("internal_test_utils_$_target_name") {
    public = [ "pw_rpc_private/internal_test_utils.h" ]
    public_configs = [ ":private_includes" ]
    public_deps = [
      ":$_target_name",
      ":common",
      dir_pw_span,
      dir_pw_unit_test,
    ]
    visibility = [ "./*" ]
  }
}

# Provides the public RPC service definition (but not implementation). Can be
# used to expose global service registration without depending on the complete
# RPC library.
pw_source_set("service") {
  public_configs = [ ":default_config" ]
  public_deps = [ "$dir_pw_containers:intrusive_list" ]
  public = [ "public/pw_rpc/service.h" ]
}

# Put these dependencies into a group since they need to be shared by the server
# library and its implementation library.
group("server_library_deps") {
  public_configs = [ ":default_config" ]
  public_deps = [
    ":common",
    ":service",
    dir_pw_span,
    dir_pw_status,
  ]
  visibility = [ "./*" ]
}

# Classes with no dependencies on the protobuf library for method invocations.
pw_source_set("common") {
  public_configs = [ ":default_config" ]
  public_deps = [
    ":protos_pwpb",
    dir_pw_assert,
    dir_pw_log,
    dir_pw_span,
    dir_pw_status,
  ]
  public = [ "public/pw_rpc/channel.h" ]
  sources = [
    "channel.cc",
    "packet.cc",
    "public/pw_rpc/internal/base_method.h",
    "public/pw_rpc/internal/call.h",
    "public/pw_rpc/internal/channel.h",
    "public/pw_rpc/internal/hash.h",
    "public/pw_rpc/internal/packet.h",
  ]
  friend = [ "./*" ]
}

# RPC server that uses Nanopb to encode and decode protobufs. RPCs use Nanopb
# structs as their requests and responses.
_pw_rpc_server_library("nanopb_server") {
  implementation = "nanopb"
}

config("private_includes") {
  include_dirs = [ "." ]
  visibility = [ ":*" ]
}

pw_proto_library("protos") {
  sources = [ "pw_rpc_protos/packet.proto" ]
}

pw_proto_library("echo_service_proto") {
  sources = [ "pw_rpc_protos/echo.proto" ]
  inputs = [ "pw_rpc_protos/echo.options" ]
}

# Source files for pw_protobuf's protoc plugin.
pw_input_group("nanopb_protoc_plugin") {
  inputs = [
    "py/pw_rpc/codegen_nanopb.py",
    "py/pw_rpc/plugin.py",
    "py/pw_rpc/ids.py",
  ]
  deps = [ "$dir_pw_protobuf:codegen_protoc_lib" ]
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
  inputs = [
    "pw_rpc_protos/echo.proto",
    "pw_rpc_protos/packet.proto",
  ]
  group_deps = [ "nanopb:docs" ]
}

pw_test_group("tests") {
  tests = [
    ":base_server_writer_test",
    ":channel_test",
    ":packet_test",
    ":server_test",
  ]
  group_deps = [ "nanopb:tests" ]
}

# RPC server for tests only. A mock method implementation is used.
_pw_rpc_server_library("test_server") {
  implementation = "test_impl"
  visibility = [ ":*" ]
}

pw_proto_library("test_protos") {
  sources = [ "pw_rpc_test_protos/test.proto" ]
  visibility = [ "./*" ]
}

pw_test("base_server_writer_test") {
  deps = [
    ":internal_test_utils_test_server",
    ":test_server",
  ]
  sources = [ "base_server_writer_test.cc" ]
}

pw_test("channel_test") {
  deps = [
    ":common",
    ":internal_test_utils_test_server",
  ]
  sources = [ "channel_test.cc" ]
}

pw_test("packet_test") {
  deps = [
    ":common",
    dir_pw_bytes,
    dir_pw_protobuf,
  ]
  sources = [ "packet_test.cc" ]
}

pw_test("server_test") {
  deps = [
    ":internal_test_utils_test_server",
    ":protos_pwpb",
    ":test_server",
    dir_pw_assert,
  ]
  sources = [ "server_test.cc" ]
}
