# Copyright (c) 2017 Linaro Limited.
#
# SPDX-License-Identifier: Apache-2.0

'''Runner for debugging with xt-gdb.'''

from os import path

from .core import ZephyrBinaryRunner, get_env_or_bail


class XtensaBinaryRunner(ZephyrBinaryRunner):
    '''Runner front-end for xt-gdb.'''

    def __init__(self, gdb, elf_name, debug=False):
        super(XtensaBinaryRunner, self).__init__(debug=debug)
        self.gdb_cmd = [gdb]
        self.elf_name = elf_name

    def replaces_shell_script(shell_script, command):
        return command == 'debug' and shell_script == 'xt-gdb.sh'

    def create_from_env(command, debug):
        '''Create runner from environment.

        Required:

        - XCC_TOOLS: path to Xtensa tools
        - O: build output directory
        - KERNEL_ELF_NAME: zephyr kernel binary in ELF format
        '''
        xt_gdb = path.join(get_env_or_bail('XCC_TOOLS'), 'bin', 'xt-gdb')
        elf_name = path.join(get_env_or_bail('O'),
                             get_env_or_bail('KERNEL_ELF_NAME'))

        return XtensaBinaryRunner(xt_gdb, elf_name)

    def do_run(self, command, **kwargs):
        if command != 'debug':
            raise ValueError('Only debug is supported')

        gdb_cmd = (self.gdb_cmd + [self.elf_name])

        self.check_call(gdb_cmd)
