1+ """
2+ Generates package naming variables for use with rules_pkg.
3+ """
4+
5+ load ("@rules_pkg//:providers.bzl" , "PackageVariablesInfo" )
6+ load ("@bazel_tools//tools/cpp:toolchain_utils.bzl" , "find_cpp_toolchain" )
7+
8+ _PROTOBUF_JAVASCRIPT_VERSION = '3.21.0'
9+
10+ def _package_naming_impl (ctx ):
11+ values = {}
12+ values ["version" ] = _PROTOBUF_JAVASCRIPT_VERSION
13+
14+ # infer from the current cpp toolchain.
15+ toolchain = find_cpp_toolchain (ctx )
16+ cpu = toolchain .cpu
17+ system_name = toolchain .target_gnu_system_name
18+
19+ # rename cpus to match what we want artifacts to be
20+ if cpu == "systemz" :
21+ cpu = "s390_64"
22+ elif cpu == "aarch64" :
23+ cpu = "aarch_64"
24+ elif cpu == "ppc64" :
25+ cpu = "ppcle_64"
26+
27+ # use the system name to determine the os and then create platform names
28+ if "apple" in system_name :
29+ values ["platform" ] = "osx-" + cpu
30+ elif "linux" in system_name :
31+ values ["platform" ] = "linux-" + cpu
32+ elif "mingw" in system_name :
33+ if cpu == "x86_64" :
34+ values ["platform" ] = "win64"
35+ else :
36+ values ["platform" ] = "win32"
37+ else :
38+ values ["platform" ] = "unknown"
39+
40+ return PackageVariablesInfo (values = values )
41+
42+
43+ package_naming = rule (
44+ implementation = _package_naming_impl ,
45+ attrs = {
46+ # Necessary data dependency for find_cpp_toolchain.
47+ "_cc_toolchain" : attr .label (default = Label ("@bazel_tools//tools/cpp:current_cc_toolchain" )),
48+ },
49+ toolchains = ["@bazel_tools//tools/cpp:toolchain_type" ],
50+ incompatible_use_toolchain_transition = True ,
51+ )
0 commit comments