Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.9 KiB
98 lines
2.9 KiB
""" |
|
This module exports the pkg_cross_compiled_binaries rule. This rule is used to create a pkg_filegroup |
|
that contains the cross compiled binaries for each cpu. |
|
""" |
|
|
|
load("@rules_pkg//pkg:mappings.bzl", "pkg_attributes", "pkg_filegroup", "pkg_files") |
|
|
|
def _cpu_transition_impl(settings, attr): |
|
_ignore = (settings) # @unused |
|
return [{"//command_line_option:cpu": attr.cpu}] |
|
|
|
_cpu_transition = transition( |
|
implementation = _cpu_transition_impl, |
|
inputs = [], |
|
outputs = [ |
|
"//command_line_option:cpu", |
|
], |
|
) |
|
|
|
def _cross_compiled_binary_impl(ctx): |
|
target = ctx.attr.target |
|
|
|
default_info = target[0][DefaultInfo] |
|
files = default_info.files |
|
runfiles = default_info.default_runfiles |
|
|
|
files = depset(transitive = [files]) |
|
|
|
return [ |
|
DefaultInfo( |
|
files = files, |
|
runfiles = runfiles, |
|
), |
|
] |
|
|
|
_cross_compiled_binary = rule( |
|
implementation = _cross_compiled_binary_impl, |
|
attrs = { |
|
"target": attr.label( |
|
mandatory = True, |
|
cfg = _cpu_transition, |
|
), |
|
"cpu": attr.string(), |
|
"_allowlist_function_transition": attr.label( |
|
default = "@bazel_tools//tools/allowlists/function_transition_allowlist", |
|
), |
|
}, |
|
) |
|
|
|
def pkg_cross_compiled_binaries(name, cpus, targets, prefix, tags): |
|
"""Creates a pkg_filegroup that contains the cross compiled binaries for each cpu. |
|
|
|
This rule is used to create a pkg_filegroup that contains the cross compiled binaries for each |
|
cpu. The binaries are created by an aspect that changes the cpu configuration for each target. |
|
The targets are placed into a directory that is named after the cpu. |
|
|
|
Args: |
|
name: The name of the pkg_filegroup. |
|
cpus: The cpus to cross compile for. |
|
targets: The targets to cross compile. |
|
prefix: The prefix to add to the pkg_filegroup. |
|
tags: The tags to add to the pkg_filegroup. |
|
""" |
|
|
|
filegroups = [] |
|
for cpu in cpus: |
|
compiled_targets = [] |
|
for target in targets: |
|
target_name = target.split(":")[1] |
|
bin_target_name = name + "_" + cpu + "_" + target_name |
|
_cross_compiled_binary( |
|
name = bin_target_name, |
|
cpu = cpu, |
|
target = target, |
|
) |
|
compiled_targets.append(Label(":" + bin_target_name)) |
|
files_name = name + "_" + cpu + "_src" |
|
filegroup_name = files_name + "_dir" |
|
filegroups.append(Label(":" + filegroup_name)) |
|
pkg_files( |
|
name = files_name, |
|
srcs = compiled_targets, |
|
attributes = pkg_attributes( |
|
mode = "0755", |
|
), |
|
) |
|
pkg_filegroup( |
|
name = filegroup_name, |
|
srcs = [Label(":" + files_name)], |
|
prefix = cpu, |
|
) |
|
pkg_filegroup( |
|
name = name, |
|
srcs = filegroups, |
|
prefix = prefix, |
|
tags = tags, |
|
) |
|
return
|
|
|