rules_cc/tools/migration/crosstool_query.py

54 lines
1.6 KiB
Python

"""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)