mirror of https://github.com/ARMmbed/mbed-os.git
92 lines
2.9 KiB
CMake
92 lines
2.9 KiB
CMake
# Copyright (c) 2022 ARM Limited. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
### Redlink Upload Method
|
|
# This method needs the following parameters:
|
|
# REDLINK_PART_NUMBER - Part number (-p) argument to pass to the upload tool
|
|
# REDLINK_PART_XML_DIR - Directory where the XML files for this MCU can be found.
|
|
# REDLINK_CLOCK_SPEED - JTAG/SWD clock speed to talk to the target at.
|
|
# REDLINK_CONNECT_ARGS - Extra connect arguments to pass to Redlink tool. These can be gotten by watching the command that MCUXpresso IDE executes when you start a debug session.
|
|
# This method creates the following options:
|
|
# REDLINK_PROBE_SN - Serial number of the debug probe to connect to. If blank, will connect to any probe.
|
|
|
|
set(UPLOAD_SUPPORTS_DEBUG TRUE)
|
|
|
|
### Handle options
|
|
set(REDLINK_PROBE_SN "" CACHE STRING "Serial number of the debug probe to connect to for Redlink. Set to empty to detect any matching adapter.")
|
|
|
|
if("${REDLINK_PROBE_SN}" STREQUAL "")
|
|
# This argument causes Redlink to connect to the first available debug probe
|
|
set(REDLINK_PROBE_ARGS --probehandle 1 CACHE INTERNAL "" FORCE)
|
|
else()
|
|
set(REDLINK_PROBE_ARGS --probeserial ${REDLINK_PROBE_SN} CACHE INTERNAL "" FORCE)
|
|
endif()
|
|
|
|
if("${REDLINK_PART_NUMBER}" STREQUAL "")
|
|
message(FATAL_ERROR "You must set REDLINK_PART_NUMBER in your CMake scripts to use REDLINK")
|
|
endif()
|
|
|
|
if("${REDLINK_PART_XML_DIR}" STREQUAL "")
|
|
message(FATAL_ERROR "You must set REDLINK_PART_XML_DIR in your CMake scripts to use REDLINK")
|
|
endif()
|
|
|
|
if("${REDLINK_CLOCK_SPEED}" STREQUAL "")
|
|
message(FATAL_ERROR "You must set REDLINK_CLOCK_SPEED in your CMake scripts to use REDLINK")
|
|
endif()
|
|
|
|
### Check if upload method can be enabled on this machine
|
|
find_package(Redlink)
|
|
set(UPLOAD_REDLINK_FOUND ${Redlink_FOUND})
|
|
|
|
### Function to generate upload target
|
|
|
|
function(gen_upload_target TARGET_NAME BIN_FILE HEX_FILE)
|
|
|
|
add_custom_target(flash-${TARGET_NAME}
|
|
COMMENT "Flashing ${TARGET_NAME} with Redlink..."
|
|
COMMAND ${crt_emu_cm_redlink_PATH}
|
|
-p ${REDLINK_PART_NUMBER}
|
|
--flash-hashing
|
|
-x ${REDLINK_PART_XML_DIR}
|
|
--flash-dir ${REDLINK_FLASH_LOADER_PATH}
|
|
-g
|
|
-s ${REDLINK_CLOCK_SPEED}
|
|
${REDLINK_CONNECT_ARGS}
|
|
${REDLINK_PROBE_ARGS}
|
|
--flash-load-exec $<TARGET_FILE:${TARGET_NAME}>)
|
|
|
|
add_dependencies(flash-${TARGET_NAME} ${TARGET_NAME})
|
|
|
|
endfunction(gen_upload_target)
|
|
|
|
### Commands to run the debug server.
|
|
set(UPLOAD_GDBSERVER_DEBUG_COMMAND
|
|
${crt_emu_cm_redlink_PATH}
|
|
-p ${REDLINK_PART_NUMBER}
|
|
--flash-hashing
|
|
-x ${REDLINK_PART_XML_DIR}
|
|
--flash-dir ${REDLINK_FLASH_LOADER_PATH}
|
|
-g
|
|
-s ${REDLINK_CLOCK_SPEED}
|
|
-2
|
|
${REDLINK_CONNECT_ARGS}
|
|
${REDLINK_PROBE_ARGS}
|
|
--server :${GDB_PORT}
|
|
--vc
|
|
--connect-reset system
|
|
--kill-server # Close Redlink when GDB exits
|
|
)
|
|
|
|
|
|
# request extended-remote GDB sessions
|
|
set(UPLOAD_WANTS_EXTENDED_REMOTE TRUE)
|
|
|
|
set(UPLOAD_LAUNCH_COMMANDS
|
|
"monitor reset" # undocumented, but works
|
|
"load"
|
|
"break main"
|
|
"monitor reset"
|
|
)
|
|
set(UPLOAD_RESTART_COMMANDS
|
|
"monitor reset"
|
|
) |