| load("@rules_pkg//:pkg.bzl", "pkg_tar", "pkg_zip") |
| load( |
| "@rules_pkg//:mappings.bzl", |
| "pkg_attributes", |
| "pkg_filegroup", |
| "pkg_files", |
| "strip_prefix", |
| ) |
| load("//:protobuf_release.bzl", "package_naming") |
| load(":build_systems.bzl", "gen_automake_file_lists", "gen_file_lists") |
| load(":cc_dist_library.bzl", "cc_dist_library") |
| |
| package_naming( |
| name = "protobuf_pkg_naming", |
| ) |
| |
| pkg_files( |
| name = "wkt_protos_files", |
| srcs = [ |
| "//:src/google/protobuf/any.proto", |
| "//:src/google/protobuf/api.proto", |
| "//:src/google/protobuf/descriptor.proto", |
| "//:src/google/protobuf/duration.proto", |
| "//:src/google/protobuf/empty.proto", |
| "//:src/google/protobuf/field_mask.proto", |
| "//:src/google/protobuf/source_context.proto", |
| "//:src/google/protobuf/struct.proto", |
| "//:src/google/protobuf/timestamp.proto", |
| "//:src/google/protobuf/type.proto", |
| "//:src/google/protobuf/wrappers.proto", |
| ], |
| prefix = "include/google/protobuf", |
| visibility = ["//visibility:private"], |
| ) |
| |
| pkg_files( |
| name = "compiler_plugin_protos_files", |
| srcs = ["//:src/google/protobuf/compiler/plugin.proto"], |
| prefix = "include/google/protobuf/compiler", |
| visibility = ["//visibility:private"], |
| ) |
| |
| ################################################################################ |
| # Generates protoc release artifacts. |
| ################################################################################ |
| |
| genrule( |
| name = "protoc_readme", |
| outs = ["readme.txt"], |
| cmd = """ |
| echo "Protocol Buffers - Google's data interchange format |
| Copyright 2008 Google Inc. |
| https://developers.google.com/protocol-buffers/ |
| This package contains a precompiled binary version of the protocol buffer |
| compiler (protoc). This binary is intended for users who want to use Protocol |
| Buffers in languages other than C++ but do not want to compile protoc |
| themselves. To install, simply place this binary somewhere in your PATH. |
| If you intend to use the included well known types then don't forget to |
| copy the contents of the 'include' directory somewhere as well, for example |
| into '/usr/local/include/'. |
| Please refer to our official github site for more installation instructions: |
| https://github.com/protocolbuffers/protobuf" > $@ |
| """, |
| visibility = ["//visibility:private"], |
| ) |
| |
| pkg_files( |
| name = "protoc_files", |
| srcs = ["//:protoc"], |
| attributes = pkg_attributes(mode = "0555"), |
| prefix = "bin/", |
| visibility = ["//visibility:private"], |
| ) |
| |
| pkg_zip( |
| name = "protoc_release", |
| srcs = [ |
| ":compiler_plugin_protos_files", |
| ":protoc_files", |
| ":protoc_readme", |
| ":wkt_protos_files", |
| ], |
| package_file_name = "protoc-{version}-{platform}.zip", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| ################################################################################ |
| # Source distribution packaging |
| # |
| # TODO: these will eventually replace autotools for release artifact packaging. |
| ################################################################################ |
| |
| pkg_filegroup( |
| name = "dist_common", |
| srcs = [ |
| ":dist_files", |
| "//:common_dist_files", |
| "//:cpp_dist_files", # to build protoc |
| "//benchmarks:all_dist_files", |
| "//build_defs:dist_files", |
| "//conformance:all_dist_files", |
| "@com_google_protobuf_examples//:dist_files", |
| ], |
| ) |
| |
| pkg_filegroup( |
| name = "cpp_srcs", |
| srcs = [ |
| ":dist_common", |
| "//:cpp_dist_files", |
| ], |
| ) |
| |
| pkg_tar( |
| name = "dist_cpp_tar", |
| srcs = [":cpp_srcs"], |
| extension = "tar.gz", |
| package_dir = "protobuf-{version}", |
| package_file_name = "protobuf-cpp-{version}.tar.gz", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_zip( |
| name = "dist_cpp_zip", |
| srcs = [":cpp_srcs"], |
| package_file_name = "protobuf-cpp-{version}.zip", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_filegroup( |
| name = "csharp_srcs", |
| srcs = [ |
| ":dist_common", |
| "//:csharp_dist_files", |
| "//csharp:dist_files", |
| ], |
| ) |
| |
| pkg_tar( |
| name = "dist_csharp_tar", |
| srcs = [":csharp_srcs"], |
| extension = "tar.gz", |
| package_dir = "protobuf-{version}", |
| package_file_name = "protobuf-csharp-{version}.tar.gz", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_zip( |
| name = "dist_csharp_zip", |
| srcs = [":csharp_srcs"], |
| package_file_name = "protobuf-csharp-{version}.zip", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_filegroup( |
| name = "java_srcs", |
| srcs = [ |
| ":dist_common", |
| "//java:all_dist_files", |
| ], |
| ) |
| |
| pkg_tar( |
| name = "dist_java_tar", |
| srcs = [":java_srcs"], |
| extension = "tar.gz", |
| package_dir = "protobuf-{version}", |
| package_file_name = "protobuf-java-{version}.tar.gz", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_zip( |
| name = "dist_java_zip", |
| srcs = [":java_srcs"], |
| package_file_name = "protobuf-java-{version}.zip", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_filegroup( |
| name = "objectivec_srcs", |
| srcs = [ |
| ":dist_common", |
| "//:objectivec_dist_files", |
| "//objectivec:dist_files", |
| ], |
| ) |
| |
| pkg_tar( |
| name = "dist_objectivec_tar", |
| srcs = [":objectivec_srcs"], |
| extension = "tar.gz", |
| package_dir = "protobuf-{version}", |
| package_file_name = "protobuf-objectivec-{version}.tar.gz", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_zip( |
| name = "dist_objectivec_zip", |
| srcs = [":objectivec_srcs"], |
| package_file_name = "protobuf-objectivec-{version}.zip", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_filegroup( |
| name = "php_srcs", |
| srcs = [ |
| ":dist_common", |
| "//php:dist_files", |
| ], |
| ) |
| |
| pkg_tar( |
| name = "dist_php_tar", |
| srcs = [":php_srcs"], |
| extension = "tar.gz", |
| package_dir = "protobuf-{version}", |
| package_file_name = "protobuf-php-{version}.tar.gz", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_zip( |
| name = "dist_php_zip", |
| srcs = [":php_srcs"], |
| package_file_name = "protobuf-php-{version}.zip", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_filegroup( |
| name = "python_srcs", |
| srcs = [ |
| ":dist_common", |
| "//:python_dist_files", |
| ], |
| ) |
| |
| pkg_tar( |
| name = "dist_python_tar", |
| srcs = [":python_srcs"], |
| extension = "tar.gz", |
| package_dir = "protobuf-{version}", |
| package_file_name = "protobuf-python-{version}.tar.gz", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_zip( |
| name = "dist_python_zip", |
| srcs = [":python_srcs"], |
| package_file_name = "protobuf-python-{version}.zip", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_filegroup( |
| name = "ruby_srcs", |
| srcs = [ |
| ":dist_common", |
| "//ruby:dist_files", |
| ], |
| ) |
| |
| pkg_tar( |
| name = "dist_ruby_tar", |
| srcs = [":ruby_srcs"], |
| extension = "tar.gz", |
| package_dir = "protobuf-{version}", |
| package_file_name = "protobuf-ruby-{version}.tar.gz", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_zip( |
| name = "dist_ruby_zip", |
| srcs = [":ruby_srcs"], |
| package_file_name = "protobuf-ruby-{version}.zip", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_filegroup( |
| name = "dist_all", |
| srcs = [ |
| ":cpp_srcs", |
| ":csharp_srcs", |
| ":java_srcs", |
| ":objectivec_srcs", |
| ":php_srcs", |
| ":python_srcs", |
| ":ruby_srcs", |
| ], |
| ) |
| |
| pkg_tar( |
| name = "dist_all_tar", |
| srcs = [":dist_all"], |
| extension = "tar.gz", |
| package_dir = "protobuf-{version}", |
| package_file_name = "protobuf-all-{version}.tar.gz", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| pkg_zip( |
| name = "dist_all_zip", |
| srcs = [":dist_all"], |
| package_file_name = "protobuf-all-{version}.zip", |
| package_variables = ":protobuf_pkg_naming", |
| ) |
| |
| ################################################################################ |
| # Generated file lists for build systems |
| ################################################################################ |
| |
| gen_file_lists( |
| name = "gen_src_file_lists", |
| testonly = 1, |
| out_stem = "src_file_lists", |
| src_libs = { |
| # source rule: name in generated file |
| "//:protobuf": "libprotobuf", |
| "//:protoc_lib": "libprotoc", |
| "//:protobuf_lite": "libprotobuf_lite", |
| }, |
| ) |
| |
| gen_automake_file_lists( |
| name = "gen_automake_extra_dist_lists", |
| testonly = 1, |
| out = "extra_dist_file_lists.am", |
| src_libs = { |
| # source rule: name in generated file |
| "//:common_dist_files": "dist_common", |
| "//conformance:dist_files": "dist_conformance", |
| "//benchmarks:all_dist_files": "dist_benchmark", |
| "@com_google_protobuf_examples//:dist_files": "dist_example", |
| "//:csharp_dist_files": "dist_csharp", |
| "//csharp:dist_files": "dist_csharp2", |
| "//:objectivec_dist_files": "dist_objectivec", |
| "//objectivec:dist_files": "dist_objectivec2", |
| "//php:dist_files": "dist_php", |
| "//:python_dist_files": "dist_python", |
| "//ruby:dist_files": "dist_ruby", |
| }, |
| ) |
| |
| ################################################################################ |
| # Protobuf runtime libraries. |
| ################################################################################ |
| |
| cc_dist_library( |
| name = "protobuf_lite", |
| linkopts = select({ |
| "//build_defs:config_msvc": [], |
| "//conditions:default": ["-lpthread"], |
| }), |
| deps = [ |
| "//:protobuf_lite", |
| ], |
| ) |
| |
| cc_dist_library( |
| name = "protobuf", |
| linkopts = select({ |
| "//build_defs:config_msvc": [], |
| "//conditions:default": [ |
| "-lz", |
| "-lpthread", |
| ], |
| }), |
| deps = [ |
| "//:protobuf", |
| "//:protobuf_lite", |
| ], |
| ) |
| |
| ################################################################################ |
| # Distribution sources |
| ################################################################################ |
| |
| pkg_files( |
| name = "dist_files", |
| srcs = glob(["*"]), |
| strip_prefix = strip_prefix.from_root(""), |
| ) |