69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
ShBinaryInfo = provider(
|
|
"Info needed for sh_binary modules",
|
|
fields = {
|
|
"sub_dir": "Optional subdirectory to install into",
|
|
"filename": "Optional name for the installed file",
|
|
},
|
|
)
|
|
|
|
def sh_binary(
|
|
name,
|
|
srcs,
|
|
sub_dir = None,
|
|
filename = None,
|
|
**kwargs):
|
|
"Bazel macro to correspond with the sh_binary Soong module."
|
|
|
|
internal_name = name + "_internal"
|
|
native.sh_binary(
|
|
name = internal_name,
|
|
srcs = srcs,
|
|
**kwargs
|
|
)
|
|
|
|
# We need this wrapper rule around native.sh_binary in order to provide extra
|
|
# attributes such as filename and sub_dir that are useful when building apex.
|
|
_sh_binary_combiner(
|
|
name = name,
|
|
sub_dir = sub_dir,
|
|
filename = filename,
|
|
dep = internal_name,
|
|
)
|
|
|
|
def _sh_binary_combiner_impl(ctx):
|
|
dep = ctx.attr.dep[DefaultInfo]
|
|
output = ctx.outputs.executable
|
|
|
|
ctx.actions.run_shell(
|
|
outputs = [output],
|
|
inputs = [dep.files_to_run.executable],
|
|
command = "cp %s %s" % (dep.files_to_run.executable.path, output.path),
|
|
mnemonic = "CopyNativeShBinary",
|
|
)
|
|
|
|
files = depset(direct = [output], transitive = [dep.files])
|
|
|
|
return [
|
|
DefaultInfo(
|
|
files = files,
|
|
runfiles = ctx.runfiles().merge(dep.data_runfiles).merge(dep.default_runfiles),
|
|
executable = output,
|
|
),
|
|
ShBinaryInfo(
|
|
sub_dir = ctx.attr.sub_dir,
|
|
filename = ctx.attr.filename,
|
|
),
|
|
]
|
|
|
|
_sh_binary_combiner = rule(
|
|
implementation = _sh_binary_combiner_impl,
|
|
attrs = {
|
|
"sub_dir": attr.string(),
|
|
"filename": attr.string(),
|
|
"dep": attr.label(mandatory = True),
|
|
},
|
|
provides = [ShBinaryInfo],
|
|
executable = True,
|
|
doc = "Wrapper rule around native.sh_binary to provide extra attributes",
|
|
)
|