zephyr/cmake/emu/simics.cmake
Ederson de Souza 050b8a915c cmake/emu: Use SIMICS_PROJECT environment variable as working dir
Some simics dependencies live at its own directory, not application's.

Note we need to change it to its absolute path, because relative paths
for `add_custom_target` are relative to the build directory, while
relative SIMICS_PROJECT are more likely to be relative to ZEPHYR_BASE,
from where west or twister are normally run.

Signed-off-by: Ederson de Souza <ederson.desouza@intel.com>
2025-05-20 12:47:25 +02:00

44 lines
1 KiB
CMake

# Copyright (c) 2023-2024 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
find_program(
SIMICS
NAMES simics
NO_DEFAULT_PATH
PATHS ENV SIMICS_PROJECT
# Search exactly for the project's autogenerated 'trampoline' script.
)
if(SIMICS STREQUAL SIMICS-NOTFOUND)
message(WARNING "Simics simulator environment is not found at SIMICS_PROJECT:'$ENV{SIMICS_PROJECT}'")
else()
message(STATUS "Found Simics: ${SIMICS}")
zephyr_get(SIMICS_SCRIPT_PATH SYSBUILD GLOBAL)
if(SIMICS_SCRIPT_PATH)
set(SIMICS_SCRIPT ${SIMICS_SCRIPT_PATH})
else()
set(SIMICS_SCRIPT ${BOARD_DIR}/support/${BOARD}.simics)
endif()
get_property(SIMICS_ARGS GLOBAL PROPERTY "BOARD_EMU_ARGS_simics")
file(REAL_PATH $ENV{SIMICS_PROJECT} simics_project_dir_real)
add_custom_target(run_simics
COMMAND
${SIMICS}
-no-gui
--no-win
--batch-mode
${SIMICS_SCRIPT}
${SIMICS_ARGS}
$ENV{SIMICS_EXTRA_ARGS}
-e run
WORKING_DIRECTORY ${simics_project_dir_real}
DEPENDS ${logical_target_for_zephyr_elf}
USES_TERMINAL
)
endif()