pw_rpc: Adds Bazel support for RPC Adds initial support for c++ RPC libraries. This change only supports the raw RPC protocol. Change-Id: Icdecc14f1b8be03120330094793315f807deb3ec Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/43921 Reviewed-by: Wyatt Hepler <hepler@google.com> Commit-Queue: Wyatt Hepler <hepler@google.com>
diff --git a/WORKSPACE b/WORKSPACE index 9c25067..b37b8e3 100644 --- a/WORKSPACE +++ b/WORKSPACE
@@ -54,7 +54,7 @@ protobuf_deps() # Setup tools to build custom grpc rules. -# Regquired by: pigweed. +# Required by: pigweed. # Used in modules: //pw_protobuf http_archive( name = "rules_proto_grpc", @@ -63,7 +63,11 @@ urls = ["https://github.com/rules-proto-grpc/rules_proto_grpc/archive/1.0.2.tar.gz"], ) -load("@rules_proto_grpc//:repositories.bzl", "rules_proto_grpc_repos", "rules_proto_grpc_toolchains") +load( + "@rules_proto_grpc//:repositories.bzl", + "rules_proto_grpc_repos", + "rules_proto_grpc_toolchains", +) rules_proto_grpc_toolchains()
diff --git a/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py b/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py index 8253457..27adade 100755 --- a/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py +++ b/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py
@@ -234,7 +234,9 @@ '//pw_malloc_freelist/...', '//pw_polyfill/...', '//pw_preprocessor/...', + '//pw_protobuf/...', '//pw_protobuf_compiler/...', + '//pw_rpc/...', '//pw_span/...', '//pw_status/...', '//pw_stream/...',
diff --git a/pw_protobuf/BUILD b/pw_protobuf/BUILD.bazel similarity index 91% rename from pw_protobuf/BUILD rename to pw_protobuf/BUILD.bazel index 32b5877..0492731 100644 --- a/pw_protobuf/BUILD +++ b/pw_protobuf/BUILD.bazel
@@ -18,7 +18,6 @@ "pw_cc_library", "pw_cc_test", ) -load("@rules_python//python:defs.bzl", "py_binary") load("@rules_proto_grpc//:plugin.bzl", "proto_plugin") load("//pw_protobuf_compiler:proto.bzl", "pw_proto_library") @@ -147,21 +146,12 @@ ]), ) -py_binary( - name = "plugin", - srcs = glob(["py/pw_protobuf/*.py"]), - imports = ["py"], - main = "py/pw_protobuf/plugin.py", - python_version = "PY3", - deps = ["@com_google_protobuf//:protobuf_python"], -) - proto_plugin( name = "pw_cc_plugin", outputs = [ "{protopath}.pwpb.h", ], protoc_plugin_name = "pwpb", - tool = "@pigweed//pw_protobuf:plugin", + tool = "@pigweed//pw_protobuf/py:plugin", visibility = ["//visibility:public"], )
diff --git a/pw_protobuf/py/BUILD.bazel b/pw_protobuf/py/BUILD.bazel new file mode 100644 index 0000000..8607322 --- /dev/null +++ b/pw_protobuf/py/BUILD.bazel
@@ -0,0 +1,37 @@ +# Copyright 2021 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. + +load("@rules_python//python:defs.bzl", "py_binary", "py_library") + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) # Apache License 2.0 + +py_library( + name = "plugin_library", + srcs = glob(["pw_protobuf/*.py"]), + imports = ["."], + deps = ["@com_google_protobuf//:protobuf_python"], +) + +py_binary( + name = "plugin", + srcs = ["pw_protobuf/plugin.py"], + imports = ["."], + python_version = "PY3", + deps = [ + ":plugin_library", + "@com_google_protobuf//:protobuf_python", + ], +)
diff --git a/pw_protobuf_compiler/docs.rst b/pw_protobuf_compiler/docs.rst index 91c3310..0c93ae6 100644 --- a/pw_protobuf_compiler/docs.rst +++ b/pw_protobuf_compiler/docs.rst
@@ -381,6 +381,12 @@ .. code:: cpp #include "my_protos/bar.pwpb.h" + // and/or RPC headers + #include "my_protos/bar.raw_rpc.pb.h + +.. note:: + + Currently only raw RPC is supported by the Bazel build. **Supported Codegen** @@ -388,6 +394,5 @@ sub-targets generated by a ``pw_proto_library``. * ``${NAME}.pwpb`` - Generated C++ pw_protobuf code -* ``${NAME}.nanopb`` - Generated C++ nanopb code (requires Nanopb) -* ``${NAME}.nanopb_rpc`` - Generated C++ Nanopb pw_rpc code (requires Nanopb) * ``${NAME}.raw_rpc`` - Generated C++ raw pw_rpc code (no protobuf library) +
diff --git a/pw_protobuf_compiler/proto.bzl b/pw_protobuf_compiler/proto.bzl index 5273c46..9bcdbd1 100644 --- a/pw_protobuf_compiler/proto.bzl +++ b/pw_protobuf_compiler/proto.bzl
@@ -35,6 +35,7 @@ providers = [ProtoPluginInfo], default = [ Label("@pigweed//pw_protobuf:pw_cc_plugin"), + Label("@pigweed//pw_rpc:pw_cc_plugin"), ], ), _prefix = attr.string(
diff --git a/pw_protobuf_compiler/py/BUILD.bazel b/pw_protobuf_compiler/py/BUILD.bazel new file mode 100644 index 0000000..9fe72cd --- /dev/null +++ b/pw_protobuf_compiler/py/BUILD.bazel
@@ -0,0 +1,31 @@ +# 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. + +load("@rules_python//python:defs.bzl", "py_library") + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) # Apache License 2.0 + +py_library( + name = "pw_protobuf_compiler", + srcs = [ + "pw_protobuf_compiler/__init__.py", + "pw_protobuf_compiler/generate_protos.py", + "pw_protobuf_compiler/proto_target_invalid.py", + "pw_protobuf_compiler/python_protos.py", + ], + imports = ["."], + deps = ["//pw_protobuf/py:plugin"], +)
diff --git a/pw_rpc/BUILD b/pw_rpc/BUILD.bazel similarity index 81% rename from pw_rpc/BUILD rename to pw_rpc/BUILD.bazel index b2cd789..30759ca 100644 --- a/pw_rpc/BUILD +++ b/pw_rpc/BUILD.bazel
@@ -12,11 +12,14 @@ # License for the specific language governing permissions and limitations under # the License. +load("@rules_proto//proto:defs.bzl", "proto_library") load( "//pw_build:pigweed.bzl", "pw_cc_library", "pw_cc_test", ) +load("@rules_proto_grpc//:plugin.bzl", "proto_plugin") +load("//pw_protobuf_compiler:proto.bzl", "pw_proto_library") package(default_visibility = ["//visibility:public"]) @@ -34,6 +37,7 @@ ], deps = [ ":common", + "//pw_containers:intrusive_list", ], ) @@ -59,6 +63,8 @@ includes = ["public"], deps = [ ":common", + ":internal_packet_pwpb", + "//pw_containers", ], ) @@ -87,7 +93,9 @@ ], includes = ["public"], deps = [ + ":internal_packet_pwpb", "//pw_assert", + "//pw_bytes", "//pw_log", "//pw_span", "//pw_status", @@ -112,8 +120,13 @@ "pw_rpc_private/internal_test_utils.h", "pw_rpc_private/method_impl_tester.h", ], - visibility = ["//visibility:private"], + includes = [ + ".", + "public", + ], + visibility = [":__subpackages__"], deps = [ + ":client", ":server", "//pw_span", ], @@ -181,8 +194,8 @@ name = "channel_test", srcs = ["channel_test.cc"], deps = [ + ":internal_test_utils", ":server", - ":test_utils_test_server", ], ) @@ -201,6 +214,7 @@ srcs = ["client_server_test.cc"], deps = [ ":client_server", + ":internal_test_utils", "//pw_rpc/raw:method_union", ], ) @@ -208,7 +222,7 @@ proto_library( name = "packet_proto", srcs = [ - "pw_rpc_protos/internal/packet.proto", + "internal/packet.proto", ], ) @@ -235,3 +249,35 @@ "//pw_assert", ], ) + +proto_library( + name = "internal_packet_proto", + srcs = ["internal/packet.proto"], + visibility = ["//visibility:private"], +) + +pw_proto_library( + name = "internal_packet_pwpb", + deps = [":internal_packet_proto"], +) + +proto_library( + name = "pw_rpc_test_proto", + srcs = ["pw_rpc_test_protos/test.proto"], + strip_import_prefix = "//pw_rpc", +) + +pw_proto_library( + name = "pw_rpc_test_pwpb", + deps = [":pw_rpc_test_proto"], +) + +proto_plugin( + name = "pw_cc_plugin", + outputs = [ + "{protopath}.raw_rpc.pb.h", + ], + protoc_plugin_name = "raw_rpc", + tool = "@pigweed//pw_rpc/py:plugin", + visibility = ["//visibility:public"], +)
diff --git a/pw_rpc/py/BUILD.bazel b/pw_rpc/py/BUILD.bazel new file mode 100644 index 0000000..c1ff8d2 --- /dev/null +++ b/pw_rpc/py/BUILD.bazel
@@ -0,0 +1,39 @@ +# 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. + +load("@rules_python//python:defs.bzl", "py_binary") + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) # Apache License 2.0 + +py_binary( + name = "plugin", + srcs = glob( + ["pw_rpc/*.py"], + exclude = [ + "pw_rpc/client.py", + "pw_rpc/__init__.py", + ], + ), + imports = ["."], + main = "pw_rpc/plugin_raw.py", + python_version = "PY3", + deps = [ + "//pw_protobuf/py:plugin_library", + "//pw_protobuf_compiler/py:pw_protobuf_compiler", + "//pw_status/py:pw_status", + "@com_google_protobuf//:protobuf_python", + ], +)
diff --git a/pw_rpc/raw/BUILD b/pw_rpc/raw/BUILD.bazel similarity index 85% rename from pw_rpc/raw/BUILD rename to pw_rpc/raw/BUILD.bazel index d983b14..9d7aa28 100644 --- a/pw_rpc/raw/BUILD +++ b/pw_rpc/raw/BUILD.bazel
@@ -30,8 +30,10 @@ hdrs = [ "public/pw_rpc/internal/raw_method.h", ], + includes = ["public"], deps = [ "//pw_bytes", + "//pw_rpc:internal_packet_pwpb", "//pw_rpc:server", ], ) @@ -65,7 +67,9 @@ ], deps = [ ":method_union", + ":test_method_context", "//pw_protobuf", + "//pw_rpc:pw_rpc_test_pwpb", ], ) @@ -78,6 +82,7 @@ ":method_union", "//pw_protobuf", "//pw_rpc:internal_test_utils", + "//pw_rpc:pw_rpc_test_pwpb", ], ) @@ -90,12 +95,16 @@ ":method_union", "//pw_protobuf", "//pw_rpc:internal_test_utils", + "//pw_rpc:pw_rpc_test_pwpb", ], ) pw_cc_test( name = "stub_generation_test", srcs = ["stub_generation_test.cc"], - # TODO(hepler): Figure out proto BUILD integration. - # deps = ["..:test_protos.raw_rpc"], + deps = [ + "//pw_rpc:pw_rpc_test_pwpb", + "//pw_rpc:server", + "//pw_rpc/raw:method_union", + ], )