summaryrefslogtreecommitdiffstats
path: root/poky/meta/files/ext-sdk-prepare.py
diff options
context:
space:
mode:
Diffstat (limited to 'poky/meta/files/ext-sdk-prepare.py')
-rw-r--r--poky/meta/files/ext-sdk-prepare.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/poky/meta/files/ext-sdk-prepare.py b/poky/meta/files/ext-sdk-prepare.py
new file mode 100644
index 000000000..96c5212a2
--- /dev/null
+++ b/poky/meta/files/ext-sdk-prepare.py
@@ -0,0 +1,74 @@
+#!/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)
OpenPOWER on IntegriCloud