#
# Copyright (c) 2017 Intel Corporation
# Copyright (c) 2016 Cadence Design Systems, Inc.
# SPDX-License-Identifier: Apache-2.0
#


# Abstraction of 'run' goal with xtsc-run

ifneq (${QEMU_PTY},)
    # By default xt-sim uses pty, do nothing
else
# We use QEMU_PIPE in order to avoid unnecessary changes in other scripts
# We are anyway emulating a QEMU behavior
ifneq (${QEMU_PIPE},)
    # Send console output to a pipe, used for running automated sanity tests
    XTRUN_FLAGS += > ${QEMU_PIPE}
endif
endif

xtsc-run:run
run:zephyr
	${Q}echo "***** Running simulation for Xtensa core \"${CONFIG_SOC}\" *****"
	$(if ${QEMU_PIPE},,@echo "To exit from XTSC-RUN enter: 'CTRL+c'")
	@echo '[XTSC-RUN] CPU: ${CONFIG_SOC}'
	${Q}test -f ${XTSC_INC} || ( \
		echo '*** Error: $@ requires valid XTSC include file in \
			"$${CONFIG_XTENSA_XTSC_INC}"' && \
		exit 1 \
	)
	${Q}sed -e 's@\(-core_program=\).*@\1${CURDIR}/zephyr.elf@' \
		< ${XTSC_INC} > ${XTSC_INC_FILE}
ifneq (${QEMU_PIPE},)
# Create a named pipe
	mkfifo ${QEMU_PIPE}
endif
# Run cycle accurate simulation with SystemC extension
# Ignore errors in order to be able to remove the named pipe at simulation end
	-${Q}cd ${XTSC_WORK_DIR} && \
		$(dir ${CROSS_COMPILE})xtsc-run \
		$(if ${XTSC_TRACE},-set_core_parm=SimClients="trace \
			${CURDIR}/${XTSC_TRACE}") \
		-include=${CURDIR}/${XTSC_INC_FILE} \
		$(if ${XTSC_DEBUG},-xxdebug) \
		${XTRUN_FLAGS} ${XTRUN_EXTRA_FLAGS}
ifneq (${QEMU_PIPE},)
# Remove the named pipe
	${RM} ${QEMU_PIPE}
endif

.PHONY: run xtsc-run
