# Copyright (c) 2020 Project CHIP 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
#
# http://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.

import("//build_overrides/pigweed.gni")

import("$dir_pw_build/target_types.gni")
import("pigweed_rpcs.gni")

config("default_config") {
  include_dirs = [
    ".",
    "..",
  ]
}

if (chip_enable_pw_rpc) {
  import("//build_overrides/pigweed.gni")
  import("$dir_pw_protobuf_compiler/proto.gni")

  pw_proto_library("echo_service") {
    sources = [ "$dir_pw_rpc/echo.proto" ]
    inputs = [ "$dir_pw_rpc/echo.options" ]
    deps = [ "$dir_pw_protobuf:common_protos" ]
    strip_prefix = "$dir_pw_rpc"
    prefix = "echo_service"
  }

  pw_proto_library("attributes_service") {
    sources = [ "protos/attributes_service.proto" ]
    inputs = [ "protos/attributes_service.options" ]
    deps = [ "$dir_pw_protobuf:common_protos" ]
    strip_prefix = "protos"
    prefix = "attributes_service"
  }

  pw_proto_library("device_service") {
    sources = [ "protos/device_service.proto" ]
    inputs = [ "protos/device_service.options" ]
    deps = [ "$dir_pw_protobuf:common_protos" ]
    strip_prefix = "protos"
    prefix = "device_service"
  }

  pw_proto_library("descriptor_service") {
    sources = [ "protos/descriptor_service.proto" ]
    deps = [ "$dir_pw_protobuf:common_protos" ]
    strip_prefix = "protos"
    prefix = "descriptor_service"
  }

  pw_proto_library("button_service") {
    sources = [ "protos/button_service.proto" ]
    deps = [ "$dir_pw_protobuf:common_protos" ]
    strip_prefix = "protos"
    prefix = "button_service"
  }

  pw_proto_library("lighting_service") {
    sources = [ "protos/lighting_service.proto" ]
    deps = [ "$dir_pw_protobuf:common_protos" ]
    strip_prefix = "protos"
    prefix = "lighting_service"
  }

  pw_proto_library("locking_service") {
    sources = [ "protos/locking_service.proto" ]
    deps = [ "$dir_pw_protobuf:common_protos" ]
    strip_prefix = "protos"
    prefix = "locking_service"
  }

  pw_proto_library("ot_cli_service") {
    sources = [ "protos/ot_cli_service.proto" ]
    inputs = [ "protos/ot_cli_service.options" ]
    deps = [ "$dir_pw_protobuf:common_protos" ]
    strip_prefix = "protos"
    prefix = "ot_cli_service"
  }

  pw_proto_library("thread_service") {
    sources = [ "protos/thread_service.proto" ]
    inputs = [ "protos/thread_service.options" ]
    deps = [ "$dir_pw_protobuf:common_protos" ]
    strip_prefix = "protos"
    prefix = "thread_service"
  }

  pw_proto_library("wifi_service") {
    sources = [ "protos/wifi_service.proto" ]
    deps = [ "$dir_pw_protobuf:common_protos" ]
    strip_prefix = "protos"
    prefix = "wifi_service"
  }
}

pw_source_set("rpc_services") {
  public_configs = [ ":default_config" ]
}

pw_source_set("system_rpc_server") {
  sources = [ "system_rpc_server.cc" ]

  deps = [
    "$dir_pw_rpc/system_server:facade",
    dir_pw_log,
  ]

  public_deps = [
    "$dir_pw_hdlc:pw_rpc",
    "$dir_pw_hdlc:rpc_channel_output",
    "$dir_pw_stream:sys_io_stream",
  ]

  public_configs = [ ":default_config" ]
}
