summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Bettis <jbettis@google.com>2022-03-14 17:22:37 -0600
committerCommit Bot <commit-bot@chromium.org>2022-03-16 17:25:50 +0000
commit75ef5c31550fef031cd8153b9872d6d3fb77ac21 (patch)
treef4c4b732f311b3fc2611cb7779ffabc1b4cf093f
parentbb733b03ecda9eb4fdff4a99ee187538092aeefd (diff)
downloadchrome-ec-75ef5c31550fef031cd8153b9872d6d3fb77ac21.tar.gz
zmake: Write ninja output to a build.log file
In order to capture the memory usage report in the link stage, write all output from ninja to a build.log file in the build dir. For example: `zmake build herobrine` will create files in `build/zephyr/herobrine/build-ro/build.log` and `build/zephyr/herobrine/build-rw/build.log` I intend to parse this file in firmware_builder.py BRANCH=None BUG=b:223846977 TEST=zmake build herobrine; \ tail build/zephyr/herobrine/build-*/build.log Change-Id: I10e1e29e945f86bbc19adf62946ea7f3aab8fc6f Signed-off-by: Jeremy Bettis <jbettis@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3523395 Tested-by: Jeremy Bettis <jbettis@chromium.org> Auto-Submit: Jeremy Bettis <jbettis@chromium.org> Reviewed-by: Jack Rosenthal <jrosenth@chromium.org> Commit-Queue: Jack Rosenthal <jrosenth@chromium.org>
-rw-r--r--zephyr/zmake/zmake/multiproc.py29
-rw-r--r--zephyr/zmake/zmake/zmake.py7
2 files changed, 31 insertions, 5 deletions
diff --git a/zephyr/zmake/zmake/multiproc.py b/zephyr/zmake/zmake/multiproc.py
index 5e98374c8c..94f5f5b69d 100644
--- a/zephyr/zmake/zmake/multiproc.py
+++ b/zephyr/zmake/zmake/multiproc.py
@@ -53,7 +53,13 @@ class LogWriter:
"""
def __init__(
- self, logger, log_level, log_level_override_func, job_id, file_descriptor
+ self,
+ logger,
+ log_level,
+ log_level_override_func,
+ job_id,
+ file_descriptor,
+ tee_output=None,
):
self._logger = logger
self._log_level = log_level
@@ -62,6 +68,7 @@ class LogWriter:
self._written_at_level = collections.defaultdict(lambda: False)
self._job_id = job_id
self._file_descriptor = file_descriptor
+ self._tee_output = tee_output
def log_line(self, line):
"""Log a line of output
@@ -72,6 +79,9 @@ class LogWriter:
Args:
line: Text line to log
"""
+ if self._tee_output:
+ self._tee_output.write(line)
+ self._tee_output.write("\n")
if self._override_func:
# Get the new log level and update the default. The reason we
# want to update the default is that if we hit an error, all
@@ -103,6 +113,9 @@ class LogWriter:
"""
with _logging_cv:
_logging_cv.wait_for(lambda: self._file_descriptor not in _logging_map)
+ if self._tee_output:
+ self._tee_output.close()
+ self._tee_output = None
def _log_fd(fd):
@@ -182,7 +195,12 @@ _logging_thread = None
def log_output(
- logger, log_level, file_descriptor, log_level_override_func=None, job_id=None
+ logger,
+ log_level,
+ file_descriptor,
+ log_level_override_func=None,
+ job_id=None,
+ tee_output=None,
):
"""Log the output from the given file descriptor.
@@ -205,7 +223,12 @@ def log_output(
_logging_thread.start()
writer = LogWriter(
- logger, log_level, log_level_override_func, job_id, file_descriptor
+ logger,
+ log_level,
+ log_level_override_func,
+ job_id,
+ file_descriptor,
+ tee_output=tee_output,
)
_logging_map[file_descriptor] = writer
# Write a dummy byte to the pipe to break the select so we can add the
diff --git a/zephyr/zmake/zmake/zmake.py b/zephyr/zmake/zmake/zmake.py
index e2ce065740..11248b092e 100644
--- a/zephyr/zmake/zmake/zmake.py
+++ b/zephyr/zmake/zmake/zmake.py
@@ -11,7 +11,7 @@ import pathlib
import re
import shutil
import subprocess
-from typing import List
+from typing import Dict, List
import zmake.build_config
import zmake.generate_readme
@@ -622,7 +622,7 @@ class Zmake:
procs = []
log_writers = []
- dirs = {}
+ dirs: Dict[str, pathlib.Path] = {}
build_dir = build_dir.resolve()
@@ -667,12 +667,15 @@ class Zmake:
errors="replace",
)
job_id = "{}:{}".format(project.config.project_name, build_name)
+ dirs[build_name].mkdir(parents=True, exist_ok=True)
+ build_log = open(dirs[build_name] / "build.log", "w")
out = zmake.multiproc.log_output(
logger=self.logger,
log_level=logging.INFO,
file_descriptor=proc.stdout,
log_level_override_func=ninja_stdout_log_level_override,
job_id=job_id,
+ tee_output=build_log,
)
err = zmake.multiproc.log_output(
self.logger,