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