| def _copy_go_binary_impl(ctx): |
| output = ctx.actions.declare_file(ctx.label.name) |
| for f in ctx.attr.src.files.to_list(): |
| # 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.actions.run_shell( |
| 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, |
| ) |