esp-idf/tools/cmake/gdbinit.cmake

80 wiersze
2.9 KiB
CMake

# __generate_gdbinit
# Prepares gdbinit files to pass into the debugger.
function(__generate_gdbinit)
# Define static gdbinit commands
if(CONFIG_IDF_TARGET_LINUX)
set(gdbinit_connect
"# Run the application and stop on app_main()\n"
"break app_main\n"
"run\n")
else()
set(gdbinit_connect
"# Connect to the default openocd-esp port and stop on app_main()\n"
"set remotetimeout 10\n"
"target remote :3333\n"
"monitor reset halt\n"
"maintenance flush register-cache\n"
"thbreak app_main\n"
"continue\n")
endif()
set(gdbinit_py_extensions
"# Add Python GDB extensions\n"
"python\n"
"try:\n"
" import freertos_gdb\n"
"except ModuleNotFoundError:\n"
" print('warning: python extension \"freertos_gdb\" not found.')\n"
"end\n")
# Define paths
set(gdbinit_dir ${BUILD_DIR}/gdbinit)
set(gdbinit_rom_in_path ${gdbinit_dir}/rom.gdbinit.in)
set(gdbinit_rom_path ${gdbinit_dir}/rom.gdbinit)
set(symbols_gdbinit_path ${gdbinit_dir}/symbols)
set(py_extensions_gdbinit_path ${gdbinit_dir}/py_extensions)
set(connect_gdbinit_path ${gdbinit_dir}/connect)
idf_build_get_property(PROJECT_EXECUTABLE EXECUTABLE)
set(application_elf ${BUILD_DIR}/${PROJECT_EXECUTABLE})
file(TO_CMAKE_PATH $ENV{ESP_ROM_ELF_DIR} ESP_ROM_ELF_DIR)
file(MAKE_DIRECTORY ${gdbinit_dir})
# Get ROM ELFs gdbinit part
if(CONFIG_IDF_TARGET_LINUX)
set(rom_symbols)
else()
execute_process(
COMMAND python "${idf_path}/components/esp_rom/gen_gdbinit.py" ${IDF_TARGET}
OUTPUT_VARIABLE rom_symbols
RESULT_VARIABLE result
)
if(NOT result EQUAL 0)
set(rom_symbols)
message(WARNING "Error while generating esp_rom gdbinit")
endif()
endif()
# Check if bootloader ELF is defined and set symbol-file accordingly
if(DEFINED BOOTLOADER_ELF_FILE)
set(add_bootloader_symbols " add-symbol-file ${BOOTLOADER_ELF_FILE}")
else()
set(add_bootloader_symbols " # Bootloader elf was not found")
endif()
# Configure and generate files
configure_file(${idf_path}/tools/cmake/symbols.gdbinit.in ${symbols_gdbinit_path})
file(WRITE ${py_extensions_gdbinit_path} ${gdbinit_py_extensions})
file(WRITE ${connect_gdbinit_path} ${gdbinit_connect})
# TODO IDF-11667
file(WRITE ${gdbinit_dir}/gdbinit "source ${symbols_gdbinit_path}\n")
file(APPEND ${gdbinit_dir}/gdbinit "source ${connect_gdbinit_path}\n")
# NOTE: prefix_map gbinit file generates by prefix_map.cmake file
idf_build_set_property(GDBINIT_FILES_SYMBOLS ${symbols_gdbinit_path})
idf_build_set_property(GDBINIT_FILES_PY_EXTENSIONS ${py_extensions_gdbinit_path})
idf_build_set_property(GDBINIT_FILES_CONNECT ${connect_gdbinit_path})
endfunction()