summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorChristopher Koch <chrisko@google.com>2018-05-03 13:43:20 -0700
committerShentubot <shentubot@google.com>2018-05-03 13:44:05 -0700
commit18ebda3476f2e28101656d93a88107d587e0f1ca (patch)
tree9849e61f1719b306d1d434eb8d0416ea25536144
parent9739b8c21cd1716c4c1c81a27121c50e63fcf906 (diff)
Include Gold linker in requirements.
Updates #26. PiperOrigin-RevId: 195303940 Change-Id: I833cee55b5df6196ed90c1f8987c3c9c07204678
-rw-r--r--README.md1
-rw-r--r--tools/go_generics/defs.bzl172
-rw-r--r--tools/go_stateify/defs.bzl54
3 files changed, 102 insertions, 125 deletions
diff --git a/README.md b/README.md
index 65075de0e..8bf795cb5 100644
--- a/README.md
+++ b/README.md
@@ -171,6 +171,7 @@ and Docker.
* [Python 2.7][python] (See [bug #8](https://github.com/google/gvisor/issues/8)
for Python 3 support updates)
* [Docker version 17.09.0 or greater][docker]
+* Gold linker (e.g. `binutils-gold` package on Ubuntu)
### Getting the source
diff --git a/tools/go_generics/defs.bzl b/tools/go_generics/defs.bzl
index 0b2467805..214e0dfca 100644
--- a/tools/go_generics/defs.bzl
+++ b/tools/go_generics/defs.bzl
@@ -1,26 +1,26 @@
def _go_template_impl(ctx):
- input = ctx.files.srcs
- output = ctx.outputs.out
-
- args = ["-o=%s" % output.path] + [f.path for f in input]
-
- ctx.actions.run(
- inputs = input,
- outputs = [output],
- mnemonic = "GoGenericsTemplate",
- progress_message = "Building Go template %s" % ctx.label,
- arguments = args,
- executable = ctx.executable._tool,
- )
-
- return struct(
- types = ctx.attr.types,
- opt_types = ctx.attr.opt_types,
- consts = ctx.attr.consts,
- opt_consts = ctx.attr.opt_consts,
- deps = ctx.attr.deps,
- file = output,
- )
+ input = ctx.files.srcs
+ output = ctx.outputs.out
+
+ args = ["-o=%s" % output.path] + [f.path for f in input]
+
+ ctx.actions.run(
+ inputs = input,
+ outputs = [output],
+ mnemonic = "GoGenericsTemplate",
+ progress_message = "Building Go template %s" % ctx.label,
+ arguments = args,
+ executable = ctx.executable._tool,
+ )
+
+ return struct(
+ types = ctx.attr.types,
+ opt_types = ctx.attr.opt_types,
+ consts = ctx.attr.consts,
+ opt_consts = ctx.attr.opt_consts,
+ deps = ctx.attr.deps,
+ file = output,
+ )
"""
Generates a Go template from a set of Go files.
@@ -39,81 +39,73 @@ Args:
opt_consts: the list of constants in the template that can but aren't required to be specified.
deps: the list of dependencies.
"""
-
go_template = rule(
+ implementation = _go_template_impl,
attrs = {
- "srcs": attr.label_list(
- mandatory = True,
- allow_files = True,
- ),
+ "srcs": attr.label_list(mandatory = True, allow_files = True),
"deps": attr.label_list(allow_files = True),
"types": attr.string_list(),
"opt_types": attr.string_list(),
"consts": attr.string_list(),
"opt_consts": attr.string_list(),
- "_tool": attr.label(
- executable = True,
- cfg = "host",
- default = Label("//tools/go_generics:go_merge"),
- ),
+ "_tool": attr.label(executable = True, cfg = "host", default = Label("//tools/go_generics:go_merge")),
},
outputs = {
"out": "%{name}_template.go",
},
- implementation = _go_template_impl,
)
def _go_template_instance_impl(ctx):
- template = ctx.attr.template
- output = ctx.outputs.out
-
- # Check that all required types are defined.
- for t in template.types:
- if t not in ctx.attr.types:
- fail("Missing value for type %s in %s" % (t, ctx.attr.template.label))
-
- # Check that all defined types are expected by the template.
- for t in ctx.attr.types:
- if (t not in template.types) and (t not in template.opt_types):
- fail("Type %s it not a parameter to %s" % (t, ctx.attr.template.label))
-
- # Check that all required consts are defined.
- for t in template.consts:
- if t not in ctx.attr.consts:
- fail("Missing value for constant %s in %s" % (t, ctx.attr.template.label))
-
- # Check that all defined consts are expected by the template.
- for t in ctx.attr.consts:
- if (t not in template.consts) and (t not in template.opt_consts):
- fail("Const %s it not a parameter to %s" % (t, ctx.attr.template.label))
-
- # Build the argument list.
- args = ["-i=%s" % template.file.path, "-o=%s" % output.path]
- args += ["-p=%s" % ctx.attr.package]
-
- if len(ctx.attr.prefix) > 0:
- args += ["-prefix=%s" % ctx.attr.prefix]
-
- if len(ctx.attr.suffix) > 0:
- args += ["-suffix=%s" % ctx.attr.suffix]
-
- args += [("-t=%s=%s" % (p[0], p[1])) for p in ctx.attr.types.items()]
- args += [("-c=%s=%s" % (p[0], p[1])) for p in ctx.attr.consts.items()]
- args += [("-import=%s=%s" % (p[0], p[1])) for p in ctx.attr.imports.items()]
-
- ctx.actions.run(
- inputs = [template.file],
- outputs = [output],
- mnemonic = "GoGenericsInstance",
- progress_message = "Building Go template instance %s" % ctx.label,
- arguments = args,
- executable = ctx.executable._tool,
- )
-
- # TODO: How can we get the dependencies out?
- return struct(
- files = depset([output])
- )
+ template = ctx.attr.template
+ output = ctx.outputs.out
+
+ # Check that all required types are defined.
+ for t in template.types:
+ if t not in ctx.attr.types:
+ fail("Missing value for type %s in %s" % (t, ctx.attr.template.label))
+
+ # Check that all defined types are expected by the template.
+ for t in ctx.attr.types:
+ if (t not in template.types) and (t not in template.opt_types):
+ fail("Type %s it not a parameter to %s" % (t, ctx.attr.template.label))
+
+ # Check that all required consts are defined.
+ for t in template.consts:
+ if t not in ctx.attr.consts:
+ fail("Missing value for constant %s in %s" % (t, ctx.attr.template.label))
+
+ # Check that all defined consts are expected by the template.
+ for t in ctx.attr.consts:
+ if (t not in template.consts) and (t not in template.opt_consts):
+ fail("Const %s it not a parameter to %s" % (t, ctx.attr.template.label))
+
+ # Build the argument list.
+ args = ["-i=%s" % template.file.path, "-o=%s" % output.path]
+ args += ["-p=%s" % ctx.attr.package]
+
+ if len(ctx.attr.prefix) > 0:
+ args += ["-prefix=%s" % ctx.attr.prefix]
+
+ if len(ctx.attr.suffix) > 0:
+ args += ["-suffix=%s" % ctx.attr.suffix]
+
+ args += [("-t=%s=%s" % (p[0], p[1])) for p in ctx.attr.types.items()]
+ args += [("-c=%s=%s" % (p[0], p[1])) for p in ctx.attr.consts.items()]
+ args += [("-import=%s=%s" % (p[0], p[1])) for p in ctx.attr.imports.items()]
+
+ ctx.actions.run(
+ inputs = [template.file],
+ outputs = [output],
+ mnemonic = "GoGenericsInstance",
+ progress_message = "Building Go template instance %s" % ctx.label,
+ arguments = args,
+ executable = ctx.executable._tool,
+ )
+
+ # TODO: How can we get the dependencies out?
+ return struct(
+ files = depset([output]),
+ )
"""
Instantiates a Go template by replacing all generic types with concrete ones.
@@ -128,13 +120,10 @@ Args:
imports: the map from imports used in types/consts to their import paths.
package: the name of the package the instantiated template will be compiled into.
"""
-
go_template_instance = rule(
+ implementation = _go_template_instance_impl,
attrs = {
- "template": attr.label(
- mandatory = True,
- providers = ["types"],
- ),
+ "template": attr.label(mandatory = True, providers = ["types"]),
"prefix": attr.string(),
"suffix": attr.string(),
"types": attr.string_dict(),
@@ -142,11 +131,6 @@ go_template_instance = rule(
"imports": attr.string_dict(),
"package": attr.string(mandatory = True),
"out": attr.output(mandatory = True),
- "_tool": attr.label(
- executable = True,
- cfg = "host",
- default = Label("//tools/go_generics"),
- ),
+ "_tool": attr.label(executable = True, cfg = "host", default = Label("//tools/go_generics")),
},
- implementation = _go_template_instance_impl,
)
diff --git a/tools/go_stateify/defs.bzl b/tools/go_stateify/defs.bzl
index 87fdc0d28..60a9895ff 100644
--- a/tools/go_stateify/defs.bzl
+++ b/tools/go_stateify/defs.bzl
@@ -23,27 +23,27 @@ go_library(
"""
def _go_stateify_impl(ctx):
- """Implementation for the stateify tool."""
- output = ctx.outputs.out
+ """Implementation for the stateify tool."""
+ output = ctx.outputs.out
- # Run the stateify command.
- args = ["-output=%s" % output.path]
- args += ["-pkg=%s" % ctx.attr.package]
- if ctx.attr._statepkg:
- args += ["-statepkg=%s" % ctx.attr._statepkg]
- if ctx.attr.imports:
- args += ["-imports=%s" % ",".join(ctx.attr.imports)]
- args += ["--"]
- for src in ctx.attr.srcs:
- args += [f.path for f in src.files]
- ctx.actions.run(
- inputs = ctx.files.srcs,
- outputs = [output],
- mnemonic = "GoStateify",
- progress_message = "Generating state library %s" % ctx.label,
- arguments = args,
- executable = ctx.executable._tool,
- )
+ # Run the stateify command.
+ args = ["-output=%s" % output.path]
+ args += ["-pkg=%s" % ctx.attr.package]
+ if ctx.attr._statepkg:
+ args += ["-statepkg=%s" % ctx.attr._statepkg]
+ if ctx.attr.imports:
+ args += ["-imports=%s" % ",".join(ctx.attr.imports)]
+ args += ["--"]
+ for src in ctx.attr.srcs:
+ args += [f.path for f in src.files]
+ ctx.actions.run(
+ inputs = ctx.files.srcs,
+ outputs = [output],
+ mnemonic = "GoStateify",
+ progress_message = "Generating state library %s" % ctx.label,
+ arguments = args,
+ executable = ctx.executable._tool,
+ )
"""
Generates save and restore logic from a set of Go files.
@@ -56,22 +56,14 @@ Args:
out: the name of the generated file output. This must not conflict with any other files and must be added to the srcs of the relevant go_library.
package: the package name for the input sources.
"""
-
go_stateify = rule(
+ implementation = _go_stateify_impl,
attrs = {
- "srcs": attr.label_list(
- mandatory = True,
- allow_files = True,
- ),
+ "srcs": attr.label_list(mandatory = True, allow_files = True),
"imports": attr.string_list(mandatory = False),
"package": attr.string(mandatory = True),
"out": attr.output(mandatory = True),
- "_tool": attr.label(
- executable = True,
- cfg = "host",
- default = Label("//tools/go_stateify:stateify"),
- ),
+ "_tool": attr.label(executable = True, cfg = "host", default = Label("//tools/go_stateify:stateify")),
"_statepkg": attr.string(default = "gvisor.googlesource.com/gvisor/pkg/state"),
},
- implementation = _go_stateify_impl,
)