summaryrefslogtreecommitdiffhomepage
path: root/tools/defs.bzl
diff options
context:
space:
mode:
authorAdin Scannell <ascannell@google.com>2021-01-11 22:31:16 -0800
committergVisor bot <gvisor-bot@google.com>2021-01-11 22:33:36 -0800
commita20da708291e2e5bdece5176dce61c1b4b10b7d9 (patch)
tree1546859b6436ee1ad7dffa6b67849c67d2182ccf /tools/defs.bzl
parente06c2b1264f5800730b93eff5c9913fd870025b9 (diff)
Fix Go branch for arm64.
This requires several changes: * Templates must preserve relevant tags. * Pagetables templates are split into two targets, each preserving tags. * The binary VDSO is similarly split into two targets, with some juggling. * The top level tools/go_branch.sh now does a crossbuild of ARM64 as well, and checks and merges the results of the two branches together. Fixes #5178 PiperOrigin-RevId: 351304330
Diffstat (limited to 'tools/defs.bzl')
-rw-r--r--tools/defs.bzl33
1 files changed, 31 insertions, 2 deletions
diff --git a/tools/defs.bzl b/tools/defs.bzl
index 4be767432..d2c697c0d 100644
--- a/tools/defs.bzl
+++ b/tools/defs.bzl
@@ -10,7 +10,7 @@ load("//tools/go_marshal:defs.bzl", "go_marshal", "marshal_deps", "marshal_test_
load("//tools/nogo:defs.bzl", "nogo_test")
load("//tools/bazeldefs:defs.bzl", _arch_genrule = "arch_genrule", _build_test = "build_test", _bzl_library = "bzl_library", _coreutil = "coreutil", _default_installer = "default_installer", _default_net_util = "default_net_util", _more_shards = "more_shards", _most_shards = "most_shards", _proto_library = "proto_library", _select_arch = "select_arch", _select_system = "select_system", _short_path = "short_path", _version = "version")
load("//tools/bazeldefs:cc.bzl", _cc_binary = "cc_binary", _cc_flags_supplier = "cc_flags_supplier", _cc_grpc_library = "cc_grpc_library", _cc_library = "cc_library", _cc_proto_library = "cc_proto_library", _cc_test = "cc_test", _cc_toolchain = "cc_toolchain", _gbenchmark = "gbenchmark", _grpcpp = "grpcpp", _gtest = "gtest", _vdso_linker_option = "vdso_linker_option")
-load("//tools/bazeldefs:go.bzl", _gazelle = "gazelle", _go_binary = "go_binary", _go_embed_data = "go_embed_data", _go_grpc_and_proto_libraries = "go_grpc_and_proto_libraries", _go_library = "go_library", _go_path = "go_path", _go_proto_library = "go_proto_library", _go_test = "go_test", _select_goarch = "select_goarch", _select_goos = "select_goos")
+load("//tools/bazeldefs:go.bzl", _gazelle = "gazelle", _go_binary = "go_binary", _go_embed_data = "go_embed_data", _go_grpc_and_proto_libraries = "go_grpc_and_proto_libraries", _go_library = "go_library", _go_path = "go_path", _go_proto_library = "go_proto_library", _go_rule = "go_rule", _go_test = "go_test", _select_goarch = "select_goarch", _select_goos = "select_goos")
load("//tools/bazeldefs:pkg.bzl", _pkg_deb = "pkg_deb", _pkg_tar = "pkg_tar")
load("//tools/bazeldefs:platforms.bzl", _default_platform = "default_platform", _platforms = "platforms")
load("//tools/bazeldefs:tags.bzl", "go_suffixes")
@@ -43,10 +43,10 @@ vdso_linker_option = _vdso_linker_option
# Go rules.
gazelle = _gazelle
-go_embed_data = _go_embed_data
go_path = _go_path
select_goos = _select_goos
select_goarch = _select_goarch
+go_embed_data = _go_embed_data
# Packaging rules.
pkg_deb = _pkg_deb
@@ -56,6 +56,35 @@ pkg_tar = _pkg_tar
default_platform = _default_platform
platforms = _platforms
+def _go_add_tags(ctx):
+ """ Adds tags to the given source file. """
+ output = ctx.outputs.out
+ runner = ctx.actions.declare_file(ctx.label.name + ".sh")
+ lines = ["#!/bin/bash"]
+ lines += ["echo '// +build %s' >> %s" % (tag, output.path) for tag in ctx.attr.go_tags]
+ lines.append("echo '' >> %s" % output.path)
+ lines += ["cat %s >> %s" % (f.path, output.path) for f in ctx.files.src]
+ lines.append("")
+ ctx.actions.write(runner, "\n".join(lines), is_executable = True)
+ ctx.actions.run(
+ inputs = ctx.files.src,
+ outputs = [output],
+ executable = runner,
+ )
+ return [DefaultInfo(
+ files = depset([output]),
+ )]
+
+go_add_tags = _go_rule(
+ rule,
+ implementation = _go_add_tags,
+ attrs = {
+ "go_tags": attr.string_list(doc = "Go build tags to be added.", mandatory = True),
+ "src": attr.label(doc = "Source file.", allow_single_file = True, mandatory = True),
+ "out": attr.output(doc = "Output file.", mandatory = True),
+ },
+)
+
def go_binary(name, nogo = True, pure = False, static = False, x_defs = None, **kwargs):
"""Wraps the standard go_binary.