From 46dc52e0081d893cb77ec7e84f416f9e8ca265d3 Mon Sep 17 00:00:00 2001 From: hlopko Date: Tue, 18 Dec 2018 16:45:56 +0100 Subject: [PATCH] Add crosstool_query A quick hack of a tool that will be used for removing runtime filegroups Issue for the --incompatible_disable_runtimes_filegroups incompatible flag (which this cl is a step towards to): #6942 Tracking issue for legacy crosstool fields removal: #5883 RELNOTES: None. PiperOrigin-RevId: 225995150 --- tools/migration/BUILD | 10 ++++++ tools/migration/crosstool_query.py | 53 ++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 tools/migration/crosstool_query.py diff --git a/tools/migration/BUILD b/tools/migration/BUILD index 06b4f27..3dd52fd 100644 --- a/tools/migration/BUILD +++ b/tools/migration/BUILD @@ -43,3 +43,13 @@ py_test( "//third_party/com/github/bazelbuild/bazel/src/main/protobuf:crosstool_config_py_pb2", ], ) + +py_binary( + name = "crosstool_query", + srcs = ["crosstool_query.py"], + deps = [ + "//third_party/com/github/bazelbuild/bazel/src/main/protobuf:crosstool_config_py_pb2", + "@io_abseil_py//absl:app", + "@io_abseil_py//absl/flags", + ], +) diff --git a/tools/migration/crosstool_query.py b/tools/migration/crosstool_query.py new file mode 100644 index 0000000..af3f7fa --- /dev/null +++ b/tools/migration/crosstool_query.py @@ -0,0 +1,53 @@ +"""Script to make automated CROSSTOOL refactorings easier. + +This script reads the CROSSTOOL file and allows for querying of its fields. +""" + +from absl import app +from absl import flags +from google.protobuf import text_format +from third_party.com.github.bazelbuild.bazel.src.main.protobuf import crosstool_config_pb2 + +flags.DEFINE_string("crosstool", None, "CROSSTOOL file path to be queried") +flags.DEFINE_string("identifier", None, + "Toolchain identifier to specify toolchain.") +flags.DEFINE_string("print_field", None, "Field to be printed to stdout.") + + +def main(unused_argv): + crosstool = crosstool_config_pb2.CrosstoolRelease() + + crosstool_filename = flags.FLAGS.crosstool + identifier = flags.FLAGS.identifier + print_field = flags.FLAGS.print_field + + if not crosstool_filename: + raise app.UsageError("ERROR crosstool unspecified") + if not identifier: + raise app.UsageError("ERROR identifier unspecified") + + if not print_field: + raise app.UsageError("ERROR print_field unspecified") + + with open(crosstool_filename, "r") as f: + text = f.read() + text_format.Merge(text, crosstool) + + toolchain_found = False + for toolchain in crosstool.toolchain: + if toolchain.toolchain_identifier == identifier: + toolchain_found = True + if not print_field: + continue + for field, value in toolchain.ListFields(): + if print_field == field.name: + print value + + if not toolchain_found: + print "toolchain_identifier %s not found, valid values are:" % identifier + for toolchain in crosstool.toolchain: + print " " + toolchain.toolchain_identifier + + +if __name__ == "__main__": + app.run(main)