Enable textproto conformance tests for "-0" and "-0F".
[google-protobuf.git] / BUILD.bazel
blobd9e2c4476a31f320e146c73f276ee1bd36be9f9a
1 # Bazel (https://bazel.build/) BUILD file for Protobuf.
3 load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
4 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
5 load("//bazel:cc_proto_library.bzl", "cc_proto_library")
6 load("//bazel:java_lite_proto_library.bzl", "java_lite_proto_library")
7 load("//bazel:java_proto_library.bzl", "java_proto_library")
8 load("//bazel:proto_library.bzl", "proto_library")
9 load("//bazel/toolchains:proto_lang_toolchain.bzl", "proto_lang_toolchain")
10 load("//build_defs:cpp_opts.bzl", "COPTS", "LINK_OPTS")
11 load(":protobuf.bzl", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library")
13 licenses(["notice"])
15 exports_files(["LICENSE"])
17 ################################################################################
18 # Well Known Types Proto Library Rules
20 # https://developers.google.com/protocol-buffers/docs/reference/google.protobuf
21 ################################################################################
22 # These proto_library rules can be used with one of the language specific proto
23 # library rules i.e. java_proto_library:
25 # java_proto_library(
26 #   name = "any_java_proto",
27 #   deps = ["@protobuf//:any_proto"],
28 # )
29 ################################################################################
31 alias(
32     name = "any_proto",
33     actual = "//src/google/protobuf:any_proto",
34     visibility = ["//visibility:public"],
37 alias(
38     name = "api_proto",
39     actual = "//src/google/protobuf:api_proto",
40     visibility = ["//visibility:public"],
43 alias(
44     name = "duration_proto",
45     actual = "//src/google/protobuf:duration_proto",
46     visibility = ["//visibility:public"],
49 alias(
50     name = "empty_proto",
51     actual = "//src/google/protobuf:empty_proto",
52     visibility = ["//visibility:public"],
55 alias(
56     name = "field_mask_proto",
57     actual = "//src/google/protobuf:field_mask_proto",
58     visibility = ["//visibility:public"],
61 alias(
62     name = "source_context_proto",
63     actual = "//src/google/protobuf:source_context_proto",
64     visibility = ["//visibility:public"],
67 alias(
68     name = "struct_proto",
69     actual = "//src/google/protobuf:struct_proto",
70     visibility = ["//visibility:public"],
73 alias(
74     name = "timestamp_proto",
75     actual = "//src/google/protobuf:timestamp_proto",
76     visibility = ["//visibility:public"],
79 alias(
80     name = "type_proto",
81     actual = "//src/google/protobuf:type_proto",
82     visibility = ["//visibility:public"],
85 alias(
86     name = "wrappers_proto",
87     actual = "//src/google/protobuf:wrappers_proto",
88     visibility = ["//visibility:public"],
91 # C++ targets for the well-known types
93 alias(
94     name = "any_cc_proto",
95     actual = "//src/google/protobuf:any_cc_proto",
96     visibility = ["//visibility:public"],
99 alias(
100     name = "api_cc_proto",
101     actual = "//src/google/protobuf:api_cc_proto",
102     visibility = ["//visibility:public"],
105 alias(
106     name = "duration_cc_proto",
107     actual = "//src/google/protobuf:duration_cc_proto",
108     visibility = ["//visibility:public"],
111 alias(
112     name = "empty_cc_proto",
113     actual = "//src/google/protobuf:empty_cc_proto",
114     visibility = ["//visibility:public"],
117 alias(
118     name = "field_mask_cc_proto",
119     actual = "//src/google/protobuf:field_mask_cc_proto",
120     visibility = ["//visibility:public"],
123 alias(
124     name = "source_context_cc_proto",
125     actual = "//src/google/protobuf:source_context_cc_proto",
126     visibility = ["//visibility:public"],
129 alias(
130     name = "struct_cc_proto",
131     actual = "//src/google/protobuf:struct_cc_proto",
132     visibility = ["//visibility:public"],
135 alias(
136     name = "timestamp_cc_proto",
137     actual = "//src/google/protobuf:timestamp_cc_proto",
138     visibility = ["//visibility:public"],
141 alias(
142     name = "type_cc_proto",
143     actual = "//src/google/protobuf:type_cc_proto",
144     visibility = ["//visibility:public"],
147 alias(
148     name = "wrappers_cc_proto",
149     actual = "//src/google/protobuf:wrappers_cc_proto",
150     visibility = ["//visibility:public"],
153 # Source files: these are aliases to a filegroup, not a `proto_library`.
155 # (This is _probably_ not what you want.)
156 alias(
157     name = "lite_well_known_protos",
158     actual = "//src/google/protobuf:well_known_type_protos",  # filegroup
159     visibility = ["//visibility:public"],
162 alias(
163     name = "well_known_type_protos",
164     actual = "//src/google/protobuf:well_known_type_protos",  # filegroup
165     visibility = ["//visibility:public"],
168 # Built-in runtime protos: these are part of protobuf's internal
169 # implementation, but are not Well-Known Types.
171 alias(
172     name = "descriptor_proto",
173     actual = "//src/google/protobuf:descriptor_proto",  # proto_library
174     visibility = ["//visibility:public"],
177 alias(
178     name = "descriptor_proto_srcs",
179     actual = "//src/google/protobuf:descriptor_proto_srcs",  # filegroup
180     visibility = ["//visibility:public"],
183 alias(
184     name = "compiler_plugin_proto",
185     actual = "//src/google/protobuf/compiler:plugin_proto",  # proto_library
186     visibility = ["//visibility:public"],
189 cc_library(
190     name = "cc_wkt_protos",
191     deprecation = "Only for backward compatibility. Do not use.",
192     visibility = ["//visibility:public"],
195 # Source protos that are typically part of the protobuf runtime.
197 # DEPRECATED: Prefer :well_known_type_protos for the Well-Known Types
198 # (https://developers.google.com/protocol-buffers/docs/reference/google.protobuf)
199 # or :descriptor_proto(_srcs) for descriptor.proto (source), or
200 # :compiler_plugin_proto for compiler/plugin.proto.
201 filegroup(
202     name = "well_known_protos",
203     srcs = [
204         ":descriptor_proto_srcs",
205         ":well_known_type_protos",
206         "//src/google/protobuf/compiler:plugin.proto",
207     ],
208     deprecation = "Prefer :well_known_type_protos instead.",
209     visibility = ["//visibility:public"],
212 ################################################################################
213 # Protocol Buffers Compiler
214 ################################################################################
216 alias(
217     name = "protoc_lib",
218     actual = "//src/google/protobuf/compiler:protoc_lib",
219     visibility = ["//visibility:public"],
222 cc_binary(
223     name = "protoc",
224     copts = COPTS,
225     linkopts = LINK_OPTS,
226     visibility = ["//visibility:public"],
227     deps = ["//src/google/protobuf/compiler:protoc_lib"],
230 cc_binary(
231     name = "protoc_static",
232     copts = COPTS,
233     features = select({
234         # This isn't possible on mac because there is no static library for lcrt0.o
235         "@platforms//os:osx": [],
236         "//build_defs:config_osx": [],
237         # When cross-compiling we need to statically link all C++ libraries.
238         "//conditions:default": ["fully_static_link"],
239     }),
240     linkopts = LINK_OPTS,
241     visibility = ["//visibility:public"],
242     deps = ["//src/google/protobuf/compiler:protoc_lib"],
245 ################################################################################
246 # C++ runtime
247 ################################################################################
249 # Expose the runtime for the proto_lang_toolchain so that it can also be used in
250 # a user-defined proto_lang_toolchain.
251 alias(
252     name = "protobuf",
253     actual = "//src/google/protobuf:protobuf_layering_check_legacy",
254     visibility = ["//visibility:public"],
257 alias(
258     name = "protobuf_nowkt",
259     actual = "//src/google/protobuf:protobuf_layering_check_legacy",
260     deprecation = "Use //:protobuf instead",
261     visibility = ["//visibility:public"],
264 # The "lite" runtime works for .proto files that specify the option:
265 #     optimize_for = LITE_RUNTIME;
267 # The lite runtime does not include the `Reflection` APIs (including
268 # `Descriptor` and related types) or Well-Known Types.
270 # See also:
271 #     https://developers.google.com/protocol-buffers/docs/reference/cpp-generated#message
272 #     https://developers.google.com/protocol-buffers/docs/reference/google.protobuf
273 alias(
274     name = "protobuf_lite",
275     actual = "//src/google/protobuf:protobuf_lite",
276     visibility = ["//visibility:public"],
279 # This provides just the header files for use in projects that need to build
280 # shared libraries for dynamic loading. This target is available until Bazel
281 # adds native support for such use cases.
282 # TODO: Remove this target once the support gets added to Bazel.
283 alias(
284     name = "protobuf_headers",
285     actual = "//src/google/protobuf:protobuf_headers",
286     visibility = ["//visibility:public"],
289 alias(
290     name = "json",
291     actual = "//src/google/protobuf/json",
292     visibility = ["//visibility:public"],
295 alias(
296     name = "delimited_message_util",
297     actual = "//src/google/protobuf/util:delimited_message_util",
298     visibility = ["//visibility:public"],
301 alias(
302     name = "differencer",
303     actual = "//src/google/protobuf/util:differencer",
304     visibility = ["//visibility:public"],
307 alias(
308     name = "field_mask_util",
309     actual = "//src/google/protobuf/util:field_mask_util",
310     visibility = ["//visibility:public"],
313 alias(
314     name = "json_util",
315     actual = "//src/google/protobuf/util:json_util",
316     visibility = ["//visibility:public"],
319 alias(
320     name = "time_util",
321     actual = "//src/google/protobuf/util:time_util",
322     visibility = ["//visibility:public"],
325 alias(
326     name = "type_resolver",
327     actual = "//src/google/protobuf/util:type_resolver",
328     visibility = ["//visibility:public"],
331 alias(
332     name = "cpp_features_proto",
333     actual = "//src/google/protobuf:cpp_features_proto",  # proto_library
334     visibility = ["//visibility:public"],
337 ################################################################################
338 # Java support
339 ################################################################################
341 alias(
342     name = "protobuf_java",
343     actual = "//java/core",
344     visibility = ["//visibility:public"],
347 alias(
348     name = "protobuf_javalite",
349     actual = "//java/lite",
350     visibility = ["//visibility:public"],
353 alias(
354     name = "protobuf_java_util",
355     actual = "//java/util",
356     visibility = ["//visibility:public"],
359 alias(
360     name = "java_toolchain",
361     actual = "//java/core:toolchain",
362     visibility = ["//visibility:public"],
365 alias(
366     name = "javalite_toolchain",
367     actual = "//java/lite:toolchain",
368     visibility = ["//visibility:public"],
371 alias(
372     name = "java_features_proto",
373     actual = "//java/core:java_features_proto",  # proto_library
374     visibility = ["//visibility:public"],
377 ################################################################################
378 # Python support
379 ################################################################################
381 alias(
382     name = "protobuf_python",
383     actual = "//python:protobuf_python",
384     visibility = ["//visibility:public"],
387 alias(
388     name = "python_srcs",
389     actual = "//python:python_srcs",
390     visibility = ["//python:__subpackages__"],
393 alias(
394     name = "python_test_srcs",
395     actual = "//python:python_test_srcs",
396     visibility = ["//python:__subpackages__"],
399 alias(
400     name = "well_known_types_py_pb2",
401     actual = "//python:well_known_types_py_pb2",
402     visibility = ["//visibility:public"],
405 alias(
406     name = "python_common_test_protos",
407     actual = "//python:python_common_test_protos",
408     visibility = ["//visibility:public"],
411 alias(
412     name = "python_specific_test_protos",
413     actual = "//python:python_specific_test_protos",
414     visibility = ["//visibility:public"],
417 proto_lang_toolchain(
418     name = "cc_toolchain",
419     blacklisted_protos = [
420         "//:compiler_plugin_proto",
421         "//:descriptor_proto",
422     ],
423     command_line = "--cpp_out=$(OUT)",
424     runtime = "//src/google/protobuf",
425     visibility = ["//visibility:public"],
428 ################################################################################
429 # Objective-C support
430 ################################################################################
432 alias(
433     name = "objectivec",
434     actual = "//objectivec",
435     tags = ["manual"],
436     visibility = ["//visibility:public"],
439 alias(
440     name = "protobuf_objc",
441     actual = "//objectivec",
442     tags = ["manual"],
443     visibility = ["//visibility:public"],
446 ################################################################################
447 # Test protos
448 ################################################################################
450 alias(
451     name = "lite_test_proto_srcs",
452     actual = "//src/google/protobuf:lite_test_proto_srcs",  # proto_library
453     visibility = ["//:__subpackages__"],
456 alias(
457     name = "lite_test_protos",
458     actual = "//src/google/protobuf:lite_test_protos",  # proto_library
459     visibility = ["//:__subpackages__"],
462 alias(
463     name = "test_proto_srcs",
464     actual = "//src/google/protobuf:test_proto_srcs",  # filegroup
465     visibility = ["//:__subpackages__"],
468 alias(
469     name = "test_proto_editions_srcs",
470     actual = "//src/google/protobuf:test_proto_editions_srcs",  # filegroup
471     visibility = ["//:__subpackages__"],
474 alias(
475     name = "test_protos",
476     actual = "//src/google/protobuf:test_protos",  # proto_library
477     visibility = ["//:__subpackages__"],
480 # Validate generated proto source inputs:
482 genrule(
483     name = "generated_protos",
484     testonly = 1,
485     srcs = ["//src/google/protobuf:test_proto_srcs"],
486     outs = ["unittest_gen_import.proto"],
487     cmd = "cat src/google/protobuf/unittest_import.proto > $@",
490 proto_library(
491     name = "generated_protos_proto",
492     testonly = 1,
493     srcs = [":generated_protos"],
494     deps = ["//src/google/protobuf:generic_test_protos"],
497 internal_py_proto_library(
498     name = "generated_protos_py",
499     testonly = 1,
500     srcs = [":generated_protos"],
501     default_runtime = "",
502     protoc = ":protoc",
503     deps = ["//python:python_common_test_protos"],
506 ################################################################################
507 # Conformance tests
508 ################################################################################
510 cc_proto_library(
511     name = "test_messages_proto2_cc_proto",
512     visibility = [
513         "//conformance:__pkg__",
514         "//src:__subpackages__",
515     ],
516     deps = ["//src/google/protobuf:test_messages_proto2_proto"],
519 cc_proto_library(
520     name = "test_messages_proto3_cc_proto",
521     visibility = [
522         "//conformance:__pkg__",
523         "//src:__subpackages__",
524     ],
525     deps = ["//src/google/protobuf:test_messages_proto3_proto"],
528 java_proto_library(
529     name = "test_messages_proto2_java_proto",
530     visibility = [
531         "//conformance:__pkg__",
532         "//java:__subpackages__",
533     ],
534     deps = ["//src/google/protobuf:test_messages_proto2_proto"],
537 java_proto_library(
538     name = "test_messages_proto3_java_proto",
539     visibility = [
540         "//conformance:__pkg__",
541         "//java:__subpackages__",
542     ],
543     deps = ["//src/google/protobuf:test_messages_proto3_proto"],
546 java_lite_proto_library(
547     name = "test_messages_proto2_java_proto_lite",
548     visibility = [
549         "//conformance:__pkg__",
550         "//java:__subpackages__",
551     ],
552     deps = ["//src/google/protobuf:test_messages_proto2_proto"],
555 java_lite_proto_library(
556     name = "test_messages_proto3_java_proto_lite",
557     visibility = [
558         "//conformance:__pkg__",
559         "//java:__subpackages__",
560     ],
561     deps = ["//src/google/protobuf:test_messages_proto3_proto"],
564 internal_objc_proto_library(
565     name = "test_messages_proto2_objc_proto",
566     testonly = 1,
567     srcs = ["//src/google/protobuf:test_messages_proto2.proto"],
568     includes = ["src/google/protobuf"],
569     visibility = [
570         "//conformance:__pkg__",
571         "//objectivec:__subpackages__",
572     ],
575 internal_objc_proto_library(
576     name = "test_messages_proto3_objc_proto",
577     testonly = 1,
578     srcs = ["//src/google/protobuf:test_messages_proto3.proto"],
579     includes = [
580         "src/google/protobuf",
581         # The above must come first.
582         "src",
583     ],
584     proto_deps = [":well_known_protos"],
585     visibility = [
586         "//conformance:__pkg__",
587         "//objectivec:__subpackages__",
588     ],
591 internal_php_proto_library(
592     name = "test_messages_proto3_php_proto",
593     testonly = 1,
594     srcs = ["//src/google/protobuf:test_messages_proto3.proto"],
595     outs = [
596         "GPBMetadata/TestMessagesProto3.php",
597         "Protobuf_test_messages/Proto3/EnumOnlyProto3.php",
598         "Protobuf_test_messages/Proto3/EnumOnlyProto3/PBBool.php",
599         "Protobuf_test_messages/Proto3/ForeignEnum.php",
600         "Protobuf_test_messages/Proto3/ForeignMessage.php",
601         "Protobuf_test_messages/Proto3/NullHypothesisProto3.php",
602         "Protobuf_test_messages/Proto3/TestAllTypesProto3.php",
603         "Protobuf_test_messages/Proto3/TestAllTypesProto3/AliasedEnum.php",
604         "Protobuf_test_messages/Proto3/TestAllTypesProto3/NestedEnum.php",
605         "Protobuf_test_messages/Proto3/TestAllTypesProto3/NestedMessage.php",
606     ],
607     includes = [
608         "src/google/protobuf",
609         # The above must come first.
610         "src",
611     ],
612     proto_deps = [":well_known_protos"],
613     visibility = [
614         "//conformance:__pkg__",
615         "//php:__subpackages__",
616     ],
619 filegroup(
620     name = "bzl_srcs",
621     srcs = glob(["**/*.bzl"]),
622     visibility = ["//visibility:public"],
625 ################################################################################
626 # Packaging rules
627 ################################################################################
629 # Files included in all source distributions
630 pkg_files(
631     name = "common_dist_files",
632     srcs = glob(
633         [
634             "*.bzl",
635             "cmake/*.cmake",
636             "cmake/*.in",
637             "editors/*",
638         ],
639         allow_empty = True,
640     ) + [
641         "BUILD.bazel",
642         "CMakeLists.txt",
643         "CONTRIBUTORS.txt",
644         "LICENSE",
645         "README.md",
646         "WORKSPACE",
647         "cmake/README.md",
648         "generate_descriptor_proto.sh",
649         "maven_install.json",
650         "//third_party:BUILD.bazel",
651         "//third_party:zlib.BUILD",
652     ],
653     strip_prefix = strip_prefix.from_root(""),
654     visibility = ["//pkg:__pkg__"],
657 # Additional files for C#
658 pkg_files(
659     name = "csharp_dist_files",
660     srcs = [
661         "global.json",
662     ],
663     visibility = ["//pkg:__pkg__"],
666 # Additional files for ObjC
667 pkg_files(
668     name = "objectivec_dist_files",
669     srcs = [
670         "Protobuf.podspec",
671     ],
672     visibility = ["//pkg:__pkg__"],