poky/meta/files/ext-sdk-prepare.py
Paul Eggleton 2f3e34537e ext-sdk-prepare.py: use quiet mode when preparing sysroot
In order to have a shared sysroot usable within the eSDK after recipe
specific sysroots were implemented, we need to run
bitbake build-sysroots as a separate call. However, unlike the first
call, --quiet wasn't being specified and that somewhat undermined the
earlier effort to clean up the eSDK installation output. Make this
second call quiet as well so that the output is tidier.

(From OE-Core rev: 56b73788edaa0796e53f1a30e9ebdb2ae85b1646)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-04-19 10:38:37 +01:00

75 lines
2.3 KiB
Python

#!/usr/bin/env python
# Prepare the build system within the extensible SDK
import sys
import os
import subprocess
import signal
def reenable_sigint():
signal.signal(signal.SIGINT, signal.SIG_DFL)
def run_command_interruptible(cmd):
"""
Run a command with output displayed on the console, but ensure any Ctrl+C is
processed only by the child process.
"""
signal.signal(signal.SIGINT, signal.SIG_IGN)
try:
ret = subprocess.call(cmd, shell=True, preexec_fn=reenable_sigint)
finally:
signal.signal(signal.SIGINT, signal.SIG_DFL)
return ret
def get_last_consolelog():
'''Return the most recent console log file'''
logdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'tmp', 'log', 'cooker')
if os.path.exists(logdir):
mcdir = os.listdir(logdir)
if mcdir:
logdir = os.path.join(logdir, mcdir[0])
logfiles = [os.path.join(logdir, fn) for fn in os.listdir(logdir)]
logfiles.sort(key=os.path.getmtime)
if logfiles:
return os.path.join(logdir, logfiles[-1])
return None
def main():
if len(sys.argv) < 2:
print('Please specify output log file')
return 1
logfile = sys.argv[1]
if len(sys.argv) < 3:
sdk_targets = []
else:
sdk_targets = ' '.join(sys.argv[2:]).split()
if not sdk_targets:
# Just do a parse so the cache is primed
ret = run_command_interruptible('bitbake -p --quiet')
return ret
with open(logfile, 'a') as logf:
logf.write('Preparing SDK for %s...\n' % ', '.join(sdk_targets))
ret = run_command_interruptible('BB_SETSCENE_ENFORCE=1 bitbake --quiet %s' % ' '.join(sdk_targets))
if not ret:
ret = run_command_interruptible('bitbake --quiet build-sysroots')
lastlog = get_last_consolelog()
if lastlog:
with open(lastlog, 'r') as f:
for line in f:
logf.write(line)
if ret:
print('ERROR: SDK preparation failed: error log written to %s' % logfile)
return ret
if __name__ == "__main__":
try:
ret = main()
except Exception:
ret = 1
import traceback
traceback.print_exc()
sys.exit(ret)