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")
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:
26 # name = "any_java_proto",
27 # deps = ["@protobuf//:any_proto"],
29 ################################################################################
33 actual = "//src/google/protobuf:any_proto",
34 visibility = ["//visibility:public"],
39 actual = "//src/google/protobuf:api_proto",
40 visibility = ["//visibility:public"],
44 name = "duration_proto",
45 actual = "//src/google/protobuf:duration_proto",
46 visibility = ["//visibility:public"],
51 actual = "//src/google/protobuf:empty_proto",
52 visibility = ["//visibility:public"],
56 name = "field_mask_proto",
57 actual = "//src/google/protobuf:field_mask_proto",
58 visibility = ["//visibility:public"],
62 name = "source_context_proto",
63 actual = "//src/google/protobuf:source_context_proto",
64 visibility = ["//visibility:public"],
68 name = "struct_proto",
69 actual = "//src/google/protobuf:struct_proto",
70 visibility = ["//visibility:public"],
74 name = "timestamp_proto",
75 actual = "//src/google/protobuf:timestamp_proto",
76 visibility = ["//visibility:public"],
81 actual = "//src/google/protobuf:type_proto",
82 visibility = ["//visibility:public"],
86 name = "wrappers_proto",
87 actual = "//src/google/protobuf:wrappers_proto",
88 visibility = ["//visibility:public"],
91 # C++ targets for the well-known types
94 name = "any_cc_proto",
95 actual = "//src/google/protobuf:any_cc_proto",
96 visibility = ["//visibility:public"],
100 name = "api_cc_proto",
101 actual = "//src/google/protobuf:api_cc_proto",
102 visibility = ["//visibility:public"],
106 name = "duration_cc_proto",
107 actual = "//src/google/protobuf:duration_cc_proto",
108 visibility = ["//visibility:public"],
112 name = "empty_cc_proto",
113 actual = "//src/google/protobuf:empty_cc_proto",
114 visibility = ["//visibility:public"],
118 name = "field_mask_cc_proto",
119 actual = "//src/google/protobuf:field_mask_cc_proto",
120 visibility = ["//visibility:public"],
124 name = "source_context_cc_proto",
125 actual = "//src/google/protobuf:source_context_cc_proto",
126 visibility = ["//visibility:public"],
130 name = "struct_cc_proto",
131 actual = "//src/google/protobuf:struct_cc_proto",
132 visibility = ["//visibility:public"],
136 name = "timestamp_cc_proto",
137 actual = "//src/google/protobuf:timestamp_cc_proto",
138 visibility = ["//visibility:public"],
142 name = "type_cc_proto",
143 actual = "//src/google/protobuf:type_cc_proto",
144 visibility = ["//visibility:public"],
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.)
157 name = "lite_well_known_protos",
158 actual = "//src/google/protobuf:well_known_type_protos", # filegroup
159 visibility = ["//visibility:public"],
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.
172 name = "descriptor_proto",
173 actual = "//src/google/protobuf:descriptor_proto", # proto_library
174 visibility = ["//visibility:public"],
178 name = "descriptor_proto_srcs",
179 actual = "//src/google/protobuf:descriptor_proto_srcs", # filegroup
180 visibility = ["//visibility:public"],
184 name = "compiler_plugin_proto",
185 actual = "//src/google/protobuf/compiler:plugin_proto", # proto_library
186 visibility = ["//visibility:public"],
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.
202 name = "well_known_protos",
204 ":descriptor_proto_srcs",
205 ":well_known_type_protos",
206 "//src/google/protobuf/compiler:plugin.proto",
208 deprecation = "Prefer :well_known_type_protos instead.",
209 visibility = ["//visibility:public"],
212 ################################################################################
213 # Protocol Buffers Compiler
214 ################################################################################
218 actual = "//src/google/protobuf/compiler:protoc_lib",
219 visibility = ["//visibility:public"],
225 linkopts = LINK_OPTS,
226 visibility = ["//visibility:public"],
227 deps = ["//src/google/protobuf/compiler:protoc_lib"],
231 name = "protoc_static",
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"],
240 linkopts = LINK_OPTS,
241 visibility = ["//visibility:public"],
242 deps = ["//src/google/protobuf/compiler:protoc_lib"],
245 ################################################################################
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.
253 actual = "//src/google/protobuf:protobuf_layering_check_legacy",
254 visibility = ["//visibility:public"],
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.
271 # https://developers.google.com/protocol-buffers/docs/reference/cpp-generated#message
272 # https://developers.google.com/protocol-buffers/docs/reference/google.protobuf
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.
284 name = "protobuf_headers",
285 actual = "//src/google/protobuf:protobuf_headers",
286 visibility = ["//visibility:public"],
291 actual = "//src/google/protobuf/json",
292 visibility = ["//visibility:public"],
296 name = "delimited_message_util",
297 actual = "//src/google/protobuf/util:delimited_message_util",
298 visibility = ["//visibility:public"],
302 name = "differencer",
303 actual = "//src/google/protobuf/util:differencer",
304 visibility = ["//visibility:public"],
308 name = "field_mask_util",
309 actual = "//src/google/protobuf/util:field_mask_util",
310 visibility = ["//visibility:public"],
315 actual = "//src/google/protobuf/util:json_util",
316 visibility = ["//visibility:public"],
321 actual = "//src/google/protobuf/util:time_util",
322 visibility = ["//visibility:public"],
326 name = "type_resolver",
327 actual = "//src/google/protobuf/util:type_resolver",
328 visibility = ["//visibility:public"],
332 name = "cpp_features_proto",
333 actual = "//src/google/protobuf:cpp_features_proto", # proto_library
334 visibility = ["//visibility:public"],
337 ################################################################################
339 ################################################################################
342 name = "protobuf_java",
343 actual = "//java/core",
344 visibility = ["//visibility:public"],
348 name = "protobuf_javalite",
349 actual = "//java/lite",
350 visibility = ["//visibility:public"],
354 name = "protobuf_java_util",
355 actual = "//java/util",
356 visibility = ["//visibility:public"],
360 name = "java_toolchain",
361 actual = "//java/core:toolchain",
362 visibility = ["//visibility:public"],
366 name = "javalite_toolchain",
367 actual = "//java/lite:toolchain",
368 visibility = ["//visibility:public"],
372 name = "java_features_proto",
373 actual = "//java/core:java_features_proto", # proto_library
374 visibility = ["//visibility:public"],
377 ################################################################################
379 ################################################################################
382 name = "protobuf_python",
383 actual = "//python:protobuf_python",
384 visibility = ["//visibility:public"],
388 name = "python_srcs",
389 actual = "//python:python_srcs",
390 visibility = ["//python:__subpackages__"],
394 name = "python_test_srcs",
395 actual = "//python:python_test_srcs",
396 visibility = ["//python:__subpackages__"],
400 name = "well_known_types_py_pb2",
401 actual = "//python:well_known_types_py_pb2",
402 visibility = ["//visibility:public"],
406 name = "python_common_test_protos",
407 actual = "//python:python_common_test_protos",
408 visibility = ["//visibility:public"],
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",
423 command_line = "--cpp_out=$(OUT)",
424 runtime = "//src/google/protobuf",
425 visibility = ["//visibility:public"],
428 ################################################################################
429 # Objective-C support
430 ################################################################################
434 actual = "//objectivec",
436 visibility = ["//visibility:public"],
440 name = "protobuf_objc",
441 actual = "//objectivec",
443 visibility = ["//visibility:public"],
446 ################################################################################
448 ################################################################################
451 name = "lite_test_proto_srcs",
452 actual = "//src/google/protobuf:lite_test_proto_srcs", # proto_library
453 visibility = ["//:__subpackages__"],
457 name = "lite_test_protos",
458 actual = "//src/google/protobuf:lite_test_protos", # proto_library
459 visibility = ["//:__subpackages__"],
463 name = "test_proto_srcs",
464 actual = "//src/google/protobuf:test_proto_srcs", # filegroup
465 visibility = ["//:__subpackages__"],
469 name = "test_proto_editions_srcs",
470 actual = "//src/google/protobuf:test_proto_editions_srcs", # filegroup
471 visibility = ["//:__subpackages__"],
475 name = "test_protos",
476 actual = "//src/google/protobuf:test_protos", # proto_library
477 visibility = ["//:__subpackages__"],
480 # Validate generated proto source inputs:
483 name = "generated_protos",
485 srcs = ["//src/google/protobuf:test_proto_srcs"],
486 outs = ["unittest_gen_import.proto"],
487 cmd = "cat src/google/protobuf/unittest_import.proto > $@",
491 name = "generated_protos_proto",
493 srcs = [":generated_protos"],
494 deps = ["//src/google/protobuf:generic_test_protos"],
497 internal_py_proto_library(
498 name = "generated_protos_py",
500 srcs = [":generated_protos"],
501 default_runtime = "",
503 deps = ["//python:python_common_test_protos"],
506 ################################################################################
508 ################################################################################
511 name = "test_messages_proto2_cc_proto",
513 "//conformance:__pkg__",
514 "//src:__subpackages__",
516 deps = ["//src/google/protobuf:test_messages_proto2_proto"],
520 name = "test_messages_proto3_cc_proto",
522 "//conformance:__pkg__",
523 "//src:__subpackages__",
525 deps = ["//src/google/protobuf:test_messages_proto3_proto"],
529 name = "test_messages_proto2_java_proto",
531 "//conformance:__pkg__",
532 "//java:__subpackages__",
534 deps = ["//src/google/protobuf:test_messages_proto2_proto"],
538 name = "test_messages_proto3_java_proto",
540 "//conformance:__pkg__",
541 "//java:__subpackages__",
543 deps = ["//src/google/protobuf:test_messages_proto3_proto"],
546 java_lite_proto_library(
547 name = "test_messages_proto2_java_proto_lite",
549 "//conformance:__pkg__",
550 "//java:__subpackages__",
552 deps = ["//src/google/protobuf:test_messages_proto2_proto"],
555 java_lite_proto_library(
556 name = "test_messages_proto3_java_proto_lite",
558 "//conformance:__pkg__",
559 "//java:__subpackages__",
561 deps = ["//src/google/protobuf:test_messages_proto3_proto"],
564 internal_objc_proto_library(
565 name = "test_messages_proto2_objc_proto",
567 srcs = ["//src/google/protobuf:test_messages_proto2.proto"],
568 includes = ["src/google/protobuf"],
570 "//conformance:__pkg__",
571 "//objectivec:__subpackages__",
575 internal_objc_proto_library(
576 name = "test_messages_proto3_objc_proto",
578 srcs = ["//src/google/protobuf:test_messages_proto3.proto"],
580 "src/google/protobuf",
581 # The above must come first.
584 proto_deps = [":well_known_protos"],
586 "//conformance:__pkg__",
587 "//objectivec:__subpackages__",
591 internal_php_proto_library(
592 name = "test_messages_proto3_php_proto",
594 srcs = ["//src/google/protobuf:test_messages_proto3.proto"],
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",
608 "src/google/protobuf",
609 # The above must come first.
612 proto_deps = [":well_known_protos"],
614 "//conformance:__pkg__",
615 "//php:__subpackages__",
621 srcs = glob(["**/*.bzl"]),
622 visibility = ["//visibility:public"],
625 ################################################################################
627 ################################################################################
629 # Files included in all source distributions
631 name = "common_dist_files",
648 "generate_descriptor_proto.sh",
649 "maven_install.json",
650 "//third_party:BUILD.bazel",
651 "//third_party:zlib.BUILD",
653 strip_prefix = strip_prefix.from_root(""),
654 visibility = ["//pkg:__pkg__"],
657 # Additional files for C#
659 name = "csharp_dist_files",
663 visibility = ["//pkg:__pkg__"],
666 # Additional files for ObjC
668 name = "objectivec_dist_files",
672 visibility = ["//pkg:__pkg__"],