prysm-pulse/tools/go/def.bzl
2021-10-20 19:36:08 +08:00

92 lines
3.2 KiB
Python

load("@io_bazel_rules_go//go/private/rules:library.bzl", _go_library = "go_library")
load("@io_bazel_rules_go//go/private/rules:test.bzl", "go_test_kwargs")
load("@bazel_gazelle//:deps.bzl", _go_repository = "go_repository")
def _go_test_transition_impl(settings, attr):
"""Edge transition to add minimal or mainnet build tags"""
settings = dict(settings)
if attr.eth_network == "minimal":
settings["//proto:network"] = "minimal"
settings["@io_bazel_rules_go//go/config:tags"] += ["minimal"]
elif attr.eth_network == "mainnet": # Default / optional
settings["//proto:network"] = "mainnet"
settings["@io_bazel_rules_go//go/config:tags"] += ["mainnet"]
if attr.gotags:
settings["@io_bazel_rules_go//go/config:tags"] += attr.gotags
if str(settings["//command_line_option:compilation_mode"]) == "dbg":
settings["@io_bazel_rules_go//go/config:debug"] = True
return settings
go_test_transition = transition(
implementation = _go_test_transition_impl,
inputs = [
"@io_bazel_rules_go//go/config:tags",
"//proto:network",
"//command_line_option:compilation_mode",
"@io_bazel_rules_go//go/config:debug",
],
outputs = [
"@io_bazel_rules_go//go/config:tags",
"//proto:network",
"//command_line_option:compilation_mode",
"@io_bazel_rules_go//go/config:debug",
],
)
def _go_test_transition_rule(**kwargs):
"""A wrapper around go_test to add an eth_network attribute and incoming edge transition to support compile time configuration"""
kwargs = dict(kwargs)
attrs = dict(kwargs["attrs"])
attrs.update({
"eth_network": attr.string(values = ["mainnet", "minimal"]),
"_whitelist_function_transition": attr.label(
default = "@bazel_tools//tools/whitelists/function_transition_whitelist",
),
})
kwargs["attrs"] = attrs
kwargs["cfg"] = go_test_transition
return rule(**kwargs)
go_test = _go_test_transition_rule(**go_test_kwargs)
def go_library(name, **kwargs):
gc_goopts = []
if "gc_goopts" in kwargs:
go_goopts = kwargs["gc_goopts"]
gc_goopts += select({
"@prysm//tools/go:libfuzz_enabled": ["-d=libfuzzer,checkptr"],
"//conditions:default": [],
})
kwargs["gc_goopts"] = gc_goopts
_go_library(name = name, **kwargs)
# Maybe download a repository rule, if it doesn't exist already.
def maybe(repo_rule, name, **kwargs):
if name not in native.existing_rules():
repo_rule(name = name, **kwargs)
# A wrapper around go_repository to add gazelle directives.
def go_repository(name, **kwargs):
# Some third party go tools may be used by the fuzzing pipeline to generate code. This causes
# an issue when running with --config=fuzz and is not necessary since the dependency is not
# part of the final binary.
if "nofuzz" in kwargs:
kwargs.pop("nofuzz", None)
return maybe(_go_repository, name, **kwargs)
directives = []
if "build_directives" in kwargs:
directives = kwargs["build_directives"]
directives += [
"gazelle:map_kind go_library go_library @prysm//tools/go:def.bzl",
]
kwargs["build_directives"] = directives
maybe(_go_repository, name, **kwargs)