blob: fbf3a7442d4e1a9ed3522d94b9713cf1158f2607 [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 Frolovbf33d212020-09-15 17:13:45 -070018import("$dir_pw_bloat/bloat.gni")
Alexei Frolovedd2f142020-06-09 19:11:27 -070019import("$dir_pw_build/target_types.gni")
Alexei Frolov26e3ae62020-05-04 17:06:17 -070020import("$dir_pw_docgen/docs.gni")
Alexei Frolov5d6d3922020-05-08 13:57:02 -070021import("$dir_pw_protobuf_compiler/proto.gni")
Alexei Frolovbf33d212020-09-15 17:13:45 -070022import("$dir_pw_third_party/nanopb/nanopb.gni")
Alexei Frolov26e3ae62020-05-04 17:06:17 -070023import("$dir_pw_unit_test/test.gni")
Alexei Frolov26e3ae62020-05-04 17:06:17 -070024config("default_config") {
25 include_dirs = [ "public" ]
Wyatt Hepler80f26ff2020-06-01 09:30:17 -070026 visibility = [ ":*" ]
Alexei Frolov26e3ae62020-05-04 17:06:17 -070027}
28
Wyatt Heplercbd09c22020-09-15 11:17:24 -070029pw_source_set("server") {
Alexei Frolov26e3ae62020-05-04 17:06:17 -070030 public_configs = [ ":default_config" ]
31 public_deps = [
Wyatt Hepler80f26ff2020-06-01 09:30:17 -070032 ":protos_pwpb",
Wyatt Heplerd1591422020-09-15 10:04:41 -070033 "$dir_pw_containers:intrusive_list",
Alexei Frolov26e3ae62020-05-04 17:06:17 -070034 dir_pw_assert,
35 dir_pw_span,
Alexei Frolov5d6d3922020-05-08 13:57:02 -070036 dir_pw_status,
Alexei Frolov26e3ae62020-05-04 17:06:17 -070037 ]
Wyatt Heplercbd09c22020-09-15 11:17:24 -070038 deps = [ dir_pw_log ]
Wyatt Heplerd1591422020-09-15 10:04:41 -070039 public = [
40 "public/pw_rpc/channel.h",
Wyatt Heplercbd09c22020-09-15 11:17:24 -070041 "public/pw_rpc/server.h",
42 "public/pw_rpc/server_context.h",
Wyatt Heplerd1591422020-09-15 10:04:41 -070043 "public/pw_rpc/service.h",
44 ]
Alexei Frolov5d6d3922020-05-08 13:57:02 -070045 sources = [
Wyatt Heplercbd09c22020-09-15 11:17:24 -070046 "base_server_writer.cc",
Alexei Frolov5d6d3922020-05-08 13:57:02 -070047 "channel.cc",
48 "packet.cc",
Wyatt Heplercbd09c22020-09-15 11:17:24 -070049 "public/pw_rpc/internal/base_server_writer.h",
Wyatt Hepler7da973a2020-06-09 10:04:48 -070050 "public/pw_rpc/internal/call.h",
Wyatt Hepler671946e2020-06-09 14:39:33 -070051 "public/pw_rpc/internal/channel.h",
Wyatt Hepler1532e522020-07-30 11:44:58 -070052 "public/pw_rpc/internal/hash.h",
Wyatt Heplercbd09c22020-09-15 11:17:24 -070053 "public/pw_rpc/internal/method.h",
Alexei Frolov5d6d3922020-05-08 13:57:02 -070054 "public/pw_rpc/internal/packet.h",
Wyatt Heplercbd09c22020-09-15 11:17:24 -070055 "public/pw_rpc/internal/server.h",
56 "server.cc",
57 "service.cc",
Alexei Frolov5d6d3922020-05-08 13:57:02 -070058 ]
Wyatt Hepler948f5472020-06-02 16:52:28 -070059 friend = [ "./*" ]
Wyatt Hepler948f5472020-06-02 16:52:28 -070060}
61
Wyatt Heplercbd09c22020-09-15 11:17:24 -070062pw_source_set("test_utils") {
63 public = [
64 "public/pw_rpc/internal/test_method.h",
65 "pw_rpc_private/internal_test_utils.h",
66 ]
67 public_configs = [ ":private_includes" ]
68 public_deps = [
69 ":server",
70 dir_pw_span,
71 ]
72 visibility = [ "./*" ]
73}
74
75# Provides the public RPC service definition (but not implementation). Can be
76# used to expose global service registration without depending on the complete
77# RPC library.
78# TODO(hepler): Remove this unnecessary alias.
79group("service") {
80 deps = [ ":server" ]
81}
82
Wyatt Hepler948f5472020-06-02 16:52:28 -070083# RPC server that uses Nanopb to encode and decode protobufs. RPCs use Nanopb
84# structs as their requests and responses.
Wyatt Heplercbd09c22020-09-15 11:17:24 -070085# TODO(hepler): Remove this unnecessary alias.
86group("nanopb_server") {
87 deps = [ ":server" ]
Wyatt Hepler948f5472020-06-02 16:52:28 -070088}
89
90config("private_includes") {
91 include_dirs = [ "." ]
Wyatt Hepler7da973a2020-06-09 10:04:48 -070092 visibility = [ ":*" ]
Wyatt Heplercb9d9572020-06-01 11:25:58 -070093}
94
Alexei Frolov5d6d3922020-05-08 13:57:02 -070095pw_proto_library("protos") {
96 sources = [ "pw_rpc_protos/packet.proto" ]
Alexei Frolov26e3ae62020-05-04 17:06:17 -070097}
98
Alexei Frolov7c7a3862020-07-16 15:36:02 -070099pw_proto_library("echo_service_proto") {
100 sources = [ "pw_rpc_protos/echo.proto" ]
101 inputs = [ "pw_rpc_protos/echo.options" ]
102}
103
Alexei Frolov79b7cb02020-07-06 13:51:43 -0700104# Source files for pw_protobuf's protoc plugin.
105pw_input_group("nanopb_protoc_plugin") {
106 inputs = [
107 "py/pw_rpc/codegen_nanopb.py",
108 "py/pw_rpc/plugin.py",
109 "py/pw_rpc/ids.py",
110 ]
Alexei Frolov15255c52020-07-17 08:25:49 -0700111 deps = [ "$dir_pw_protobuf:codegen_protoc_lib" ]
Alexei Frolov79b7cb02020-07-06 13:51:43 -0700112}
113
Alexei Frolov26e3ae62020-05-04 17:06:17 -0700114pw_doc_group("docs") {
115 sources = [ "docs.rst" ]
Alexei Frolov7c7a3862020-07-16 15:36:02 -0700116 inputs = [
117 "pw_rpc_protos/echo.proto",
118 "pw_rpc_protos/packet.proto",
119 ]
120 group_deps = [ "nanopb:docs" ]
Alexei Frolovbf33d212020-09-15 17:13:45 -0700121 report_deps = [ ":server_size" ]
122}
123
124pw_size_report("server_size") {
125 title = "Pigweed RPC server size report"
126
127 binaries = [
128 {
129 target = "size_report:server_only"
130 base = "size_report:base"
131 label = "Server by itself"
132 },
133 ]
134
135 if (dir_pw_third_party_nanopb != "") {
136 binaries += [
137 {
138 target = "size_report:server_with_echo_service"
139 base = "size_report:base_with_nanopb"
140 label = "Server with a registered nanopb EchoService"
141 },
142 ]
143 }
Alexei Frolov26e3ae62020-05-04 17:06:17 -0700144}
145
146pw_test_group("tests") {
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700147 tests = [
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700148 ":base_server_writer_test",
Wyatt Hepler671946e2020-06-09 14:39:33 -0700149 ":channel_test",
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700150 ":packet_test",
151 ":server_test",
Wyatt Heplerd1591422020-09-15 10:04:41 -0700152 ":service_test",
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700153 ]
Wyatt Hepleraf835682020-06-17 11:42:53 -0700154 group_deps = [ "nanopb:tests" ]
Alexei Frolov26e3ae62020-05-04 17:06:17 -0700155}
156
Wyatt Hepler948f5472020-06-02 16:52:28 -0700157pw_proto_library("test_protos") {
158 sources = [ "pw_rpc_test_protos/test.proto" ]
159 visibility = [ "./*" ]
Alexei Frolov26e3ae62020-05-04 17:06:17 -0700160}
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700161
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700162pw_test("base_server_writer_test") {
163 deps = [
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700164 ":server",
165 ":test_utils",
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700166 ]
167 sources = [ "base_server_writer_test.cc" ]
168}
169
Wyatt Hepler671946e2020-06-09 14:39:33 -0700170pw_test("channel_test") {
171 deps = [
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700172 ":server",
173 ":test_utils",
Wyatt Hepler671946e2020-06-09 14:39:33 -0700174 ]
175 sources = [ "channel_test.cc" ]
176}
177
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700178pw_test("hash_test") {
179 deps = [ ":server" ]
180 sources = [ "hash_test.cc" ]
181}
182
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700183pw_test("packet_test") {
184 deps = [
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700185 ":server",
Wyatt Hepler0f262352020-07-29 09:51:27 -0700186 dir_pw_bytes,
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700187 dir_pw_protobuf,
188 ]
189 sources = [ "packet_test.cc" ]
190}
Wyatt Hepler80f26ff2020-06-01 09:30:17 -0700191
Wyatt Heplerd1591422020-09-15 10:04:41 -0700192pw_test("service_test") {
193 deps = [
Wyatt Heplerd1591422020-09-15 10:04:41 -0700194 ":protos_pwpb",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700195 ":server",
Wyatt Heplerd1591422020-09-15 10:04:41 -0700196 dir_pw_assert,
197 ]
198 sources = [ "service_test.cc" ]
199}
200
Wyatt Hepler80f26ff2020-06-01 09:30:17 -0700201pw_test("server_test") {
202 deps = [
203 ":protos_pwpb",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700204 ":server",
205 ":test_utils",
Wyatt Hepler80f26ff2020-06-01 09:30:17 -0700206 dir_pw_assert,
207 ]
208 sources = [ "server_test.cc" ]
209}