Factor the classes which do the work into a new "runner" package. This package has a core module where ZephyrBinaryRunner and common helpers will live, and one file per subclass / runner front-end. The top-level script, zephyr_flash_debug.py, still exists, but just delegates its work to the core. Signed-off-by: Marti Bolivar <marti.bolivar@linaro.org>
61 lines
2 KiB
Python
Executable file
61 lines
2 KiB
Python
Executable file
#! /usr/bin/env python3
|
|
|
|
# Copyright (c) 2017 Linaro Limited.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
"""Zephyr flash/debug script
|
|
|
|
This script is a transparent replacement for existing Zephyr flash and debug
|
|
scripts, i.e. scripts to flash binaries, run them, and debug them on real or
|
|
emulated hardware. If it can invoke the relevant tools natively, it will do so;
|
|
otherwise, it delegates to the shell script."""
|
|
|
|
from os import path
|
|
import subprocess
|
|
import sys
|
|
|
|
from runner.core import ZephyrBinaryRunner, get_env_bool_or
|
|
|
|
|
|
# TODO: Stop using environment variables.
|
|
#
|
|
# Migrate the build system so we can use an argparse.ArgumentParser and
|
|
# per-flasher subparsers, so invoking the script becomes something like:
|
|
#
|
|
# python zephyr_flash_debug.py openocd --openocd-bin=/openocd/path ...
|
|
#
|
|
# For now, maintain compatibility.
|
|
def run(shell_script_full, command, debug):
|
|
shell_script = path.basename(shell_script_full)
|
|
try:
|
|
runner = ZephyrBinaryRunner.create_for_shell_script(shell_script,
|
|
command,
|
|
debug)
|
|
except ValueError:
|
|
# Unsupported; fall back on shell script.
|
|
print('Unsupported, falling back on shell script',
|
|
file=sys.stderr)
|
|
subprocess.check_call([shell_script_full, command])
|
|
return
|
|
|
|
runner.run(command)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
commands = {'flash', 'debug', 'debugserver'}
|
|
debug = True
|
|
try:
|
|
debug = get_env_bool_or('KBUILD_VERBOSE', False)
|
|
if len(sys.argv) != 3 or sys.argv[1] not in commands:
|
|
raise ValueError('usage: {} <{}> path-to-script'.format(
|
|
sys.argv[0], '|'.join(commands)))
|
|
run(sys.argv[2], sys.argv[1], debug)
|
|
except Exception as e:
|
|
if debug:
|
|
raise
|
|
else:
|
|
print('Error: {}'.format(e), file=sys.stderr)
|
|
print('Re-run with KBUILD_VERBOSE=1 for a stack trace.',
|
|
file=sys.stderr)
|
|
sys.exit(1)
|