Selaa lähdekoodia

Refactor run_tool (#4459)

Removes the python script, should get equivalent results in the current
setup.
Jon Ross-Perkins 1 vuosi sitten
vanhempi
sitoutus
fe23a4fe1f
2 muutettua tiedostoa jossa 29 lisäystä ja 33 poistoa
  1. 29 11
      toolchain/install/run_tool.bzl
  2. 0 22
      toolchain/install/run_tool.py

+ 29 - 11
toolchain/install/run_tool.bzl

@@ -4,15 +4,33 @@
 
 """Supports running a tool from the install filegroup."""
 
-load("@rules_python//python:defs.bzl", "py_binary")
-
-def run_tool(name, tool, data, env):
-    # TODO: Fix the driver file discovery in order to allow symlinks.
-    py_binary(
-        name = name,
-        main = "run_tool.py",
-        srcs = ["run_tool.py"],
-        args = ["$(location {})".format(tool)],
-        data = [tool] + data,
-        env = env,
+def _run_tool_impl(ctx):
+    tool_files = ctx.attr.tool.files.to_list()
+    if len(tool_files) != 1:
+        fail("Expected 1 tool file, found {0}".format(len(tool_files)))
+    ctx.actions.symlink(
+        output = ctx.outputs.executable,
+        target_file = tool_files[0],
+        is_executable = True,
     )
+    return [
+        DefaultInfo(
+            runfiles = ctx.runfiles(files = ctx.files.data),
+        ),
+        RunEnvironmentInfo(environment = ctx.attr.env),
+    ]
+
+run_tool = rule(
+    doc = "Helper for running a tool in a filegroup.",
+    implementation = _run_tool_impl,
+    attrs = {
+        "data": attr.label_list(allow_files = True),
+        "env": attr.string_dict(),
+        "tool": attr.label(
+            allow_single_file = True,
+            executable = True,
+            cfg = "target",
+        ),
+    },
+    executable = True,
+)

+ 0 - 22
toolchain/install/run_tool.py

@@ -1,22 +0,0 @@
-#!/usr/bin/env python3
-
-"""Runs the tool specified in argv.
-
-This script is essentially just a bounce-through to get an appropriate arg0.
-See the TODO in run_tool.bzl.
-"""
-
-__copyright__ = """
-Part of the Carbon Language project, under the Apache License v2.0 with LLVM
-Exceptions. See /LICENSE for license information.
-SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-"""
-
-import os
-import sys
-from pathlib import Path
-
-if __name__ == "__main__":
-    symbolizer = str(Path(os.environ["LLVM_SYMBOLIZER_PATH"]).absolute())
-    os.environ["LLVM_SYMBOLIZER_PATH"] = symbolizer
-    os.execv(sys.argv[1], sys.argv[1:])