blob: 9a3478c20c10685f9131da85a47406809671171e [file] [log] [blame]
Alexei Frolov26e3ae62020-05-04 17:06:17 -07001# Copyright 2020 The Pigweed Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4# use this file except in compliance with the License. You may obtain a copy of
5# the License at
6#
7# https://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations under
13# the License.
14
Armando Montanezfb3d3fb2020-06-09 18:12:12 -070015# gn-format disable
16import("//build_overrides/pigweed.gni")
17
Alexei Frolovedd2f142020-06-09 19:11:27 -070018import("$dir_pw_build/target_types.gni")
Alexei Frolov26e3ae62020-05-04 17:06:17 -070019import("$dir_pw_docgen/docs.gni")
Alexei Frolov5d6d3922020-05-08 13:57:02 -070020import("$dir_pw_protobuf_compiler/proto.gni")
Alexei Frolov26e3ae62020-05-04 17:06:17 -070021import("$dir_pw_unit_test/test.gni")
Alexei Frolov26e3ae62020-05-04 17:06:17 -070022config("default_config") {
23 include_dirs = [ "public" ]
Wyatt Hepler80f26ff2020-06-01 09:30:17 -070024 visibility = [ ":*" ]
Alexei Frolov26e3ae62020-05-04 17:06:17 -070025}
26
Wyatt Heplercbd09c22020-09-15 11:17:24 -070027pw_source_set("server") {
Alexei Frolov26e3ae62020-05-04 17:06:17 -070028 public_configs = [ ":default_config" ]
29 public_deps = [
Wyatt Hepler80f26ff2020-06-01 09:30:17 -070030 ":protos_pwpb",
Wyatt Heplerd1591422020-09-15 10:04:41 -070031 "$dir_pw_containers:intrusive_list",
Alexei Frolov26e3ae62020-05-04 17:06:17 -070032 dir_pw_assert,
33 dir_pw_span,
Alexei Frolov5d6d3922020-05-08 13:57:02 -070034 dir_pw_status,
Alexei Frolov26e3ae62020-05-04 17:06:17 -070035 ]
Wyatt Heplercbd09c22020-09-15 11:17:24 -070036 deps = [ dir_pw_log ]
Wyatt Heplerd1591422020-09-15 10:04:41 -070037 public = [
38 "public/pw_rpc/channel.h",
Wyatt Heplercbd09c22020-09-15 11:17:24 -070039 "public/pw_rpc/server.h",
40 "public/pw_rpc/server_context.h",
Wyatt Heplerd1591422020-09-15 10:04:41 -070041 "public/pw_rpc/service.h",
42 ]
Alexei Frolov5d6d3922020-05-08 13:57:02 -070043 sources = [
Wyatt Heplercbd09c22020-09-15 11:17:24 -070044 "base_server_writer.cc",
Alexei Frolov5d6d3922020-05-08 13:57:02 -070045 "channel.cc",
46 "packet.cc",
Wyatt Heplercbd09c22020-09-15 11:17:24 -070047 "public/pw_rpc/internal/base_server_writer.h",
Wyatt Hepler7da973a2020-06-09 10:04:48 -070048 "public/pw_rpc/internal/call.h",
Wyatt Hepler671946e2020-06-09 14:39:33 -070049 "public/pw_rpc/internal/channel.h",
Wyatt Hepler1532e522020-07-30 11:44:58 -070050 "public/pw_rpc/internal/hash.h",
Wyatt Heplercbd09c22020-09-15 11:17:24 -070051 "public/pw_rpc/internal/method.h",
Alexei Frolov5d6d3922020-05-08 13:57:02 -070052 "public/pw_rpc/internal/packet.h",
Wyatt Heplercbd09c22020-09-15 11:17:24 -070053 "public/pw_rpc/internal/server.h",
54 "server.cc",
55 "service.cc",
Alexei Frolov5d6d3922020-05-08 13:57:02 -070056 ]
Wyatt Hepler948f5472020-06-02 16:52:28 -070057 friend = [ "./*" ]
Wyatt Hepler948f5472020-06-02 16:52:28 -070058}
59
Wyatt Heplercbd09c22020-09-15 11:17:24 -070060pw_source_set("test_utils") {
61 public = [
62 "public/pw_rpc/internal/test_method.h",
63 "pw_rpc_private/internal_test_utils.h",
64 ]
65 public_configs = [ ":private_includes" ]
66 public_deps = [
67 ":server",
68 dir_pw_span,
69 ]
70 visibility = [ "./*" ]
71}
72
73# Provides the public RPC service definition (but not implementation). Can be
74# used to expose global service registration without depending on the complete
75# RPC library.
76# TODO(hepler): Remove this unnecessary alias.
77group("service") {
78 deps = [ ":server" ]
79}
80
Wyatt Hepler948f5472020-06-02 16:52:28 -070081# RPC server that uses Nanopb to encode and decode protobufs. RPCs use Nanopb
82# structs as their requests and responses.
Wyatt Heplercbd09c22020-09-15 11:17:24 -070083# TODO(hepler): Remove this unnecessary alias.
84group("nanopb_server") {
85 deps = [ ":server" ]
Wyatt Hepler948f5472020-06-02 16:52:28 -070086}
87
88config("private_includes") {
89 include_dirs = [ "." ]
Wyatt Hepler7da973a2020-06-09 10:04:48 -070090 visibility = [ ":*" ]
Wyatt Heplercb9d9572020-06-01 11:25:58 -070091}
92
Alexei Frolov5d6d3922020-05-08 13:57:02 -070093pw_proto_library("protos") {
94 sources = [ "pw_rpc_protos/packet.proto" ]
Alexei Frolov26e3ae62020-05-04 17:06:17 -070095}
96
Alexei Frolov7c7a3862020-07-16 15:36:02 -070097pw_proto_library("echo_service_proto") {
98 sources = [ "pw_rpc_protos/echo.proto" ]
99 inputs = [ "pw_rpc_protos/echo.options" ]
100}
101
Alexei Frolov79b7cb02020-07-06 13:51:43 -0700102# Source files for pw_protobuf's protoc plugin.
103pw_input_group("nanopb_protoc_plugin") {
104 inputs = [
105 "py/pw_rpc/codegen_nanopb.py",
106 "py/pw_rpc/plugin.py",
107 "py/pw_rpc/ids.py",
108 ]
Alexei Frolov15255c52020-07-17 08:25:49 -0700109 deps = [ "$dir_pw_protobuf:codegen_protoc_lib" ]
Alexei Frolov79b7cb02020-07-06 13:51:43 -0700110}
111
Alexei Frolov26e3ae62020-05-04 17:06:17 -0700112pw_doc_group("docs") {
113 sources = [ "docs.rst" ]
Alexei Frolov7c7a3862020-07-16 15:36:02 -0700114 inputs = [
115 "pw_rpc_protos/echo.proto",
116 "pw_rpc_protos/packet.proto",
117 ]
118 group_deps = [ "nanopb:docs" ]
Alexei Frolov26e3ae62020-05-04 17:06:17 -0700119}
120
121pw_test_group("tests") {
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700122 tests = [
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700123 ":base_server_writer_test",
Wyatt Hepler671946e2020-06-09 14:39:33 -0700124 ":channel_test",
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700125 ":packet_test",
126 ":server_test",
Wyatt Heplerd1591422020-09-15 10:04:41 -0700127 ":service_test",
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700128 ]
Wyatt Hepleraf835682020-06-17 11:42:53 -0700129 group_deps = [ "nanopb:tests" ]
Alexei Frolov26e3ae62020-05-04 17:06:17 -0700130}
131
Wyatt Hepler948f5472020-06-02 16:52:28 -0700132pw_proto_library("test_protos") {
133 sources = [ "pw_rpc_test_protos/test.proto" ]
134 visibility = [ "./*" ]
Alexei Frolov26e3ae62020-05-04 17:06:17 -0700135}
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700136
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700137pw_test("base_server_writer_test") {
138 deps = [
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700139 ":server",
140 ":test_utils",
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700141 ]
142 sources = [ "base_server_writer_test.cc" ]
143}
144
Wyatt Hepler671946e2020-06-09 14:39:33 -0700145pw_test("channel_test") {
146 deps = [
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700147 ":server",
148 ":test_utils",
Wyatt Hepler671946e2020-06-09 14:39:33 -0700149 ]
150 sources = [ "channel_test.cc" ]
151}
152
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700153pw_test("hash_test") {
154 deps = [ ":server" ]
155 sources = [ "hash_test.cc" ]
156}
157
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700158pw_test("packet_test") {
159 deps = [
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700160 ":server",
Wyatt Hepler0f262352020-07-29 09:51:27 -0700161 dir_pw_bytes,
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700162 dir_pw_protobuf,
163 ]
164 sources = [ "packet_test.cc" ]
165}
Wyatt Hepler80f26ff2020-06-01 09:30:17 -0700166
Wyatt Heplerd1591422020-09-15 10:04:41 -0700167pw_test("service_test") {
168 deps = [
Wyatt Heplerd1591422020-09-15 10:04:41 -0700169 ":protos_pwpb",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700170 ":server",
Wyatt Heplerd1591422020-09-15 10:04:41 -0700171 dir_pw_assert,
172 ]
173 sources = [ "service_test.cc" ]
174}
175
Wyatt Hepler80f26ff2020-06-01 09:30:17 -0700176pw_test("server_test") {
177 deps = [
178 ":protos_pwpb",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700179 ":server",
180 ":test_utils",
Wyatt Hepler80f26ff2020-06-01 09:30:17 -0700181 dir_pw_assert,
182 ]
183 sources = [ "server_test.cc" ]
184}