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.
99 lines
2.9 KiB
99 lines
2.9 KiB
2 months ago
|
"""
|
||
|
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
|