genrule:
.bzl file, and call the file miniature.bzl:
-
By convention, legacy macros have a
nameargument, just like rules. - To document the behavior of a legacy macro, use docstring like in Python.
-
To call a
genrule, or any other native rule, prefix withnative.. -
Use
**kwargsto forward the extra arguments to the underlyinggenrule(it works just like in Python). This is useful, so that a user can use standard attributes likevisibility, ortags.
BUILD file:
src is a filename
string (otherwise, outs = ["small_" + src] will fail). So src = "image.png"
works; but what happens if the BUILD file instead used src = "//other/package:image.png", or even src = select(...)?
You should make sure to declare such assumptions in your macro’s documentation.
Unfortunately, legacy macros, especially large ones, tend to be fragile because
it can be hard to notice and document all such assumptions in your code – and,
of course, some users of the macro won’t read the documentation. We recommend,
if possible, instead using symbolic macros, which have
built-in checks on attribute types.