From 87b46b566af9d68f9b232cd761a06d6cfc612065 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mi=C5=82osz=20Tomkiel?= <m.tomkiel@samsung.com>
Date: Thu, 6 Mar 2025 11:51:52 +0100
Subject: [PATCH] Add verbose flag to build_examples.py

---
 scripts/build/build/__init__.py |  6 ++++--
 scripts/build/build/target.py   |  3 ++-
 scripts/build/build_examples.py | 11 +++++++++--
 scripts/build/builders/gn.py    |  2 ++
 4 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/scripts/build/build/__init__.py b/scripts/build/build/__init__.py
index 5f3cbbab362904..01fbd08fae04da 100644
--- a/scripts/build/build/__init__.py
+++ b/scripts/build/build/__init__.py
@@ -19,11 +19,12 @@ class Context:
          to generate make/ninja instructions and to compile.
       """
 
-    def __init__(self, runner, repository_path: str, output_prefix: str, ninja_jobs: int):
+    def __init__(self, runner, repository_path: str, output_prefix: str, verbose: bool, ninja_jobs: int):
         self.builders = []
         self.runner = runner
         self.repository_path = repository_path
         self.output_prefix = output_prefix
+        self.verbose = verbose
         self.ninja_jobs = ninja_jobs
         self.completed_steps = set()
 
@@ -38,7 +39,8 @@ def SetupBuilders(self, targets: Sequence[str], options: BuilderOptions):
             found = False
             for choice in BUILD_TARGETS:
                 builder = choice.Create(target, self.runner, self.repository_path,
-                                        self.output_prefix, self.ninja_jobs, options)
+                                        self.output_prefix, self.verbose, self.ninja_jobs,
+                                        options)
                 if builder:
                     self.builders.append(builder)
                     found = True
diff --git a/scripts/build/build/target.py b/scripts/build/build/target.py
index 78e4599fb51b75..b1435f0d63bf67 100644
--- a/scripts/build/build/target.py
+++ b/scripts/build/build/target.py
@@ -389,7 +389,7 @@ def StringIntoTargetParts(self, value: str):
         return _StringIntoParts(value, suffix, self.fixed_targets, self.modifiers)
 
     def Create(self, name: str, runner, repository_path: str, output_prefix: str,
-               ninja_jobs: int, builder_options: BuilderOptions):
+               verbose: bool, ninja_jobs: int, builder_options: BuilderOptions):
 
         parts = self.StringIntoTargetParts(name)
 
@@ -406,6 +406,7 @@ def Create(self, name: str, runner, repository_path: str, output_prefix: str,
         builder.target = self
         builder.identifier = name
         builder.output_dir = os.path.join(output_prefix, name)
+        builder.verbose = verbose
         builder.ninja_jobs = ninja_jobs
         builder.chip_dir = os.path.abspath(repository_path)
         builder.options = builder_options
diff --git a/scripts/build/build_examples.py b/scripts/build/build_examples.py
index 171c788c058424..b08a45feb02196 100755
--- a/scripts/build/build_examples.py
+++ b/scripts/build/build_examples.py
@@ -78,6 +78,11 @@ def ValidateTargetNames(context, parameter, values):
     default='INFO',
     type=click.Choice(__LOG_LEVELS__.keys(), case_sensitive=False),
     help='Determines the verbosity of script output.')
+@click.option(
+    '--verbose',
+    default=False,
+    is_flag=True,
+    help='Pass verbose flag to ninja.')
 @click.option(
     '--target',
     default=[],
@@ -142,7 +147,7 @@ def ValidateTargetNames(context, parameter, values):
         'Set pigweed command launcher. E.g.: "--pw-command-launcher=ccache" '
         'for using ccache when building examples.'))
 @click.pass_context
-def main(context, log_level, target, enable_link_map_file, repo,
+def main(context, log_level, verbose, target, enable_link_map_file, repo,
          out_prefix, ninja_jobs, pregen_dir, clean, dry_run, dry_run_output,
          enable_flashbundle, no_log_timestamps, pw_command_launcher):
     # Ensures somewhat pretty logging of what is going on
@@ -168,7 +173,9 @@ def main(context, log_level, target, enable_link_map_file, repo,
     logging.info('Building targets: %s', CommaSeparate(requested_targets))
 
     context.obj = build.Context(
-        repository_path=repo, output_prefix=out_prefix, ninja_jobs=ninja_jobs, runner=runner)
+        repository_path=repo, output_prefix=out_prefix, verbose=verbose,
+        ninja_jobs=ninja_jobs, runner=runner
+    )
     context.obj.SetupBuilders(targets=requested_targets, options=BuilderOptions(
         enable_link_map_file=enable_link_map_file,
         enable_flashbundle=enable_flashbundle,
diff --git a/scripts/build/builders/gn.py b/scripts/build/builders/gn.py
index f65d8878c2ba60..d5bfcb99a9ce9d 100644
--- a/scripts/build/builders/gn.py
+++ b/scripts/build/builders/gn.py
@@ -95,6 +95,8 @@ def _build(self):
         self.PreBuildCommand()
 
         cmd = ['ninja', '-C', self.output_dir]
+        if self.verbose:
+            cmd.append('-v')
         if self.ninja_jobs is not None:
             cmd.append('-j' + str(self.ninja_jobs))
         if self.build_command: