1 # Bazel (https://bazel.build/) BUILD file for Protobuf.
3 load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
4 load("@rules_license//rules:license.bzl", "license")
5 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
6 load("//bazel:cc_proto_library.bzl", "cc_proto_library")
7 load("//bazel:java_lite_proto_library.bzl", "java_lite_proto_library")
8 load("//bazel:java_proto_library.bzl", "java_proto_library")
9 load("//bazel:proto_library.bzl", "proto_library")
10 load("//bazel/toolchains:proto_lang_toolchain.bzl", "proto_lang_toolchain")
11 load("//build_defs:cpp_opts.bzl", "COPTS", "LINK_OPTS")
12 load(":protobuf.bzl", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library")
18 "PrivacyInfo.xcprivacy",
23 package_name = "protobuf",
24 license_text = ":LICENSE",
29 visibility = ["//cmake:__pkg__"],
32 ################################################################################
33 # Well Known Types Proto Library Rules
35 # https://developers.google.com/protocol-buffers/docs/reference/google.protobuf
36 ################################################################################
37 # These proto_library rules can be used with one of the language specific proto
38 # library rules i.e. java_proto_library:
41 # name = "any_java_proto",
42 # deps = ["@protobuf//:any_proto"],
44 ################################################################################
48 actual = "//src/google/protobuf:any_proto",
49 visibility = ["//visibility:public"],
54 actual = "//src/google/protobuf:api_proto",
55 visibility = ["//visibility:public"],
59 name = "duration_proto",
60 actual = "//src/google/protobuf:duration_proto",
61 visibility = ["//visibility:public"],
66 actual = "//src/google/protobuf:empty_proto",
67 visibility = ["//visibility:public"],
71 name = "field_mask_proto",
72 actual = "//src/google/protobuf:field_mask_proto",
73 visibility = ["//visibility:public"],
77 name = "source_context_proto",
78 actual = "//src/google/protobuf:source_context_proto",
79 visibility = ["//visibility:public"],
83 name = "struct_proto",
84 actual = "//src/google/protobuf:struct_proto",
85 visibility = ["//visibility:public"],
89 name = "timestamp_proto",
90 actual = "//src/google/protobuf:timestamp_proto",
91 visibility = ["//visibility:public"],
96 actual = "//src/google/protobuf:type_proto",
97 visibility = ["//visibility:public"],
101 name = "wrappers_proto",
102 actual = "//src/google/protobuf:wrappers_proto",
103 visibility = ["//visibility:public"],
106 # C++ targets for the well-known types
109 name = "any_cc_proto",
110 actual = "//src/google/protobuf:any_cc_proto",
111 visibility = ["//visibility:public"],
115 name = "api_cc_proto",
116 actual = "//src/google/protobuf:api_cc_proto",
117 visibility = ["//visibility:public"],
121 name = "duration_cc_proto",
122 actual = "//src/google/protobuf:duration_cc_proto",
123 visibility = ["//visibility:public"],
127 name = "empty_cc_proto",
128 actual = "//src/google/protobuf:empty_cc_proto",
129 visibility = ["//visibility:public"],
133 name = "field_mask_cc_proto",
134 actual = "//src/google/protobuf:field_mask_cc_proto",
135 visibility = ["//visibility:public"],
139 name = "source_context_cc_proto",
140 actual = "//src/google/protobuf:source_context_cc_proto",
141 visibility = ["//visibility:public"],
145 name = "struct_cc_proto",
146 actual = "//src/google/protobuf:struct_cc_proto",
147 visibility = ["//visibility:public"],
151 name = "timestamp_cc_proto",
152 actual = "//src/google/protobuf:timestamp_cc_proto",
153 visibility = ["//visibility:public"],
157 name = "type_cc_proto",
158 actual = "//src/google/protobuf:type_cc_proto",
159 visibility = ["//visibility:public"],
163 name = "wrappers_cc_proto",
164 actual = "//src/google/protobuf:wrappers_cc_proto",
165 visibility = ["//visibility:public"],
168 # upb targets for some of the well-known types
171 name = "any_upb_proto",
172 actual = "//src/google/protobuf:any_upb_proto",
173 visibility = ["//visibility:public"],
177 name = "duration_upb_proto",
178 actual = "//src/google/protobuf:duration_upb_proto",
179 visibility = ["//visibility:public"],
183 name = "empty_upb_proto",
184 actual = "//src/google/protobuf:empty_upb_proto",
185 visibility = ["//visibility:public"],
189 name = "field_mask_upb_proto",
190 actual = "//src/google/protobuf:field_mask_upb_proto",
191 visibility = ["//visibility:public"],
195 name = "struct_upb_proto",
196 actual = "//src/google/protobuf:struct_upb_proto",
197 visibility = ["//visibility:public"],
201 name = "wrappers_upb_proto",
202 actual = "//src/google/protobuf:wrappers_upb_proto",
203 visibility = ["//visibility:public"],
206 # Source files: these are aliases to a filegroup, not a `proto_library`.
208 # (This is _probably_ not what you want.)
210 name = "lite_well_known_protos",
211 actual = "//src/google/protobuf:well_known_type_protos", # filegroup
212 visibility = ["//visibility:public"],
216 name = "well_known_type_protos",
217 actual = "//src/google/protobuf:well_known_type_protos", # filegroup
218 visibility = ["//visibility:public"],
221 # Built-in runtime protos: these are part of protobuf's internal
222 # implementation, but are not Well-Known Types.
225 name = "descriptor_proto",
226 actual = "//src/google/protobuf:descriptor_proto", # proto_library
227 visibility = ["//visibility:public"],
231 name = "descriptor_proto_srcs",
232 actual = "//src/google/protobuf:descriptor_proto_srcs", # filegroup
233 visibility = ["//visibility:public"],
237 name = "compiler_plugin_proto",
238 actual = "//src/google/protobuf/compiler:plugin_proto", # proto_library
239 visibility = ["//visibility:public"],
243 name = "cc_wkt_protos",
244 deprecation = "Only for backward compatibility. Do not use.",
245 visibility = ["//visibility:public"],
248 # Source protos that are typically part of the protobuf runtime.
250 # DEPRECATED: Prefer :well_known_type_protos for the Well-Known Types
251 # (https://developers.google.com/protocol-buffers/docs/reference/google.protobuf)
252 # or :descriptor_proto(_srcs) for descriptor.proto (source), or
253 # :compiler_plugin_proto for compiler/plugin.proto.
255 name = "well_known_protos",
257 ":descriptor_proto_srcs",
258 ":well_known_type_protos",
259 "//src/google/protobuf/compiler:plugin.proto",
261 deprecation = "Prefer :well_known_type_protos instead.",
262 visibility = ["//visibility:public"],
265 ################################################################################
266 # Protocol Buffers Compiler
267 ################################################################################
271 actual = "//src/google/protobuf/compiler:protoc_lib",
272 visibility = ["//visibility:public"],
278 linkopts = LINK_OPTS,
279 visibility = ["//visibility:public"],
280 deps = ["//src/google/protobuf/compiler:protoc_lib"],
284 name = "protoc_static",
287 # This isn't possible on mac because there is no static library for lcrt0.o
288 "@platforms//os:osx": [],
289 "//build_defs:config_osx": [],
290 # When cross-compiling we need to statically link all C++ libraries.
291 "//conditions:default": ["fully_static_link"],
293 linkopts = LINK_OPTS,
294 visibility = ["//visibility:public"],
295 deps = ["//src/google/protobuf/compiler:protoc_lib"],
298 ################################################################################
300 ################################################################################
302 # Expose the runtime for the proto_lang_toolchain so that it can also be used in
303 # a user-defined proto_lang_toolchain.
306 actual = "//src/google/protobuf:protobuf_layering_check_legacy",
307 visibility = ["//visibility:public"],
311 name = "protobuf_nowkt",
312 actual = "//src/google/protobuf",
313 deprecation = "Use //:protobuf instead",
314 visibility = ["//visibility:public"],
317 # The "lite" runtime works for .proto files that specify the option:
318 # optimize_for = LITE_RUNTIME;
320 # The lite runtime does not include the `Reflection` APIs (including
321 # `Descriptor` and related types) or Well-Known Types.
324 # https://developers.google.com/protocol-buffers/docs/reference/cpp-generated#message
325 # https://developers.google.com/protocol-buffers/docs/reference/google.protobuf
327 name = "protobuf_lite",
328 actual = "//src/google/protobuf:protobuf_lite",
329 visibility = ["//visibility:public"],
332 # This provides just the header files for use in projects that need to build
333 # shared libraries for dynamic loading. This target is available until Bazel
334 # adds native support for such use cases.
335 # TODO: Remove this target once the support gets added to Bazel.
337 name = "protobuf_headers",
338 actual = "//src/google/protobuf:protobuf_headers",
339 visibility = ["//visibility:public"],
344 actual = "//src/google/protobuf/json",
345 visibility = ["//visibility:public"],
349 name = "delimited_message_util",
350 actual = "//src/google/protobuf/util:delimited_message_util",
351 visibility = ["//visibility:public"],
355 name = "differencer",
356 actual = "//src/google/protobuf/util:differencer",
357 visibility = ["//visibility:public"],
361 name = "field_mask_util",
362 actual = "//src/google/protobuf/util:field_mask_util",
363 visibility = ["//visibility:public"],
368 actual = "//src/google/protobuf/util:json_util",
369 visibility = ["//visibility:public"],
374 actual = "//src/google/protobuf/util:time_util",
375 visibility = ["//visibility:public"],
379 name = "type_resolver",
380 actual = "//src/google/protobuf/util:type_resolver",
381 visibility = ["//visibility:public"],
385 name = "cpp_features_proto",
386 actual = "//src/google/protobuf:cpp_features_proto", # proto_library
387 visibility = ["//visibility:public"],
390 ################################################################################
392 ################################################################################
395 name = "protobuf_java",
396 actual = "//java/core",
397 visibility = ["//visibility:public"],
401 name = "protobuf_javalite",
402 actual = "//java/lite",
403 visibility = ["//visibility:public"],
407 name = "protobuf_java_util",
408 actual = "//java/util",
409 visibility = ["//visibility:public"],
413 name = "java_toolchain",
414 actual = "//java/core:toolchain",
415 visibility = ["//visibility:public"],
419 name = "javalite_toolchain",
420 actual = "//java/lite:toolchain",
421 visibility = ["//visibility:public"],
425 name = "java_features_proto",
426 actual = "//java/core:java_features_proto", # proto_library
427 visibility = ["//visibility:public"],
430 ################################################################################
432 ################################################################################
435 name = "protobuf_python",
436 actual = "//python:protobuf_python",
437 visibility = ["//visibility:public"],
441 name = "python_srcs",
442 actual = "//python:python_srcs",
443 visibility = ["//python:__subpackages__"],
447 name = "python_test_srcs",
448 actual = "//python:python_test_srcs",
449 visibility = ["//python:__subpackages__"],
453 name = "well_known_types_py_pb2",
454 actual = "//python:well_known_types_py_pb2",
455 visibility = ["//visibility:public"],
459 name = "python_common_test_protos",
460 actual = "//python:python_common_test_protos",
461 visibility = ["//visibility:public"],
465 name = "python_specific_test_protos",
466 actual = "//python:python_specific_test_protos",
467 visibility = ["//visibility:public"],
470 proto_lang_toolchain(
471 name = "cc_toolchain",
472 blacklisted_protos = [
473 "//:compiler_plugin_proto",
474 "//:cpp_features_proto",
475 "//:descriptor_proto",
477 command_line = "--cpp_out=$(OUT)",
478 runtime = "//src/google/protobuf",
479 visibility = ["//visibility:public"],
482 ################################################################################
483 # Objective-C support
484 ################################################################################
488 actual = "//objectivec",
490 visibility = ["//visibility:public"],
494 name = "protobuf_objc",
495 actual = "//objectivec",
497 visibility = ["//visibility:public"],
500 ################################################################################
502 ################################################################################
505 name = "protobuf_rust",
506 actual = "//rust:protobuf",
507 visibility = ["//visibility:public"],
510 ################################################################################
512 ################################################################################
515 name = "lite_test_proto_srcs",
516 actual = "//src/google/protobuf:lite_test_proto_srcs", # proto_library
517 visibility = ["//:__subpackages__"],
521 name = "lite_test_protos",
522 actual = "//src/google/protobuf:lite_test_protos", # proto_library
523 visibility = ["//:__subpackages__"],
527 name = "test_proto_srcs",
528 actual = "//src/google/protobuf:test_proto_srcs", # filegroup
529 visibility = ["//:__subpackages__"],
533 name = "test_proto_editions_srcs",
534 actual = "//src/google/protobuf:test_proto_editions_srcs", # filegroup
535 visibility = ["//:__subpackages__"],
539 name = "test_protos",
540 actual = "//src/google/protobuf:test_protos", # proto_library
541 visibility = ["//:__subpackages__"],
544 # Validate generated proto source inputs:
547 name = "generated_protos",
549 srcs = ["//src/google/protobuf:test_proto_srcs"],
550 outs = ["unittest_gen_import.proto"],
551 cmd = "cat src/google/protobuf/unittest_import.proto > $@",
555 name = "generated_protos_proto",
557 srcs = [":generated_protos"],
558 deps = ["//src/google/protobuf:generic_test_protos"],
561 internal_py_proto_library(
562 name = "generated_protos_py",
564 srcs = [":generated_protos"],
565 default_runtime = "",
567 deps = ["//python:python_common_test_protos"],
570 ################################################################################
572 ################################################################################
575 name = "test_messages_proto2_cc_proto",
577 "//conformance:__pkg__",
578 "//src:__subpackages__",
580 deps = ["//src/google/protobuf:test_messages_proto2_proto"],
584 name = "test_messages_proto3_cc_proto",
586 "//conformance:__pkg__",
587 "//src:__subpackages__",
589 deps = ["//src/google/protobuf:test_messages_proto3_proto"],
593 name = "test_messages_proto2_java_proto",
595 "//conformance:__pkg__",
596 "//java:__subpackages__",
598 deps = ["//src/google/protobuf:test_messages_proto2_proto"],
602 name = "test_messages_proto3_java_proto",
604 "//conformance:__pkg__",
605 "//java:__subpackages__",
607 deps = ["//src/google/protobuf:test_messages_proto3_proto"],
610 java_lite_proto_library(
611 name = "test_messages_proto2_java_proto_lite",
613 "//conformance:__pkg__",
614 "//java:__subpackages__",
616 deps = ["//src/google/protobuf:test_messages_proto2_proto"],
619 java_lite_proto_library(
620 name = "test_messages_proto3_java_proto_lite",
622 "//conformance:__pkg__",
623 "//java:__subpackages__",
625 deps = ["//src/google/protobuf:test_messages_proto3_proto"],
628 internal_objc_proto_library(
629 name = "test_messages_proto2_objc_proto",
631 srcs = ["//src/google/protobuf:test_messages_proto2.proto"],
632 includes = ["src/google/protobuf"],
634 "//conformance:__pkg__",
635 "//objectivec:__subpackages__",
639 internal_objc_proto_library(
640 name = "test_messages_proto3_objc_proto",
642 srcs = ["//src/google/protobuf:test_messages_proto3.proto"],
644 "src/google/protobuf",
645 # The above must come first.
648 proto_deps = [":well_known_protos"],
650 "//conformance:__pkg__",
651 "//objectivec:__subpackages__",
655 internal_php_proto_library(
656 name = "test_messages_proto3_php_proto",
658 srcs = ["//src/google/protobuf:test_messages_proto3.proto"],
660 "GPBMetadata/TestMessagesProto3.php",
661 "Protobuf_test_messages/Proto3/EnumOnlyProto3.php",
662 "Protobuf_test_messages/Proto3/EnumOnlyProto3/PBBool.php",
663 "Protobuf_test_messages/Proto3/ForeignEnum.php",
664 "Protobuf_test_messages/Proto3/ForeignMessage.php",
665 "Protobuf_test_messages/Proto3/NullHypothesisProto3.php",
666 "Protobuf_test_messages/Proto3/TestAllTypesProto3.php",
667 "Protobuf_test_messages/Proto3/TestAllTypesProto3/AliasedEnum.php",
668 "Protobuf_test_messages/Proto3/TestAllTypesProto3/NestedEnum.php",
669 "Protobuf_test_messages/Proto3/TestAllTypesProto3/NestedMessage.php",
672 "src/google/protobuf",
673 # The above must come first.
676 proto_deps = [":well_known_protos"],
678 "//conformance:__pkg__",
679 "//php:__subpackages__",
685 srcs = glob(["**/*.bzl"]),
686 visibility = ["//visibility:public"],