prysm-pulse/tools/ssz.bzl
Raul Jordan 663d919b6f
Include Bazel Genrule for Fast SSZ (#5070)
* rem slasher proto
* Merge branch 'master' of github.com:prysmaticlabs/prysm
* Merge branch 'master' of github.com:prysmaticlabs/prysm
* Merge branch 'master' of github.com:prysmaticlabs/prysm
* Merge branch 'master' of github.com:prysmaticlabs/prysm
* Merge branch 'master' of github.com:prysmaticlabs/prysm
* Merge branch 'master' of github.com:prysmaticlabs/prysm
* Merge branch 'master' of github.com:prysmaticlabs/prysm
* Merge branch 'master' of github.com:prysmaticlabs/prysm
* Merge branch 'master' of github.com:prysmaticlabs/prysm
* Merge branch 'master' of github.com:prysmaticlabs/prysm
* Merge branch 'master' of github.com:prysmaticlabs/prysm
* included new ssz bzl rule
* Merge branch 'master' into add-in-starlark-rule
* Update tools/ssz.bzl

Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com>
2020-03-11 19:50:22 +00:00

71 lines
2.0 KiB
Python

load(
"@io_bazel_rules_go//go:def.bzl",
"GoLibrary",
)
def _ssz_go_proto_library_impl(ctx):
go_proto = ctx.attr.go_proto
generated_pb_go_files = go_proto[OutputGroupInfo].go_generated_srcs
# Run the tool on the generated files
package_path = generated_pb_go_files.to_list()[0].dirname
output = ctx.outputs.out
args = [
"--output=%s" % output.path,
"--path=%s" % package_path,
]
if len(ctx.attr.objs) > 0:
args += ["--objs=%s" % ",".join(ctx.attr.objs)]
ctx.actions.run(
executable = ctx.executable.sszgen,
progress_message = "Generating ssz marshal and unmarshal functions",
inputs = generated_pb_go_files,
arguments = args,
outputs = [output],
)
"""
A rule that uses the generated pb.go files from a go_proto_library target to generate SSZ marshal
and unmarshal functions as pointer receivers on the specified objects. To use this rule, provide a
go_proto_library target and specify the structs to generate methods in the "objs" field. Lastly,
include your new target as a source for the go_library that embeds the go_proto_library.
Example:
go_proto_library(
name = "example_go_proto",
...
)
ssz_gen_marshal(
name = "ssz_generated_sources",
go_proto = ":example_go_proto",
objs = [ # omit this field to generate for all structs in the package.
"AddressBook",
"Person",
],
)
go_library(
name = "go_default_library",
srcs = [":ssz_generated_sources"],
embed = [":example_go_proto"],
deps = SSZ_DEPS,
)
"""
ssz_gen_marshal = rule(
implementation = _ssz_go_proto_library_impl,
attrs = {
"go_proto": attr.label(providers = [GoLibrary]),
"sszgen": attr.label(
default = Label("@com_github_ferranbt_fastssz//sszgen:sszgen"),
executable = True,
cfg = "host",
),
"objs": attr.string_list(),
},
outputs = {"out": "generated.ssz.go"},
)
SSZ_DEPS = ["@com_github_ferranbt_fastssz//:go_default_library"]