summaryrefslogtreecommitdiff
path: root/kleaf/bazel.py
diff options
context:
space:
mode:
authorUlises Mendez Martinez <umendez@google.com>2023-08-09 11:47:43 +0000
committerUlises Mendez Martinez <umendez@google.com>2023-08-15 09:03:36 +0000
commite02ba337321007ee6b64694328f8c0dafcaaae2e (patch)
tree73e5fe2220a2049981354a1b500376c7ce198f65 /kleaf/bazel.py
parentff335916bef0e274a3ffdeb92361197f1529626f (diff)
downloadbuild-e02ba337321007ee6b64694328f8c0dafcaaae2e.tar.gz
kleaf: help: Support to query kernel_build targets
* Users can now run: * `tools/bazel help kleaf targets` * `tools/bazel help kleaf abi-targets` to get a list of available kernel_build and kernel_abi_update targets. Bug: 256196368 Bug: 265138521 Change-Id: I26e39fa146e2f856dd102bf4c3115e088c6ae380 Signed-off-by: Ulises Mendez Martinez <umendez@google.com>
Diffstat (limited to 'kleaf/bazel.py')
-rwxr-xr-xkleaf/bazel.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/kleaf/bazel.py b/kleaf/bazel.py
index 70a44fa..6f9e832 100755
--- a/kleaf/bazel.py
+++ b/kleaf/bazel.py
@@ -41,6 +41,17 @@ _CONFIG_PATTERN = re.compile(
r"^--config=(?P<config>[a-z_]+):\s*(?P<description>.*)$"
)
+# Sync with the following files:
+# kleaf/impl/kernel_build.bzl
+_QUERY_TARGETS_ARG = 'kind("kernel_build rule", //... except attr("tags", \
+ "manual", //...) except //.source_date_epoch_dir/... except //out/...)'
+
+# Sync with the following files:
+# kleaf/impl/abi/abi_update.bzl
+# kleaf/impl/abi/kernel_abi.bzl
+_QUERY_ABI_TARGETS_ARG = 'kind("(update_source_file|abi_update) rule", //... except attr("tags", \
+ "manual", //...) except //.source_date_epoch_dir/... except //out/...)'
+
def _require_absolute_path(p: str) -> pathlib.Path:
p = pathlib.Path(p)
@@ -106,6 +117,7 @@ class BazelWrapper(object):
self._parse_startup_options()
self._parse_command_args()
+ self._rebuild_kleaf_help_args()
def _add_startup_option_to_parser(self, parser):
group = parser.add_argument_group(
@@ -361,6 +373,21 @@ class BazelWrapper(object):
f"{self.root_dir}/{_BAZEL_RC_DIR}/{f}")
bazelrc_parser.add_to(config_group, root_dir=self.root_dir)
+ # Additional helper queries for target discovery.
+ kleaf_group = parser.add_argument_group(
+ title=textwrap.dedent("""\
+ Kleaf Help - Query commands.
+ Usage: bazel help kleaf [<command>]"""),
+ )
+ kleaf_group.add_argument(
+ "targets",
+ help = "List kernel_build targets under current WORKSPACE",
+ )
+ kleaf_group.add_argument(
+ "abi_targets",
+ help = "List ABI related targets under current WORKSPACE",
+ )
+
parser.add_argument_group(
title="Target patterns",
description="$ bazel help target-syntax"
@@ -391,6 +418,37 @@ class BazelWrapper(object):
else:
print("Native bazel help menu:")
+ # Handle queries of kernel_build and kernel_abi_update targets.
+ def _rebuild_kleaf_help_args(self):
+ show_kleaf_targets = self.command == "help" and self.transformed_command_args and \
+ self.transformed_command_args[0] == "kleaf" and \
+ len(self.transformed_command_args) > 1 and \
+ (self.transformed_command_args[1] in ["targets", "abi-targets", "abi_targets"])
+
+ if not show_kleaf_targets:
+ return
+
+ # Transform the command to a query
+ self.command = "query"
+ _kleaf_help_command = self.transformed_command_args[1]
+ # Inform about the ignored arguments if any.
+ _ignored_args = self.transformed_command_args[2:]
+ if _ignored_args:
+ print("INFO: Ignoring arguments:", _ignored_args)
+ # Suppress errors from malformed packages. e.g. clang packages with
+ # Soong dependencies, //external packages, etc.
+ self.transformed_command_args = [
+ "--keep_going",
+ "--ui_event_filters=-error",
+ "--noshow_progress"
+ ]
+ if _kleaf_help_command == "targets":
+ print("Kleaf available targets:")
+ self.transformed_command_args.append(_QUERY_TARGETS_ARG)
+ else:
+ print("Kleaf ABI update available targets:")
+ self.transformed_command_args.append(_QUERY_ABI_TARGETS_ARG)
+
def run(self):
final_args = self._build_final_args()