| """ |
| Generates package naming variables for use with rules_pkg. |
| """ |
| |
| load("@rules_pkg//:providers.bzl", "PackageVariablesInfo") |
| load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain") |
| load(":protobuf_version.bzl", "PROTOC_VERSION") |
| |
| def _package_naming_impl(ctx): |
| values = {} |
| values["version"] = PROTOC_VERSION |
| |
| # infer from the current cpp toolchain. |
| toolchain = find_cpp_toolchain(ctx) |
| cpu = toolchain.cpu |
| system_name = toolchain.target_gnu_system_name |
| |
| # rename cpus to match what we want artifacts to be |
| if cpu == "systemz": |
| cpu = "s390_64" |
| elif cpu == "aarch64": |
| cpu = "aarch_64" |
| elif cpu == "ppc64": |
| cpu = "ppcle_64" |
| |
| # use the system name to determine the os and then create platform names |
| if "apple" in system_name: |
| values["platform"] = "osx-" + cpu |
| elif "linux" in system_name: |
| values["platform"] = "linux-" + cpu |
| elif "mingw" in system_name: |
| if cpu == "x86_64": |
| values["platform"] = "win64" |
| else: |
| values["platform"] = "win32" |
| else: |
| values["platform"] = "unknown" |
| |
| return PackageVariablesInfo(values = values) |
| |
| package_naming = rule( |
| implementation = _package_naming_impl, |
| attrs = { |
| # Necessary data dependency for find_cpp_toolchain. |
| "_cc_toolchain": attr.label(default = Label("@bazel_tools//tools/cpp:current_cc_toolchain")), |
| }, |
| toolchains = ["@bazel_tools//tools/cpp:toolchain_type"], |
| ) |