1"""Script to make automated CROSSTOOL refactorings easier. 2 3This script reads the CROSSTOOL file and allows for querying of its fields. 4""" 5 6from absl import app 7from absl import flags 8from google.protobuf import text_format 9from third_party.com.github.bazelbuild.bazel.src.main.protobuf import crosstool_config_pb2 10 11flags.DEFINE_string("crosstool", None, "CROSSTOOL file path to be queried") 12flags.DEFINE_string("identifier", None, 13 "Toolchain identifier to specify toolchain.") 14flags.DEFINE_string("print_field", None, "Field to be printed to stdout.") 15 16 17def main(unused_argv): 18 crosstool = crosstool_config_pb2.CrosstoolRelease() 19 20 crosstool_filename = flags.FLAGS.crosstool 21 identifier = flags.FLAGS.identifier 22 print_field = flags.FLAGS.print_field 23 24 if not crosstool_filename: 25 raise app.UsageError("ERROR crosstool unspecified") 26 if not identifier: 27 raise app.UsageError("ERROR identifier unspecified") 28 29 if not print_field: 30 raise app.UsageError("ERROR print_field unspecified") 31 32 with open(crosstool_filename, "r") as f: 33 text = f.read() 34 text_format.Merge(text, crosstool) 35 36 toolchain_found = False 37 for toolchain in crosstool.toolchain: 38 if toolchain.toolchain_identifier == identifier: 39 toolchain_found = True 40 if not print_field: 41 continue 42 for field, value in toolchain.ListFields(): 43 if print_field == field.name: 44 print value 45 46 if not toolchain_found: 47 print "toolchain_identifier %s not found, valid values are:" % identifier 48 for toolchain in crosstool.toolchain: 49 print " " + toolchain.toolchain_identifier 50 51 52if __name__ == "__main__": 53 app.run(main) 54