DefaultInfo
A provider that all rules' implementations must return
In many simple cases, this can be inferred for the user.
Example of a rule's implementation function and how these fields are used by the framework:
# //foo_binary.bzl
def impl(ctx):
ctx.action.run([ctx.attrs._cc[RunInfo], "-o", ctx.attrs.out.as_output()] + ctx.attrs.srcs)
ctx.action.run([
ctx.attrs._strip[RunInfo],
"--binary",
ctx.attrs.out,
"--stripped-out",
ctx.attrs.stripped.as_output(),
"--debug-symbols-out",
ctx.attrs.debug_info.as_output(),
])
return [
DefaultInfo(
sub_targets = {
"stripped": [
DefaultInfo(default_outputs = [ctx.attrs.stripped, ctx.attrs.debug_info]),
],
},
default_output = ctx.attrs.out,
]
foo_binary = rule(
impl=impl,
attrs={
"srcs": attrs.list(attrs.source()),
"out": attrs.output(),
"stripped": attrs.output(),
"debug_info": attrs.output(),
"_cc": attrs.dep(default="//tools:cc", providers=[RunInfo]),
"_strip_script": attrs.dep(default="//tools:strip", providers=[RunInfo])
)
def foo_binary_wrapper(name, srcs):
foo_binary(
name = name,
srcs = src,
out = name,
stripped = name + ".stripped",
debug_info = name + ".debug_info",
)
# //subdir/BUCK
load("//:foo_binary.bzl", "foo_binary_wrapper")
genrule(name = "gen_stuff", ...., default_outs = ["foo.cpp"])
# ":gen_stuff" pulls the default_outputs for //subdir:gen_stuff
foo_binary_wrapper(name = "foo", srcs = glob(["*.cpp"]) + [":gen_stuff"])
# Builds just 'foo' binary. The strip command is never invoked.
$ buck build //subdir:foo
# builds the 'foo' binary, because it is needed by the 'strip' command. Ensures that
# both the stripped binary and the debug symbols are built.
$ buck build //subdir:foo[stripped]
DefaultInfo.default_outputs
DefaultInfo.default_outputs: list[artifact]
A list of Artifact
s that are built by default if this rule is requested explicitly (via CLI or $(location)
etc), or depended on as as a "source" (i.e., attrs.source()
).
DefaultInfo.other_outputs
DefaultInfo.other_outputs: list[CellPath | artifact | cell_root | cmd_args | label | output_artifact | project_root | resolved_macro | str | tagged_command_line | target_label | transitive_set_args_projection | write_json_cli_args | RunInfo]
A list of ArtifactTraversable
. The underlying Artifact
s they define will be built by default if this rule is requested (via CLI or $(location)
etc), but not when it's depended on as as a "source" (i.e., attrs.source()
). ArtifactTraversable
can be an Artifact
(which yields itself), or cmd_args
, which expand to all their inputs.
DefaultInfo.sub_targets
DefaultInfo.sub_targets: dict[str, provider_collection]
A mapping of names to ProviderCollection
s. The keys are used when resolving the ProviderName
portion of a ProvidersLabel
in order to access the providers for a subtarget, such as when doing buck2 build cell//foo:bar[baz]
. Just like any ProviderCollection
, this collection must include at least a DefaultInfo
provider. The subtargets can have their own subtargets as well, which can be accessed by chaining them, e.g.: buck2 build cell//foo:bar[baz][qux]
.