blob: 82e1510e09ae02e8d349f94da1b3055d07541c76 [file] [log] [blame]
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",
)