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