| def _copy_go_binary_impl(ctx): |
| output = ctx.actions.declare_file(ctx.label.name) |
| for f in ctx.attr.src.files: |
| # go_binary rules have two outputs, a library and the binary itself. |
| # The following is a horrible hack to avoid copying the library. |
| if f.path.endswith(".a"): |
| continue |
| ctx.action( |
| inputs=[f], |
| outputs=[output], |
| mnemonic="CopyGoBinary", |
| command="mkdir -p %s && cp %s %s" % (output.dirname, f.path, output.path)) |
| return [DefaultInfo(executable=output)] |
| |
| copy_go_binary = rule( |
| implementation=_copy_go_binary_impl, |
| attrs={ |
| "src": attr.label(mandatory=True, allow_files=True), |
| }, |
| executable=True, |
| ) |