1# Copyright 2022 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 15import("//build_overrides/pigweed.gni") 16 17import("$dir_pw_build/target_types.gni") 18import("$dir_pw_docgen/docs.gni") 19import("$dir_pw_sync/backend.gni") 20import("$dir_pw_thread/backend.gni") 21import("$dir_pw_unit_test/test.gni") 22 23config("public") { 24 include_dirs = [ "public" ] 25 visibility = [ ":*" ] 26} 27 28pw_source_set("server_api") { 29 public_configs = [ ":public" ] 30 public = [ 31 "public/pw_rpc/pwpb/internal/method.h", 32 "public/pw_rpc/pwpb/internal/method_union.h", 33 "public/pw_rpc/pwpb/server_reader_writer.h", 34 ] 35 sources = [ "server_reader_writer.cc" ] 36 public_deps = [ 37 ":common", 38 "$dir_pw_rpc/raw:server_api", 39 "..:config", 40 "..:server", 41 dir_pw_bytes, 42 ] 43 deps = [ 44 "..:log_config", 45 dir_pw_log, 46 ] 47 allow_circular_includes_from = [ ":common" ] 48} 49 50pw_source_set("client_api") { 51 public_configs = [ ":public" ] 52 public_deps = [ 53 ":common", 54 "..:client", 55 dir_pw_function, 56 ] 57 public = [ "public/pw_rpc/pwpb/client_reader_writer.h" ] 58} 59 60pw_source_set("common") { 61 public_deps = [ 62 "..:common", 63 dir_pw_bytes, 64 dir_pw_span, 65 ] 66 public_configs = [ ":public" ] 67 deps = [ 68 "..:client", 69 "..:log_config", 70 "..:server", 71 dir_pw_log, 72 dir_pw_stream, 73 ] 74 public = [ 75 "public/pw_rpc/pwpb/internal/common.h", 76 "public/pw_rpc/pwpb/serde.h", 77 ] 78} 79 80pw_source_set("test_method_context") { 81 public_configs = [ ":public" ] 82 public = [ 83 "public/pw_rpc/pwpb/fake_channel_output.h", 84 "public/pw_rpc/pwpb/test_method_context.h", 85 ] 86 public_deps = [ 87 ":server_api", 88 "..:test_utils", 89 dir_pw_assert, 90 dir_pw_containers, 91 dir_pw_span, 92 ] 93} 94 95pw_source_set("client_testing") { 96 public = [ "public/pw_rpc/pwpb/client_testing.h" ] 97 public_deps = [ 98 ":test_method_context", 99 "..:client", 100 "../raw:client_testing", 101 ] 102} 103 104pw_source_set("client_server_testing") { 105 public = [ "public/pw_rpc/pwpb/client_server_testing.h" ] 106 public_deps = [ 107 ":test_method_context", 108 "$dir_pw_assert", 109 "..:client_server_testing", 110 ] 111} 112 113pw_source_set("client_server_testing_threaded") { 114 public = [ "public/pw_rpc/pwpb/client_server_testing_threaded.h" ] 115 public_deps = [ 116 ":test_method_context", 117 "..:client_server_testing_threaded", 118 ] 119} 120 121pw_source_set("internal_test_utils") { 122 public = [ "pw_rpc_pwpb_private/internal_test_utils.h" ] 123 public_deps = [ 124 dir_pw_status, 125 dir_pw_stream, 126 ] 127} 128 129pw_source_set("echo_service") { 130 public_configs = [ ":public" ] 131 public_deps = [ "..:protos.pwpb_rpc" ] 132 sources = [ "public/pw_rpc/echo_service_pwpb.h" ] 133} 134 135pw_source_set("client_integration_test") { 136 testonly = pw_unit_test_TESTONLY 137 public_configs = [ ":public" ] 138 public_deps = [ 139 "$dir_pw_sync:binary_semaphore", 140 "..:integration_testing", 141 "..:protos.pwpb_rpc", 142 dir_pw_assert, 143 dir_pw_unit_test, 144 ] 145 sources = [ "client_integration_test.cc" ] 146} 147 148pw_doc_group("docs") { 149 sources = [ "docs.rst" ] 150} 151 152pw_test_group("tests") { 153 tests = [ 154 ":client_call_test", 155 ":client_reader_writer_test", 156 ":client_server_context_test", 157 ":client_server_context_threaded_test", 158 ":codegen_test", 159 ":echo_service_test", 160 ":fake_channel_output_test", 161 ":method_lookup_test", 162 ":method_test", 163 ":method_info_test", 164 ":method_union_test", 165 ":server_callback_test", 166 ":server_reader_writer_test", 167 ":serde_test", 168 ":stub_generation_test", 169 ":synchronous_call_test", 170 ] 171} 172 173pw_test("client_call_test") { 174 deps = [ 175 ":client_api", 176 ":internal_test_utils", 177 "..:test_protos.pwpb", 178 "..:test_utils", 179 ] 180 sources = [ "client_call_test.cc" ] 181} 182 183pw_test("client_reader_writer_test") { 184 deps = [ 185 ":client_api", 186 ":client_testing", 187 "$dir_pw_sync:mutex", 188 "..:test_protos.pwpb_rpc", 189 ] 190 enable_if = pw_sync_MUTEX_BACKEND != "" 191 sources = [ "client_reader_writer_test.cc" ] 192} 193 194pw_test("client_server_context_test") { 195 deps = [ 196 ":client_api", 197 ":client_server_testing", 198 "..:test_protos.pwpb_rpc", 199 ] 200 sources = [ "client_server_context_test.cc" ] 201} 202 203_stl_threading_enabled = 204 pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread" && 205 pw_sync_BINARY_SEMAPHORE_BACKEND != "" && pw_sync_MUTEX_BACKEND != "" 206 207pw_test("client_server_context_threaded_test") { 208 deps = [ 209 ":client_api", 210 ":client_server_testing_threaded", 211 "$dir_pw_sync:binary_semaphore", 212 "$dir_pw_sync:mutex", 213 "$dir_pw_thread:non_portable_test_thread_options", 214 "$dir_pw_thread_stl:non_portable_test_thread_options", 215 "..:test_protos.pwpb_rpc", 216 ] 217 sources = [ "client_server_context_threaded_test.cc" ] 218 enable_if = _stl_threading_enabled 219} 220 221pw_test("codegen_test") { 222 deps = [ 223 ":client_api", 224 ":internal_test_utils", 225 ":server_api", 226 ":test_method_context", 227 "..:test_protos.pwpb_rpc", 228 "..:test_utils", 229 ] 230 sources = [ "codegen_test.cc" ] 231} 232 233pw_test("echo_service_test") { 234 deps = [ 235 ":echo_service", 236 ":server_api", 237 ":test_method_context", 238 ] 239 sources = [ "echo_service_test.cc" ] 240} 241 242pw_test("fake_channel_output_test") { 243 deps = [ 244 ":server_api", 245 ":test_method_context", 246 "..:test_protos.pwpb_rpc", 247 ] 248 sources = [ "fake_channel_output_test.cc" ] 249} 250 251pw_test("method_test") { 252 deps = [ 253 ":internal_test_utils", 254 ":server_api", 255 "$dir_pw_containers", 256 "..:test_protos.pwpb", 257 "..:test_utils", 258 ] 259 sources = [ "method_test.cc" ] 260} 261 262pw_test("method_info_test") { 263 deps = [ 264 "..:common", 265 "..:test_protos.pwpb_rpc", 266 "..:test_utils", 267 ] 268 sources = [ "method_info_test.cc" ] 269} 270 271pw_test("method_lookup_test") { 272 deps = [ 273 ":server_api", 274 ":test_method_context", 275 "..:test_protos.pwpb_rpc", 276 "..:test_utils", 277 "../raw:test_method_context", 278 ] 279 sources = [ "method_lookup_test.cc" ] 280} 281 282pw_test("method_union_test") { 283 deps = [ 284 ":internal_test_utils", 285 ":server_api", 286 "..:test_protos.pwpb", 287 "..:test_utils", 288 ] 289 sources = [ "method_union_test.cc" ] 290} 291 292pw_test("serde_test") { 293 deps = [ 294 ":server_api", 295 "..:test_protos.pwpb", 296 ] 297 sources = [ "serde_test.cc" ] 298} 299 300pw_test("server_callback_test") { 301 deps = [ 302 ":server_api", 303 ":test_method_context", 304 "..:test_protos.pwpb_rpc", 305 ] 306 sources = [ "server_callback_test.cc" ] 307} 308 309pw_test("server_reader_writer_test") { 310 deps = [ 311 ":server_api", 312 ":test_method_context", 313 "..:test_protos.pwpb_rpc", 314 ] 315 sources = [ "server_reader_writer_test.cc" ] 316} 317 318pw_test("stub_generation_test") { 319 deps = [ "..:test_protos.pwpb_rpc" ] 320 sources = [ "stub_generation_test.cc" ] 321} 322 323pw_test("synchronous_call_test") { 324 deps = [ 325 ":test_method_context", 326 "$dir_pw_rpc_transport:test_loopback_service_registry", 327 "$dir_pw_thread:thread", 328 "$dir_pw_work_queue:pw_work_queue", 329 "$dir_pw_work_queue:stl_test_thread", 330 "$dir_pw_work_queue:test_thread", 331 "..:synchronous_client_api", 332 "..:test_protos.pwpb_rpc", 333 ] 334 sources = [ "synchronous_call_test.cc" ] 335 enable_if = pw_sync_TIMED_THREAD_NOTIFICATION_BACKEND != "" 336 337 # TODO: https://pwbug.dev/325509758 - Doesn't work on the Pico yet; hangs 338 # indefinitely. 339 if (pw_build_EXECUTABLE_TARGET_TYPE == "pico_executable") { 340 enable_if = false 341 } 342} 343