33 lines
1.1 KiB
CMake
33 lines
1.1 KiB
CMake
# CMake script to fix segment overlap issue
|
|
# This script modifies the ESP32-S3 memory layout to avoid 64KB flash segment overlaps
|
|
|
|
string(REPLACE "\\" "/" CMAKE_BINARY_DIR "${CMAKE_BINARY_DIR}")
|
|
set(SECTIONS_LD "${CMAKE_BINARY_DIR}/esp-idf/esp_system/ld/sections.ld")
|
|
|
|
if(EXISTS ${SECTIONS_LD})
|
|
file(READ ${SECTIONS_LD} CONTENT)
|
|
|
|
# 检查是否已经应用了修复
|
|
if(NOT CONTENT MATCHES "Rust segment overlap fix")
|
|
# 简单的方法:在文件末尾添加 64KB 对齐指令
|
|
# 这样可以确保所有段都正确对齐
|
|
set(NEW_CONTENT "${CONTENT}
|
|
|
|
/* Rust segment overlap fix */
|
|
.flash.rodata : ALIGN(0x10000)
|
|
{
|
|
*(.flash.rodata .flash.rodata.*)
|
|
*(.flash.rodata1)
|
|
*(.flash_rodata_align)
|
|
} >default_rodata_seg
|
|
")
|
|
|
|
file(WRITE ${SECTIONS_LD} "${NEW_CONTENT}")
|
|
message(STATUS "Applied segment overlap fix: added 64KB alignment for rodata")
|
|
else()
|
|
message(STATUS "Segment overlap fix already applied")
|
|
endif()
|
|
else()
|
|
message(WARNING "sections.ld not found at ${SECTIONS_LD}")
|
|
endif()
|