mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-08 23:18:15 -05:00
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>
This commit is contained in:
70
tools/ssz.bzl
Normal file
70
tools/ssz.bzl
Normal file
@@ -0,0 +1,70 @@
|
||||
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"]
|
||||
Reference in New Issue
Block a user