diff options
author | Philipp Wollermann <philwo@google.com> | 2017-07-27 18:01:12 +0200 |
---|---|---|
committer | Jakob Buchgraber <buchgr@google.com> | 2017-07-28 10:44:44 +0200 |
commit | 4c55898e71d30b32090bef31b43e408d942a24f6 (patch) | |
tree | f7a510e7690536ab4721a46d7313daa5495990ad /src/embedded_tools.bzl | |
parent | 73527c3be5e40ff5a2f868440f0c4d3a940abec7 (diff) |
Replace create_embedded_tools.sh with a faster Python version.
This is functionally equivalent, but ~30x faster on Windows, ~2x faster on macOS and ~1.5x faster on Linux.
RELNOTES: None.
Change-Id: Ib4a7e10400a3955e47772425acfce2d9530de462
PiperOrigin-RevId: 163346634
Diffstat (limited to 'src/embedded_tools.bzl')
-rw-r--r-- | src/embedded_tools.bzl | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/embedded_tools.bzl b/src/embedded_tools.bzl new file mode 100644 index 0000000000..b36cc142cf --- /dev/null +++ b/src/embedded_tools.bzl @@ -0,0 +1,50 @@ +# pylint: disable=g-bad-file-header +# Copyright 2017 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http:#www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Contains Skylark rules used to build the embedded_tools.zip.""" + +def _embedded_tools(ctx): + # The list of arguments we pass to the script. + args_file = ctx.new_file(ctx.label.name + ".params") + ctx.file_action(output=args_file, content="\n".join([f.path for f in ctx.files.srcs])) + # Action to call the script. + ctx.action( + inputs=ctx.files.srcs, + outputs=[ctx.outputs.out], + arguments=[ctx.outputs.out.path, args_file.path], + progress_message="Creating embedded tools: %s" % ctx.outputs.out.short_path, + executable=ctx.executable.tool) + +embedded_tools = rule( + implementation=_embedded_tools, + attrs={ + "srcs": attr.label_list(allow_files=True), + "out": attr.output(mandatory=True), + "tool": attr.label(executable=True, cfg="host", allow_files=True, + default=Label("//src:create_embedded_tools_sh")) + } +) + +def _srcsfile(ctx): + ctx.file_action( + output=ctx.outputs.out, + content="\n".join([f.path for f in ctx.files.srcs])) + +srcsfile = rule( + implementation=_srcsfile, + attrs={ + "srcs": attr.label_list(allow_files=True), + "out": attr.output(mandatory=True), + } +) |