xref: /aosp_15_r20/external/bazelbuild-rules_cc/tools/migration/crosstool_query.py (revision eed53cd41c5909d05eedc7ad9720bb158fd93452)
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