• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2023 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
15load("@rules_proto//proto:defs.bzl", "proto_library")
16load("@rules_python//python:proto.bzl", "py_proto_library")
17load(
18    "//pw_build:pigweed.bzl",
19    "pw_cc_perf_test",
20    "pw_cc_test",
21)
22load("//pw_fuzzer:fuzzer.bzl", "pw_cc_fuzz_test")
23load("//pw_protobuf_compiler:pw_proto_library.bzl", "pw_proto_filegroup", "pw_proto_library")
24
25package(default_visibility = ["//visibility:public"])
26
27licenses(["notice"])
28
29cc_library(
30    name = "config",
31    hdrs = ["public/pw_protobuf/config.h"],
32    includes = ["public"],
33    deps = [":config_override"],
34)
35
36label_flag(
37    name = "config_override",
38    build_setting_default = "//pw_build:default_module_config",
39)
40
41cc_library(
42    name = "pw_protobuf",
43    srcs = [
44        "decoder.cc",
45        "encoder.cc",
46        "find.cc",
47        "map_utils.cc",
48        "message.cc",
49        "stream_decoder.cc",
50    ],
51    hdrs = [
52        "public/pw_protobuf/decoder.h",
53        "public/pw_protobuf/encoder.h",
54        "public/pw_protobuf/find.h",
55        "public/pw_protobuf/internal/codegen.h",
56        "public/pw_protobuf/internal/proto_integer_base.h",
57        "public/pw_protobuf/map_utils.h",
58        "public/pw_protobuf/message.h",
59        "public/pw_protobuf/serialized_size.h",
60        "public/pw_protobuf/stream_decoder.h",
61        "public/pw_protobuf/wire_format.h",
62    ],
63    includes = ["public"],
64    deps = [
65        ":config",
66        "//pw_assert",
67        "//pw_bytes",
68        "//pw_bytes:bit",
69        "//pw_containers:vector",
70        "//pw_function",
71        "//pw_preprocessor",
72        "//pw_result",
73        "//pw_span",
74        "//pw_status",
75        "//pw_stream",
76        "//pw_stream:interval_reader",
77        "//pw_string:string",
78        "//pw_toolchain:sibling_cast",
79        "//pw_varint",
80        "//pw_varint:stream",
81    ],
82)
83
84cc_library(
85    name = "bytes_utils",
86    hdrs = ["public/pw_protobuf/bytes_utils.h"],
87    includes = ["public"],
88    deps = [
89        ":pw_protobuf",
90        "//pw_bytes",
91        "//pw_result",
92        "//pw_status",
93    ],
94)
95
96pw_cc_test(
97    name = "decoder_test",
98    srcs = ["decoder_test.cc"],
99    deps = [
100        ":pw_protobuf",
101        "//pw_preprocessor",
102        "//pw_unit_test",
103    ],
104)
105
106pw_cc_test(
107    name = "encoder_test",
108    srcs = ["encoder_test.cc"],
109    deps = [
110        ":pw_protobuf",
111        "//pw_unit_test",
112    ],
113)
114
115pw_cc_fuzz_test(
116    name = "encoder_fuzz_test",
117    srcs = [
118        "encoder_fuzzer.cc",
119        "fuzz.h",
120    ],
121    deps = [
122        "//pw_protobuf",
123        "//pw_span",
124    ],
125)
126
127pw_cc_fuzz_test(
128    name = "decoder_fuzz_test",
129    srcs = [
130        "decoder_fuzzer.cc",
131        "fuzz.h",
132    ],
133    deps = [
134        "//pw_protobuf",
135        "//pw_span",
136    ],
137)
138
139pw_cc_test(
140    name = "find_test",
141    srcs = ["find_test.cc"],
142    deps = [
143        ":pw_protobuf",
144        "//pw_string",
145        "//pw_unit_test",
146    ],
147)
148
149pw_cc_test(
150    name = "serialized_size_test",
151    srcs = ["serialized_size_test.cc"],
152    deps = [
153        ":pw_protobuf",
154        "//pw_unit_test",
155    ],
156)
157
158pw_cc_test(
159    name = "stream_decoder_test",
160    srcs = ["stream_decoder_test.cc"],
161    deps = [
162        ":pw_protobuf",
163        "//pw_unit_test",
164    ],
165)
166
167pw_cc_test(
168    name = "map_utils_test",
169    srcs = ["map_utils_test.cc"],
170    deps = [
171        ":pw_protobuf",
172        "//pw_unit_test",
173    ],
174)
175
176pw_cc_test(
177    name = "message_test",
178    srcs = ["message_test.cc"],
179    deps = [
180        ":pw_protobuf",
181        "//pw_unit_test",
182    ],
183)
184
185pw_cc_perf_test(
186    name = "encoder_perf_test",
187    srcs = ["encoder_perf_test.cc"],
188    deps = [
189        ":pw_protobuf",
190        "//pw_unit_test",
191    ],
192)
193
194proto_library(
195    name = "codegen_protos",
196    srcs = [
197        "pw_protobuf_codegen_protos/codegen_options.proto",
198    ],
199    strip_import_prefix = "/pw_protobuf",
200)
201
202py_proto_library(
203    name = "codegen_protos_pb2",
204    deps = [":codegen_protos"],
205)
206
207proto_library(
208    name = "common_proto",
209    srcs = [
210        "pw_protobuf_protos/common.proto",
211    ],
212    strip_import_prefix = "/pw_protobuf",
213)
214
215py_proto_library(
216    name = "common_py_pb2",
217    deps = [":common_proto"],
218)
219
220java_proto_library(
221    name = "common_java_proto",
222    deps = [":common_proto"],
223)
224
225java_lite_proto_library(
226    name = "common_java_proto_lite",
227    deps = [":common_proto"],
228)
229
230proto_library(
231    name = "field_options_proto",
232    srcs = [
233        "pw_protobuf_protos/field_options.proto",
234    ],
235    strip_import_prefix = "/pw_protobuf",
236    deps = [
237        "@com_google_protobuf//:descriptor_proto",
238    ],
239)
240
241py_proto_library(
242    name = "field_options_proto_pb2",
243    deps = [
244        ":field_options_proto",
245    ],
246)
247
248proto_library(
249    name = "status_proto",
250    srcs = [
251        "pw_protobuf_protos/status.proto",
252    ],
253    strip_import_prefix = "/pw_protobuf",
254)
255
256py_proto_library(
257    name = "status_proto_pb2",
258    deps = [":status_proto"],
259)
260
261pw_proto_filegroup(
262    name = "codegen_test_deps_protos_and_options",
263    srcs = [
264        "pw_protobuf_test_deps_protos/imported.proto",
265    ],
266    options_files = ["pw_protobuf_test_deps_protos/imported.options"],
267)
268
269pw_proto_filegroup(
270    name = "codegen_import_test_deps_protos_and_options",
271    srcs = [
272        "pw_protobuf_test_deps_protos/test_prefix_imported.proto",
273    ],
274    options_files = ["pw_protobuf_test_deps_protos/test_prefix_imported.options"],
275)
276
277proto_library(
278    name = "codegen_test_deps_protos",
279    srcs = [":codegen_test_deps_protos_and_options"],
280    strip_import_prefix = "/pw_protobuf",
281)
282
283# Test that options files are applied even on protos that are given an import path
284# that doesn't correspond to their real file path.
285proto_library(
286    name = "codegen_test_deps_protos_test_prefix",
287    srcs = [":codegen_import_test_deps_protos_and_options"],
288    import_prefix = "test_prefix",
289    strip_import_prefix = "/pw_protobuf/pw_protobuf_test_deps_protos",
290)
291
292pw_proto_filegroup(
293    name = "codegen_test_proto_and_options",
294    srcs = [
295        "pw_protobuf_test_protos/full_test.proto",
296        "pw_protobuf_test_protos/imported.proto",
297        "pw_protobuf_test_protos/importer.proto",
298        "pw_protobuf_test_protos/non_pw_package.proto",
299        "pw_protobuf_test_protos/optional.proto",
300        "pw_protobuf_test_protos/proto2.proto",
301        "pw_protobuf_test_protos/repeated.proto",
302        "pw_protobuf_test_protos/size_report.proto",
303    ],
304    options_files = [
305        "pw_protobuf_test_protos/full_test.options",
306        "pw_protobuf_test_protos/optional.options",
307        "pw_protobuf_test_protos/imported.options",
308        "pw_protobuf_test_protos/repeated.options",
309    ],
310)
311
312proto_library(
313    name = "codegen_test_proto",
314    srcs = [":codegen_test_proto_and_options"],
315    strip_import_prefix = "/pw_protobuf",
316    deps = [
317        ":codegen_test_deps_protos",
318        ":codegen_test_deps_protos_test_prefix",
319        ":common_proto",
320    ],
321)
322
323pw_proto_library(
324    name = "codegen_test_proto_cc",
325    deps = [
326        ":codegen_test_proto",
327        ":common_proto",
328    ],
329)
330
331pw_cc_test(
332    name = "codegen_decoder_test",
333    srcs = [
334        "codegen_decoder_test.cc",
335    ],
336    deps = [
337        ":codegen_test_proto_cc.pwpb",
338        ":pw_protobuf",
339        "//pw_span",
340        "//pw_unit_test",
341    ],
342)
343
344pw_cc_test(
345    name = "codegen_encoder_test",
346    srcs = [
347        "codegen_encoder_test.cc",
348    ],
349    deps = [
350        ":codegen_test_proto_cc.pwpb",
351        ":pw_protobuf",
352        "//pw_span",
353        "//pw_unit_test",
354    ],
355)
356
357pw_cc_test(
358    name = "codegen_message_test",
359    srcs = [
360        "codegen_message_test.cc",
361    ],
362    deps = [
363        ":codegen_test_proto_cc.pwpb",
364        ":pw_protobuf",
365        "//pw_span",
366        "//pw_unit_test",
367    ],
368)
369
370# TODO(frolv): Figure out how to add facade tests to Bazel.
371filegroup(
372    name = "varint_size_test",
373    srcs = [
374        "varint_size_test.cc",
375    ],
376)
377
378# TODO(frolv): Figure out what to do about size reports in Bazel.
379filegroup(
380    name = "size_reports",
381    srcs = glob([
382        "size_report/*.cc",
383    ]),
384)
385