xref: /aosp_15_r20/external/cronet/third_party/protobuf/pkg/BUILD.bazel (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1load("@rules_pkg//:pkg.bzl", "pkg_tar", "pkg_zip")
2load(
3    "@rules_pkg//:mappings.bzl",
4    "pkg_attributes",
5    "pkg_filegroup",
6    "pkg_files",
7    "strip_prefix",
8)
9load("//:protobuf_release.bzl", "package_naming")
10load(":build_systems.bzl", "gen_automake_file_lists", "gen_file_lists")
11load(":cc_dist_library.bzl", "cc_dist_library")
12
13package_naming(
14    name = "protobuf_pkg_naming",
15)
16
17pkg_files(
18    name = "wkt_protos_files",
19    srcs = [
20        "//:src/google/protobuf/any.proto",
21        "//:src/google/protobuf/api.proto",
22        "//:src/google/protobuf/descriptor.proto",
23        "//:src/google/protobuf/duration.proto",
24        "//:src/google/protobuf/empty.proto",
25        "//:src/google/protobuf/field_mask.proto",
26        "//:src/google/protobuf/source_context.proto",
27        "//:src/google/protobuf/struct.proto",
28        "//:src/google/protobuf/timestamp.proto",
29        "//:src/google/protobuf/type.proto",
30        "//:src/google/protobuf/wrappers.proto",
31    ],
32    prefix = "include/google/protobuf",
33    visibility = ["//visibility:private"],
34)
35
36pkg_files(
37    name = "compiler_plugin_protos_files",
38    srcs = ["//:src/google/protobuf/compiler/plugin.proto"],
39    prefix = "include/google/protobuf/compiler",
40    visibility = ["//visibility:private"],
41)
42
43################################################################################
44# Generates protoc release artifacts.
45################################################################################
46
47genrule(
48    name = "protoc_readme",
49    outs = ["readme.txt"],
50    cmd = """
51echo "Protocol Buffers - Google's data interchange format
52Copyright 2008 Google Inc.
53https://developers.google.com/protocol-buffers/
54This package contains a precompiled binary version of the protocol buffer
55compiler (protoc). This binary is intended for users who want to use Protocol
56Buffers in languages other than C++ but do not want to compile protoc
57themselves. To install, simply place this binary somewhere in your PATH.
58If you intend to use the included well known types then don't forget to
59copy the contents of the 'include' directory somewhere as well, for example
60into '/usr/local/include/'.
61Please refer to our official github site for more installation instructions:
62  https://github.com/protocolbuffers/protobuf" > $@
63    """,
64    visibility = ["//visibility:private"],
65)
66
67pkg_files(
68    name = "protoc_files",
69    srcs = ["//:protoc"],
70    attributes = pkg_attributes(mode = "0555"),
71    prefix = "bin/",
72    visibility = ["//visibility:private"],
73)
74
75pkg_zip(
76    name = "protoc_release",
77    srcs = [
78        ":compiler_plugin_protos_files",
79        ":protoc_files",
80        ":protoc_readme",
81        ":wkt_protos_files",
82    ],
83    package_file_name = "protoc-{version}-{platform}.zip",
84    package_variables = ":protobuf_pkg_naming",
85)
86
87################################################################################
88# Source distribution packaging
89#
90# TODO: these will eventually replace autotools for release artifact packaging.
91################################################################################
92
93pkg_filegroup(
94    name = "dist_common",
95    srcs = [
96        ":dist_files",
97        "//:common_dist_files",
98        "//:cpp_dist_files",  # to build protoc
99        "//benchmarks:all_dist_files",
100        "//build_defs:dist_files",
101        "//conformance:all_dist_files",
102        "@com_google_protobuf_examples//:dist_files",
103    ],
104)
105
106pkg_filegroup(
107    name = "cpp_srcs",
108    srcs = [
109        ":dist_common",
110        "//:cpp_dist_files",
111    ],
112)
113
114pkg_tar(
115    name = "dist_cpp_tar",
116    srcs = [":cpp_srcs"],
117    extension = "tar.gz",
118    package_dir = "protobuf-{version}",
119    package_file_name = "protobuf-cpp-{version}.tar.gz",
120    package_variables = ":protobuf_pkg_naming",
121)
122
123pkg_zip(
124    name = "dist_cpp_zip",
125    srcs = [":cpp_srcs"],
126    package_file_name = "protobuf-cpp-{version}.zip",
127    package_variables = ":protobuf_pkg_naming",
128)
129
130pkg_filegroup(
131    name = "csharp_srcs",
132    srcs = [
133        ":dist_common",
134        "//:csharp_dist_files",
135        "//csharp:dist_files",
136    ],
137)
138
139pkg_tar(
140    name = "dist_csharp_tar",
141    srcs = [":csharp_srcs"],
142    extension = "tar.gz",
143    package_dir = "protobuf-{version}",
144    package_file_name = "protobuf-csharp-{version}.tar.gz",
145    package_variables = ":protobuf_pkg_naming",
146)
147
148pkg_zip(
149    name = "dist_csharp_zip",
150    srcs = [":csharp_srcs"],
151    package_file_name = "protobuf-csharp-{version}.zip",
152    package_variables = ":protobuf_pkg_naming",
153)
154
155pkg_filegroup(
156    name = "java_srcs",
157    srcs = [
158        ":dist_common",
159        "//java:all_dist_files",
160    ],
161)
162
163pkg_tar(
164    name = "dist_java_tar",
165    srcs = [":java_srcs"],
166    extension = "tar.gz",
167    package_dir = "protobuf-{version}",
168    package_file_name = "protobuf-java-{version}.tar.gz",
169    package_variables = ":protobuf_pkg_naming",
170)
171
172pkg_zip(
173    name = "dist_java_zip",
174    srcs = [":java_srcs"],
175    package_file_name = "protobuf-java-{version}.zip",
176    package_variables = ":protobuf_pkg_naming",
177)
178
179pkg_filegroup(
180    name = "objectivec_srcs",
181    srcs = [
182        ":dist_common",
183        "//:objectivec_dist_files",
184        "//objectivec:dist_files",
185    ],
186)
187
188pkg_tar(
189    name = "dist_objectivec_tar",
190    srcs = [":objectivec_srcs"],
191    extension = "tar.gz",
192    package_dir = "protobuf-{version}",
193    package_file_name = "protobuf-objectivec-{version}.tar.gz",
194    package_variables = ":protobuf_pkg_naming",
195)
196
197pkg_zip(
198    name = "dist_objectivec_zip",
199    srcs = [":objectivec_srcs"],
200    package_file_name = "protobuf-objectivec-{version}.zip",
201    package_variables = ":protobuf_pkg_naming",
202)
203
204pkg_filegroup(
205    name = "php_srcs",
206    srcs = [
207        ":dist_common",
208        "//php:dist_files",
209    ],
210)
211
212pkg_tar(
213    name = "dist_php_tar",
214    srcs = [":php_srcs"],
215    extension = "tar.gz",
216    package_dir = "protobuf-{version}",
217    package_file_name = "protobuf-php-{version}.tar.gz",
218    package_variables = ":protobuf_pkg_naming",
219)
220
221pkg_zip(
222    name = "dist_php_zip",
223    srcs = [":php_srcs"],
224    package_file_name = "protobuf-php-{version}.zip",
225    package_variables = ":protobuf_pkg_naming",
226)
227
228pkg_filegroup(
229    name = "python_srcs",
230    srcs = [
231        ":dist_common",
232        "//:python_dist_files",
233    ],
234)
235
236pkg_tar(
237    name = "dist_python_tar",
238    srcs = [":python_srcs"],
239    extension = "tar.gz",
240    package_dir = "protobuf-{version}",
241    package_file_name = "protobuf-python-{version}.tar.gz",
242    package_variables = ":protobuf_pkg_naming",
243)
244
245pkg_zip(
246    name = "dist_python_zip",
247    srcs = [":python_srcs"],
248    package_file_name = "protobuf-python-{version}.zip",
249    package_variables = ":protobuf_pkg_naming",
250)
251
252pkg_filegroup(
253    name = "ruby_srcs",
254    srcs = [
255        ":dist_common",
256        "//ruby:dist_files",
257    ],
258)
259
260pkg_tar(
261    name = "dist_ruby_tar",
262    srcs = [":ruby_srcs"],
263    extension = "tar.gz",
264    package_dir = "protobuf-{version}",
265    package_file_name = "protobuf-ruby-{version}.tar.gz",
266    package_variables = ":protobuf_pkg_naming",
267)
268
269pkg_zip(
270    name = "dist_ruby_zip",
271    srcs = [":ruby_srcs"],
272    package_file_name = "protobuf-ruby-{version}.zip",
273    package_variables = ":protobuf_pkg_naming",
274)
275
276pkg_filegroup(
277    name = "dist_all",
278    srcs = [
279        ":cpp_srcs",
280        ":csharp_srcs",
281        ":java_srcs",
282        ":objectivec_srcs",
283        ":php_srcs",
284        ":python_srcs",
285        ":ruby_srcs",
286    ],
287)
288
289pkg_tar(
290    name = "dist_all_tar",
291    srcs = [":dist_all"],
292    extension = "tar.gz",
293    package_dir = "protobuf-{version}",
294    package_file_name = "protobuf-all-{version}.tar.gz",
295    package_variables = ":protobuf_pkg_naming",
296)
297
298pkg_zip(
299    name = "dist_all_zip",
300    srcs = [":dist_all"],
301    package_file_name = "protobuf-all-{version}.zip",
302    package_variables = ":protobuf_pkg_naming",
303)
304
305################################################################################
306# Generated file lists for build systems
307################################################################################
308
309gen_file_lists(
310    name = "gen_src_file_lists",
311    testonly = 1,
312    out_stem = "src_file_lists",
313    src_libs = {
314        # source rule: name in generated file
315        "//:protobuf": "libprotobuf",
316        "//:protoc_lib": "libprotoc",
317        "//:protobuf_lite": "libprotobuf_lite",
318    },
319)
320
321gen_automake_file_lists(
322    name = "gen_automake_extra_dist_lists",
323    testonly = 1,
324    out = "extra_dist_file_lists.am",
325    src_libs = {
326        # source rule: name in generated file
327        "//:common_dist_files": "dist_common",
328        "//conformance:dist_files": "dist_conformance",
329        "//benchmarks:all_dist_files": "dist_benchmark",
330        "@com_google_protobuf_examples//:dist_files": "dist_example",
331        "//:csharp_dist_files": "dist_csharp",
332        "//csharp:dist_files": "dist_csharp2",
333        "//:objectivec_dist_files": "dist_objectivec",
334        "//objectivec:dist_files": "dist_objectivec2",
335        "//php:dist_files": "dist_php",
336        "//:python_dist_files": "dist_python",
337        "//ruby:dist_files": "dist_ruby",
338    },
339)
340
341################################################################################
342# Protobuf runtime libraries.
343################################################################################
344
345cc_dist_library(
346    name = "protobuf_lite",
347    linkopts = select({
348        "//build_defs:config_msvc": [],
349        "//conditions:default": ["-lpthread"],
350    }),
351    deps = [
352        "//:protobuf_lite",
353    ],
354)
355
356cc_dist_library(
357    name = "protobuf",
358    linkopts = select({
359        "//build_defs:config_msvc": [],
360        "//conditions:default": [
361            "-lz",
362            "-lpthread",
363        ],
364    }),
365    deps = [
366        "//:protobuf",
367        "//:protobuf_lite",
368    ],
369)
370
371################################################################################
372# Distribution sources
373################################################################################
374
375pkg_files(
376    name = "dist_files",
377    srcs = glob(["*"]),
378    strip_prefix = strip_prefix.from_root(""),
379)
380