Simplify generated string_view APIs.
[google-protobuf.git] / BUILD.bazel
blob560eed69e3d6cf3222227577a9ed071ad4f5d795
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")
14 licenses(["notice"])
16 exports_files([
17     "LICENSE",
18     "PrivacyInfo.xcprivacy",
21 license(
22     name = "license",
23     package_name = "protobuf",
24     license_text = ":LICENSE",
27 exports_files(
28     ["MODULE.bazel"],
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:
40 # java_proto_library(
41 #   name = "any_java_proto",
42 #   deps = ["@protobuf//:any_proto"],
43 # )
44 ################################################################################
46 alias(
47     name = "any_proto",
48     actual = "//src/google/protobuf:any_proto",
49     visibility = ["//visibility:public"],
52 alias(
53     name = "api_proto",
54     actual = "//src/google/protobuf:api_proto",
55     visibility = ["//visibility:public"],
58 alias(
59     name = "duration_proto",
60     actual = "//src/google/protobuf:duration_proto",
61     visibility = ["//visibility:public"],
64 alias(
65     name = "empty_proto",
66     actual = "//src/google/protobuf:empty_proto",
67     visibility = ["//visibility:public"],
70 alias(
71     name = "field_mask_proto",
72     actual = "//src/google/protobuf:field_mask_proto",
73     visibility = ["//visibility:public"],
76 alias(
77     name = "source_context_proto",
78     actual = "//src/google/protobuf:source_context_proto",
79     visibility = ["//visibility:public"],
82 alias(
83     name = "struct_proto",
84     actual = "//src/google/protobuf:struct_proto",
85     visibility = ["//visibility:public"],
88 alias(
89     name = "timestamp_proto",
90     actual = "//src/google/protobuf:timestamp_proto",
91     visibility = ["//visibility:public"],
94 alias(
95     name = "type_proto",
96     actual = "//src/google/protobuf:type_proto",
97     visibility = ["//visibility:public"],
100 alias(
101     name = "wrappers_proto",
102     actual = "//src/google/protobuf:wrappers_proto",
103     visibility = ["//visibility:public"],
106 # C++ targets for the well-known types
108 alias(
109     name = "any_cc_proto",
110     actual = "//src/google/protobuf:any_cc_proto",
111     visibility = ["//visibility:public"],
114 alias(
115     name = "api_cc_proto",
116     actual = "//src/google/protobuf:api_cc_proto",
117     visibility = ["//visibility:public"],
120 alias(
121     name = "duration_cc_proto",
122     actual = "//src/google/protobuf:duration_cc_proto",
123     visibility = ["//visibility:public"],
126 alias(
127     name = "empty_cc_proto",
128     actual = "//src/google/protobuf:empty_cc_proto",
129     visibility = ["//visibility:public"],
132 alias(
133     name = "field_mask_cc_proto",
134     actual = "//src/google/protobuf:field_mask_cc_proto",
135     visibility = ["//visibility:public"],
138 alias(
139     name = "source_context_cc_proto",
140     actual = "//src/google/protobuf:source_context_cc_proto",
141     visibility = ["//visibility:public"],
144 alias(
145     name = "struct_cc_proto",
146     actual = "//src/google/protobuf:struct_cc_proto",
147     visibility = ["//visibility:public"],
150 alias(
151     name = "timestamp_cc_proto",
152     actual = "//src/google/protobuf:timestamp_cc_proto",
153     visibility = ["//visibility:public"],
156 alias(
157     name = "type_cc_proto",
158     actual = "//src/google/protobuf:type_cc_proto",
159     visibility = ["//visibility:public"],
162 alias(
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
170 alias(
171     name = "any_upb_proto",
172     actual = "//src/google/protobuf:any_upb_proto",
173     visibility = ["//visibility:public"],
176 alias(
177     name = "duration_upb_proto",
178     actual = "//src/google/protobuf:duration_upb_proto",
179     visibility = ["//visibility:public"],
182 alias(
183     name = "empty_upb_proto",
184     actual = "//src/google/protobuf:empty_upb_proto",
185     visibility = ["//visibility:public"],
188 alias(
189     name = "field_mask_upb_proto",
190     actual = "//src/google/protobuf:field_mask_upb_proto",
191     visibility = ["//visibility:public"],
194 alias(
195     name = "struct_upb_proto",
196     actual = "//src/google/protobuf:struct_upb_proto",
197     visibility = ["//visibility:public"],
200 alias(
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.)
209 alias(
210     name = "lite_well_known_protos",
211     actual = "//src/google/protobuf:well_known_type_protos",  # filegroup
212     visibility = ["//visibility:public"],
215 alias(
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.
224 alias(
225     name = "descriptor_proto",
226     actual = "//src/google/protobuf:descriptor_proto",  # proto_library
227     visibility = ["//visibility:public"],
230 alias(
231     name = "descriptor_proto_srcs",
232     actual = "//src/google/protobuf:descriptor_proto_srcs",  # filegroup
233     visibility = ["//visibility:public"],
236 alias(
237     name = "compiler_plugin_proto",
238     actual = "//src/google/protobuf/compiler:plugin_proto",  # proto_library
239     visibility = ["//visibility:public"],
242 cc_library(
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.
254 filegroup(
255     name = "well_known_protos",
256     srcs = [
257         ":descriptor_proto_srcs",
258         ":well_known_type_protos",
259         "//src/google/protobuf/compiler:plugin.proto",
260     ],
261     deprecation = "Prefer :well_known_type_protos instead.",
262     visibility = ["//visibility:public"],
265 ################################################################################
266 # Protocol Buffers Compiler
267 ################################################################################
269 alias(
270     name = "protoc_lib",
271     actual = "//src/google/protobuf/compiler:protoc_lib",
272     visibility = ["//visibility:public"],
275 cc_binary(
276     name = "protoc",
277     copts = COPTS,
278     linkopts = LINK_OPTS,
279     visibility = ["//visibility:public"],
280     deps = ["//src/google/protobuf/compiler:protoc_lib"],
283 cc_binary(
284     name = "protoc_static",
285     copts = COPTS,
286     features = select({
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"],
292     }),
293     linkopts = LINK_OPTS,
294     visibility = ["//visibility:public"],
295     deps = ["//src/google/protobuf/compiler:protoc_lib"],
298 ################################################################################
299 # C++ runtime
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.
304 alias(
305     name = "protobuf",
306     actual = "//src/google/protobuf:protobuf_layering_check_legacy",
307     visibility = ["//visibility:public"],
310 alias(
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.
323 # See also:
324 #     https://developers.google.com/protocol-buffers/docs/reference/cpp-generated#message
325 #     https://developers.google.com/protocol-buffers/docs/reference/google.protobuf
326 alias(
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.
336 alias(
337     name = "protobuf_headers",
338     actual = "//src/google/protobuf:protobuf_headers",
339     visibility = ["//visibility:public"],
342 alias(
343     name = "json",
344     actual = "//src/google/protobuf/json",
345     visibility = ["//visibility:public"],
348 alias(
349     name = "delimited_message_util",
350     actual = "//src/google/protobuf/util:delimited_message_util",
351     visibility = ["//visibility:public"],
354 alias(
355     name = "differencer",
356     actual = "//src/google/protobuf/util:differencer",
357     visibility = ["//visibility:public"],
360 alias(
361     name = "field_mask_util",
362     actual = "//src/google/protobuf/util:field_mask_util",
363     visibility = ["//visibility:public"],
366 alias(
367     name = "json_util",
368     actual = "//src/google/protobuf/util:json_util",
369     visibility = ["//visibility:public"],
372 alias(
373     name = "time_util",
374     actual = "//src/google/protobuf/util:time_util",
375     visibility = ["//visibility:public"],
378 alias(
379     name = "type_resolver",
380     actual = "//src/google/protobuf/util:type_resolver",
381     visibility = ["//visibility:public"],
384 alias(
385     name = "cpp_features_proto",
386     actual = "//src/google/protobuf:cpp_features_proto",  # proto_library
387     visibility = ["//visibility:public"],
390 ################################################################################
391 # Java support
392 ################################################################################
394 alias(
395     name = "protobuf_java",
396     actual = "//java/core",
397     visibility = ["//visibility:public"],
400 alias(
401     name = "protobuf_javalite",
402     actual = "//java/lite",
403     visibility = ["//visibility:public"],
406 alias(
407     name = "protobuf_java_util",
408     actual = "//java/util",
409     visibility = ["//visibility:public"],
412 alias(
413     name = "java_toolchain",
414     actual = "//java/core:toolchain",
415     visibility = ["//visibility:public"],
418 alias(
419     name = "javalite_toolchain",
420     actual = "//java/lite:toolchain",
421     visibility = ["//visibility:public"],
424 alias(
425     name = "java_features_proto",
426     actual = "//java/core:java_features_proto",  # proto_library
427     visibility = ["//visibility:public"],
430 ################################################################################
431 # Python support
432 ################################################################################
434 alias(
435     name = "protobuf_python",
436     actual = "//python:protobuf_python",
437     visibility = ["//visibility:public"],
440 alias(
441     name = "python_srcs",
442     actual = "//python:python_srcs",
443     visibility = ["//python:__subpackages__"],
446 alias(
447     name = "python_test_srcs",
448     actual = "//python:python_test_srcs",
449     visibility = ["//python:__subpackages__"],
452 alias(
453     name = "well_known_types_py_pb2",
454     actual = "//python:well_known_types_py_pb2",
455     visibility = ["//visibility:public"],
458 alias(
459     name = "python_common_test_protos",
460     actual = "//python:python_common_test_protos",
461     visibility = ["//visibility:public"],
464 alias(
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",
476     ],
477     command_line = "--cpp_out=$(OUT)",
478     runtime = "//src/google/protobuf",
479     visibility = ["//visibility:public"],
482 ################################################################################
483 # Objective-C support
484 ################################################################################
486 alias(
487     name = "objectivec",
488     actual = "//objectivec",
489     tags = ["manual"],
490     visibility = ["//visibility:public"],
493 alias(
494     name = "protobuf_objc",
495     actual = "//objectivec",
496     tags = ["manual"],
497     visibility = ["//visibility:public"],
500 ################################################################################
501 # Rust support
502 ################################################################################
504 alias(
505     name = "protobuf_rust",
506     actual = "//rust:protobuf",
507     visibility = ["//visibility:public"],
510 ################################################################################
511 # Test protos
512 ################################################################################
514 alias(
515     name = "lite_test_proto_srcs",
516     actual = "//src/google/protobuf:lite_test_proto_srcs",  # proto_library
517     visibility = ["//:__subpackages__"],
520 alias(
521     name = "lite_test_protos",
522     actual = "//src/google/protobuf:lite_test_protos",  # proto_library
523     visibility = ["//:__subpackages__"],
526 alias(
527     name = "test_proto_srcs",
528     actual = "//src/google/protobuf:test_proto_srcs",  # filegroup
529     visibility = ["//:__subpackages__"],
532 alias(
533     name = "test_proto_editions_srcs",
534     actual = "//src/google/protobuf:test_proto_editions_srcs",  # filegroup
535     visibility = ["//:__subpackages__"],
538 alias(
539     name = "test_protos",
540     actual = "//src/google/protobuf:test_protos",  # proto_library
541     visibility = ["//:__subpackages__"],
544 # Validate generated proto source inputs:
546 genrule(
547     name = "generated_protos",
548     testonly = 1,
549     srcs = ["//src/google/protobuf:test_proto_srcs"],
550     outs = ["unittest_gen_import.proto"],
551     cmd = "cat src/google/protobuf/unittest_import.proto > $@",
554 proto_library(
555     name = "generated_protos_proto",
556     testonly = 1,
557     srcs = [":generated_protos"],
558     deps = ["//src/google/protobuf:generic_test_protos"],
561 internal_py_proto_library(
562     name = "generated_protos_py",
563     testonly = 1,
564     srcs = [":generated_protos"],
565     default_runtime = "",
566     protoc = ":protoc",
567     deps = ["//python:python_common_test_protos"],
570 ################################################################################
571 # Conformance tests
572 ################################################################################
574 cc_proto_library(
575     name = "test_messages_proto2_cc_proto",
576     visibility = [
577         "//conformance:__pkg__",
578         "//src:__subpackages__",
579     ],
580     deps = ["//src/google/protobuf:test_messages_proto2_proto"],
583 cc_proto_library(
584     name = "test_messages_proto3_cc_proto",
585     visibility = [
586         "//conformance:__pkg__",
587         "//src:__subpackages__",
588     ],
589     deps = ["//src/google/protobuf:test_messages_proto3_proto"],
592 java_proto_library(
593     name = "test_messages_proto2_java_proto",
594     visibility = [
595         "//conformance:__pkg__",
596         "//java:__subpackages__",
597     ],
598     deps = ["//src/google/protobuf:test_messages_proto2_proto"],
601 java_proto_library(
602     name = "test_messages_proto3_java_proto",
603     visibility = [
604         "//conformance:__pkg__",
605         "//java:__subpackages__",
606     ],
607     deps = ["//src/google/protobuf:test_messages_proto3_proto"],
610 java_lite_proto_library(
611     name = "test_messages_proto2_java_proto_lite",
612     visibility = [
613         "//conformance:__pkg__",
614         "//java:__subpackages__",
615     ],
616     deps = ["//src/google/protobuf:test_messages_proto2_proto"],
619 java_lite_proto_library(
620     name = "test_messages_proto3_java_proto_lite",
621     visibility = [
622         "//conformance:__pkg__",
623         "//java:__subpackages__",
624     ],
625     deps = ["//src/google/protobuf:test_messages_proto3_proto"],
628 internal_objc_proto_library(
629     name = "test_messages_proto2_objc_proto",
630     testonly = 1,
631     srcs = ["//src/google/protobuf:test_messages_proto2.proto"],
632     includes = ["src/google/protobuf"],
633     visibility = [
634         "//conformance:__pkg__",
635         "//objectivec:__subpackages__",
636     ],
639 internal_objc_proto_library(
640     name = "test_messages_proto3_objc_proto",
641     testonly = 1,
642     srcs = ["//src/google/protobuf:test_messages_proto3.proto"],
643     includes = [
644         "src/google/protobuf",
645         # The above must come first.
646         "src",
647     ],
648     proto_deps = [":well_known_protos"],
649     visibility = [
650         "//conformance:__pkg__",
651         "//objectivec:__subpackages__",
652     ],
655 internal_php_proto_library(
656     name = "test_messages_proto3_php_proto",
657     testonly = 1,
658     srcs = ["//src/google/protobuf:test_messages_proto3.proto"],
659     outs = [
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",
670     ],
671     includes = [
672         "src/google/protobuf",
673         # The above must come first.
674         "src",
675     ],
676     proto_deps = [":well_known_protos"],
677     visibility = [
678         "//conformance:__pkg__",
679         "//php:__subpackages__",
680     ],
683 filegroup(
684     name = "bzl_srcs",
685     srcs = glob(["**/*.bzl"]),
686     visibility = ["//visibility:public"],