|  | # 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_proto//proto:defs.bzl", "proto_library") | 
|  | load( | 
|  | "//pw_build:pigweed.bzl", | 
|  | "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") | 
|  |  | 
|  | package(default_visibility = ["//visibility:public"]) | 
|  |  | 
|  | licenses(["notice"])  # Apache License 2.0 | 
|  |  | 
|  | pw_cc_library( | 
|  | name = "config", | 
|  | hdrs = ["public/pw_protobuf/config.h"], | 
|  | includes = ["public"], | 
|  | ) | 
|  |  | 
|  | pw_cc_library( | 
|  | name = "pw_protobuf", | 
|  | srcs = [ | 
|  | "decoder.cc", | 
|  | "encoder.cc", | 
|  | "find.cc", | 
|  | "streaming_encoder.cc", | 
|  | ], | 
|  | hdrs = [ | 
|  | "public/pw_protobuf/codegen.h", | 
|  | "public/pw_protobuf/decoder.h", | 
|  | "public/pw_protobuf/encoder.h", | 
|  | "public/pw_protobuf/find.h", | 
|  | "public/pw_protobuf/serialized_size.h", | 
|  | "public/pw_protobuf/streaming_encoder.h", | 
|  | "public/pw_protobuf/wire_format.h", | 
|  | ], | 
|  | includes = ["public"], | 
|  | deps = [ | 
|  | ":config", | 
|  | "//pw_assert", | 
|  | "//pw_bytes", | 
|  | "//pw_result", | 
|  | "//pw_span", | 
|  | "//pw_status", | 
|  | "//pw_stream", | 
|  | "//pw_varint", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | pw_cc_test( | 
|  | name = "decoder_test", | 
|  | srcs = ["decoder_test.cc"], | 
|  | deps = [ | 
|  | ":pw_protobuf", | 
|  | "//pw_preprocessor", | 
|  | "//pw_unit_test", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | pw_cc_test( | 
|  | name = "encoder_test", | 
|  | srcs = ["encoder_test.cc"], | 
|  | deps = [ | 
|  | ":pw_protobuf", | 
|  | "//pw_unit_test", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | pw_cc_test( | 
|  | name = "streaming_encoder_test", | 
|  | srcs = ["streaming_encoder_test.cc"], | 
|  | deps = [ | 
|  | ":pw_protobuf", | 
|  | "//pw_unit_test", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | pw_cc_test( | 
|  | name = "find_test", | 
|  | srcs = ["find_test.cc"], | 
|  | deps = [ | 
|  | ":pw_protobuf", | 
|  | "//pw_unit_test", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | proto_library( | 
|  | name = "codegen_test_proto", | 
|  | srcs = [ | 
|  | "pw_protobuf_protos/common.proto", | 
|  | "pw_protobuf_test_protos/full_test.proto", | 
|  | "pw_protobuf_test_protos/imported.proto", | 
|  | "pw_protobuf_test_protos/importer.proto", | 
|  | "pw_protobuf_test_protos/non_pw_package.proto", | 
|  | "pw_protobuf_test_protos/proto2.proto", | 
|  | "pw_protobuf_test_protos/repeated.proto", | 
|  | ], | 
|  | strip_import_prefix = "//pw_protobuf", | 
|  | ) | 
|  |  | 
|  | pw_proto_library( | 
|  | name = "codegen_test_protos_pwpb", | 
|  | deps = [":codegen_test_proto"], | 
|  | ) | 
|  |  | 
|  | pw_cc_test( | 
|  | name = "codegen_test", | 
|  | srcs = [ | 
|  | "codegen_test.cc", | 
|  | ], | 
|  | deps = [ | 
|  | ":codegen_test_protos_pwpb", | 
|  | ":pw_protobuf", | 
|  | "//pw_span", | 
|  | "//pw_unit_test", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | # TODO(frolv): Figure out how to add facade tests to Bazel. | 
|  | filegroup( | 
|  | name = "varint_size_test", | 
|  | srcs = [ | 
|  | "varint_size_test.cc", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | # TODO(frolv): Figure out what to do about size reports in Bazel. | 
|  | filegroup( | 
|  | name = "size_reports", | 
|  | srcs = glob([ | 
|  | "size_report/*.cc", | 
|  | ]), | 
|  | ) | 
|  |  | 
|  | 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", | 
|  | visibility = ["//visibility:public"], | 
|  | ) |