Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

boards: intel: ish: Improve Simics support #82657

Merged
merged 1 commit into from
Dec 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion boards/common/simics.board.cmake
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Copyright (c) 2023 Intel Corporation
# Copyright (c) 2023-2024 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0

set(SUPPORTED_EMU_PLATFORMS simics)

board_finalize_emu_args(simics)
5 changes: 2 additions & 3 deletions boards/intel/ish/board.cmake
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# Copyright (c) 2023-2024 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0

set(SUPPORTED_EMU_PLATFORMS simics)

if(CONFIG_BOARD_INTEL_ISH_5_8_0)
board_emu_args(simics "project=$ENV{SIMICS_PROJECT}")
board_emu_args(simics "zephyr_elf=${APPLICATION_BINARY_DIR}/zephyr/${KERNEL_ELF_NAME}")
board_emu_args(simics "zephyr_start_address=${CONFIG_SRAM_BASE_ADDRESS}")
include(${ZEPHYR_BASE}/boards/common/simics.board.cmake)
Expand Down
1 change: 1 addition & 0 deletions boards/intel/ish/intel_ish_5_8_0.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ simulation:
supported:
- serial
testing:
timeout_multiplier: 2
ignore_tags:
- net
- bluetooth
Expand Down
50 changes: 31 additions & 19 deletions cmake/emu/simics.cmake
Original file line number Diff line number Diff line change
@@ -1,30 +1,42 @@
# Copyright (c) 2023 Intel Corporation
# 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.
)

zephyr_get(SIMICS_SCRIPT_PATH SYSBUILD GLOBAL)
if(SIMICS_SCRIPT_PATH)
set(SIMICS_SCRIPT ${SIMICS_SCRIPT_PATH})
if(SIMICS STREQUAL SIMICS-NOTFOUND)
message(WARNING "Simics simulator environment is not found at SIMICS_PROJECT:'${SIMICS_PROJECT}'")
else()
set(SIMICS_SCRIPT ${BOARD_DIR}/support/${BOARD}.simics)
endif()
message(STATUS "Found Simics: ${SIMICS}")

get_property(SIMICS_ARGS GLOBAL PROPERTY "BOARD_EMU_ARGS_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()

add_custom_target(run_simics
COMMAND
${SIMICS}
-no-gui
-no-win
${SIMICS_SCRIPT}
${SIMICS_ARGS}
-e run
WORKING_DIRECTORY ${APPLICATION_BINARY_DIR}
DEPENDS ${logical_target_for_zephyr_elf}
USES_TERMINAL
)
get_property(SIMICS_ARGS GLOBAL PROPERTY "BOARD_EMU_ARGS_simics")

add_custom_target(run_simics
COMMAND
${SIMICS}
-no-gui
--no-win
--batch-mode
${SIMICS_SCRIPT}
${SIMICS_ARGS}
$ENV{SIMICS_EXTRA_ARGS}
-e run
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we use EXTRA_SIMICS_ARGS to be aligned with other Zephyr CMake settings, like EXTRA_CONF_FILE, EXTRA_CFLAGS, etc. ?

Also, using zephyr_get(EXTRA_SIMICS_ARGS ...) will allow users to choose freely between sysbuild, CMake var -DEXTRA_SIMICS_ARGS=<val>, or environment variable and not force them into using env vars.

Copy link
Member Author

@golowanow golowanow Dec 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SIMICS_EXTRA_ARGS got its name as one of many other SIMICS_* env variables which belong to Simics integration on the host level; its purpose - to pass through some custom platform parameters from user/CI to the simulator runtime through all the layers, so it is not in Zephyr naming domain.
Currently there is no need to ingest values there from other sources (CMake etc.) with zephyr_get(), but may be helpful to do that later (good idea, thanks @tejlmand).

WORKING_DIRECTORY ${APPLICATION_BINARY_DIR}
DEPENDS ${logical_target_for_zephyr_elf}
USES_TERMINAL
)

endif()
Loading