|
| 1 | +cmake_minimum_required(VERSION 3.27) |
| 2 | + |
| 3 | +include(${CMAKE_CURRENT_LIST_DIR}/cmake/util.cmake) |
| 4 | + |
| 5 | +validate_esp_target(${ESP_TARGET}) |
| 6 | + |
| 7 | +include(${CMAKE_CURRENT_LIST_DIR}/cmake/build-flags.cmake) |
| 8 | + |
| 9 | +setup_toolchain(${ESP_TARGET} "${XTENSA_TARGETS}") |
| 10 | + |
| 11 | +project(openocd_stub LANGUAGES C CXX ASM) |
| 12 | + |
| 13 | +check_toolchain_version(${CMAKE_C_COMPILER} "esp-15.2.0_20250929") |
| 14 | + |
| 15 | +# Add common flags and definitions to all targets |
| 16 | +add_compile_options(${TARGET_COMPILER_FLAGS}) |
| 17 | +add_link_options(${COMMON_LINKER_FLAGS}) |
| 18 | +add_compile_definitions(${COMMON_COMPILE_DEFS}) |
| 19 | + |
| 20 | +set(LINKER_SCRIPTS |
| 21 | + ${CMAKE_CURRENT_LIST_DIR}/ld/${ESP_TARGET}.ld |
| 22 | + ${CMAKE_CURRENT_LIST_DIR}/ld/common.ld |
| 23 | +) |
| 24 | + |
| 25 | +set(SRC_DIR "${CMAKE_CURRENT_LIST_DIR}/src") |
| 26 | +set(SRC_FILES |
| 27 | + ${SRC_DIR}/stub_main.c |
| 28 | + ${SRC_DIR}/apptrace/src/apptrace_mem_ctrl.c |
| 29 | + ${SRC_DIR}/apptrace/src/stub_apptrace.c |
| 30 | + ${SRC_DIR}/test/src/flash_test.c |
| 31 | +) |
| 32 | +if(ESP_TARGET IN_LIST XTENSA_TARGETS) |
| 33 | + list(APPEND SRC_FILES ${SRC_DIR}/apptrace/src/apptrace_hw_xtensa.c) |
| 34 | +else() |
| 35 | + list(APPEND SRC_FILES ${SRC_DIR}/apptrace/src/apptrace_hw_riscv.c) |
| 36 | +endif() |
| 37 | + |
| 38 | +# Define command names. Should be the same order as the commands in the esp_stub.h file |
| 39 | +set(COMMANDS |
| 40 | + "cmd_test1" |
| 41 | + "cmd_recv_from_host" |
| 42 | + "cmd_send_to_host" |
| 43 | + "cmd_flash_info" |
| 44 | + "cmd_flash_test" |
| 45 | + "cmd_test_all" |
| 46 | +) |
| 47 | + |
| 48 | +# Define enabled macros for each command |
| 49 | +define_property(GLOBAL PROPERTY COMMAND_MACROS) |
| 50 | +set_property(GLOBAL PROPERTY COMMAND_MACROS:cmd_test1 STUB_CMD_TEST1) |
| 51 | +set_property(GLOBAL PROPERTY COMMAND_MACROS:cmd_recv_from_host STUB_CMD_RECV_FROM_HOST) |
| 52 | +set_property(GLOBAL PROPERTY COMMAND_MACROS:cmd_send_to_host STUB_CMD_SEND_TO_HOST) |
| 53 | +set_property(GLOBAL PROPERTY COMMAND_MACROS:cmd_flash_info STUB_CMD_FLASH_INFO) |
| 54 | +set_property(GLOBAL PROPERTY COMMAND_MACROS:cmd_flash_test STUB_CMD_FLASH_TEST) |
| 55 | +set_property(GLOBAL PROPERTY COMMAND_MACROS:cmd_test_all |
| 56 | + STUB_CMD_TEST1 |
| 57 | + STUB_CMD_RECV_FROM_HOST |
| 58 | + STUB_CMD_SEND_TO_HOST |
| 59 | + STUB_CMD_FLASH_INFO |
| 60 | + STUB_CMD_FLASH_TEST |
| 61 | + STUB_LOG_ENABLED |
| 62 | + STUB_LIB_LOG_BUF |
| 63 | + STUB_LIB_LOG_BUF_SIZE=8192 |
| 64 | +) |
| 65 | + |
| 66 | +# Create a list to hold all target names |
| 67 | +set(ALL_TARGETS) |
| 68 | + |
| 69 | +# Iterate over each command and create a separate target |
| 70 | +foreach(COMMAND ${COMMANDS}) |
| 71 | + string(TOUPPER ${COMMAND} COMMAND_UPPER) |
| 72 | + set(TARGET_NAME stub_${ESP_TARGET}_${COMMAND}) |
| 73 | + set(TARGET_ELF ${TARGET_NAME}.elf) |
| 74 | + set(ESP_STUB_LIB esp-stub-lib-${COMMAND}) |
| 75 | + set(STUB_COMMAND ${COMMAND}) |
| 76 | + string(TOUPPER ${ESP_TARGET} ESP_TARGET_NAME) |
| 77 | + |
| 78 | + add_executable(${TARGET_ELF} ${SRC_FILES}) |
| 79 | + |
| 80 | + set(PRIV_INCLUDE_DIRS |
| 81 | + ${CMAKE_CURRENT_SOURCE_DIR}/include |
| 82 | + ${CMAKE_CURRENT_SOURCE_DIR}/include/private |
| 83 | + ${CMAKE_CURRENT_SOURCE_DIR}/src/apptrace/include |
| 84 | + ${CMAKE_CURRENT_SOURCE_DIR}/src/test/include |
| 85 | + ) |
| 86 | + |
| 87 | + target_include_directories(${TARGET_ELF} |
| 88 | + PRIVATE ${PRIV_INCLUDE_DIRS} |
| 89 | + ) |
| 90 | + |
| 91 | + foreach(script ${LINKER_SCRIPTS}) |
| 92 | + target_link_options(${TARGET_ELF} PRIVATE -T${script}) |
| 93 | + endforeach() |
| 94 | + |
| 95 | + if(${ESP_TARGET} STREQUAL "esp8266") |
| 96 | + target_link_options(${TARGET_ELF} PRIVATE -Wl,--entry=stub_main_esp8266) |
| 97 | + endif() |
| 98 | + |
| 99 | + get_property(COMMAND_DEFINES GLOBAL PROPERTY COMMAND_MACROS:${COMMAND}) |
| 100 | + |
| 101 | + set(STUB_COMPILE_DEFS "${COMMAND_DEFINES}; ${ESP_TARGET_NAME}") |
| 102 | + |
| 103 | + add_subdirectory(esp-stub-lib ${ESP_STUB_LIB}) |
| 104 | + |
| 105 | + target_compile_definitions(${TARGET_ELF} PRIVATE ${STUB_COMPILE_DEFS}) |
| 106 | + |
| 107 | + set(MAP_FILE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}.map) |
| 108 | + target_link_options(${TARGET_ELF} PRIVATE -Wl,-Map=${MAP_FILE}) |
| 109 | + set_directory_properties(PROPERTIES ADDITIONAL_CLEAN_FILES ${MAP_FILE}) |
| 110 | + |
| 111 | + add_custom_command(TARGET ${TARGET_ELF} POST_BUILD |
| 112 | + COMMAND ${CMAKE_SIZE} ${TARGET_ELF} |
| 113 | + COMMAND ${CMAKE_OBJDUMP} -d $<TARGET_FILE:${TARGET_ELF}> -M no-aliases > ${CMAKE_BINARY_DIR}/${TARGET_NAME}.asm |
| 114 | + ) |
| 115 | + |
| 116 | + target_link_libraries(${TARGET_ELF} PRIVATE ${ESP_STUB_LIB}) |
| 117 | + |
| 118 | + list(APPEND ALL_TARGETS ${TARGET_ELF}) |
| 119 | + |
| 120 | +endforeach() |
| 121 | + |
| 122 | +string(REPLACE ";" "," COMMANDS_LIST "${COMMANDS}") |
| 123 | +add_custom_target(generate_image_headers ALL |
| 124 | + DEPENDS ${ALL_TARGETS} |
| 125 | + COMMAND ${CMAKE_COMMAND} |
| 126 | + -DESP_TARGET=${ESP_TARGET} |
| 127 | + -DCOMMANDS="${COMMANDS_LIST}" |
| 128 | + -DCMAKE_OBJCOPY=${CMAKE_OBJCOPY} |
| 129 | + -DCMAKE_READELF=${CMAKE_READELF} |
| 130 | + -P ${CMAKE_CURRENT_LIST_DIR}/cmake/generate_header.cmake |
| 131 | + COMMENT "Generating stub image headers" |
| 132 | +) |
0 commit comments