128 lines
3.2 KiB
CMake
128 lines
3.2 KiB
CMake
# TODO: Add support for external RAM
|
|
|
|
IF(STM32_FAMILY STREQUAL "F4")
|
|
SET(STM32_CCRAM_DEF " CCMRAM (rw) : ORIGIN = ${STM32_CCRAM_ORIGIN}, LENGTH = ${STM32_CCRAM_SIZE}\n")
|
|
SET(STM32_CCRAM_SECTION
|
|
" _siccmram = LOADADDR(.ccmram)\;\n"
|
|
" .ccmram :\n"
|
|
" {"
|
|
" . = ALIGN(4)\;\n"
|
|
" _sccmram = .\;\n"
|
|
" *(.ccmram)\n"
|
|
" *(.ccmram*)\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" _eccmram = .\;\n"
|
|
" } >CCMRAM AT> FLASH\n"
|
|
)
|
|
ELSE()
|
|
SET(STM32_CCRAM_DEF "")
|
|
SET(STM32_CCRAM_SECTION "")
|
|
ENDIF()
|
|
|
|
SET(STM32_LINKER_SCRIPT_TEXT
|
|
"ENTRY(Reset_Handler)\n"
|
|
"_estack = ${STM32_RAM_ORIGIN} + ${STM32_RAM_SIZE} - 1\;\n"
|
|
"_Min_Heap_Size = ${STM32_MIN_HEAP_SIZE}\;\n"
|
|
"_Min_Stack_Size = ${STM32_MIN_STACK_SIZE}\;\n"
|
|
"MEMORY\n"
|
|
"{\n"
|
|
" FLASH (rx) : ORIGIN = ${STM32_FLASH_ORIGIN}, LENGTH = ${STM32_FLASH_SIZE}\n"
|
|
" RAM (xrw) : ORIGIN = ${STM32_RAM_ORIGIN}, LENGTH = ${STM32_RAM_SIZE}\n"
|
|
"${STM32_CCRAM_DEF}"
|
|
"}\n"
|
|
"SECTIONS\n"
|
|
"{\n"
|
|
" .isr_vector :\n"
|
|
" {\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" KEEP(*(.isr_vector))\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" } >FLASH\n"
|
|
" .text :\n"
|
|
" {\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" *(.text)\n"
|
|
" *(.text*)\n"
|
|
" *(.glue_7)\n"
|
|
" *(.glue_7t)\n"
|
|
" *(.eh_frame)\n"
|
|
" KEEP (*(.init))\n"
|
|
" KEEP (*(.fini))\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" _etext = .\;\n"
|
|
" } >FLASH\n"
|
|
" .rodata :\n"
|
|
" {\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" *(.rodata)\n"
|
|
" *(.rodata*)\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" } >FLASH\n"
|
|
" .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH\n"
|
|
" .ARM : {\n"
|
|
" __exidx_start = .\;\n"
|
|
" *(.ARM.exidx*)\n"
|
|
" __exidx_end = .\;\n"
|
|
" } >FLASH\n"
|
|
" .preinit_array :\n"
|
|
" {\n"
|
|
" PROVIDE_HIDDEN (__preinit_array_start = .)\;\n"
|
|
" KEEP (*(.preinit_array*))\n"
|
|
" PROVIDE_HIDDEN (__preinit_array_end = .)\;\n"
|
|
" } >FLASH\n"
|
|
" .init_array :\n"
|
|
" {\n"
|
|
" PROVIDE_HIDDEN (__init_array_start = .)\;\n"
|
|
" KEEP (*(SORT(.init_array.*)))\n"
|
|
" KEEP (*(.init_array*))\n"
|
|
" PROVIDE_HIDDEN (__init_array_end = .)\;\n"
|
|
" } >FLASH\n"
|
|
" .fini_array :\n"
|
|
" {\n"
|
|
" PROVIDE_HIDDEN (__fini_array_start = .)\;\n"
|
|
" KEEP (*(SORT(.fini_array.*)))\n"
|
|
" KEEP (*(.fini_array*))\n"
|
|
" PROVIDE_HIDDEN (__fini_array_end = .)\;\n"
|
|
" } >FLASH\n"
|
|
" _sidata = LOADADDR(.data)\;\n"
|
|
" .data : \n"
|
|
" {\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" _sdata = .\;\n"
|
|
" *(.data)\n"
|
|
" *(.data*)\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" _edata = .\;\n"
|
|
" } >RAM AT> FLASH\n"
|
|
"${STM32_CCRAM_SECTION}"
|
|
" . = ALIGN(4)\;\n"
|
|
" .bss :\n"
|
|
" {\n"
|
|
" _sbss = .\;\n"
|
|
" __bss_start__ = _sbss\;\n"
|
|
" *(.bss)\n"
|
|
" *(.bss*)\n"
|
|
" *(COMMON)\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" _ebss = .\;\n"
|
|
" __bss_end__ = _ebss\;\n"
|
|
" } >RAM\n"
|
|
" ._user_heap_stack :\n"
|
|
" {\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" PROVIDE ( end = . )\;\n"
|
|
" PROVIDE ( _end = . )\;\n"
|
|
" . = . + _Min_Heap_Size\;\n"
|
|
" . = . + _Min_Stack_Size\;\n"
|
|
" . = ALIGN(4)\;\n"
|
|
" } >RAM\n"
|
|
" /DISCARD/ :\n"
|
|
" {\n"
|
|
" libc.a ( * )\n"
|
|
" libm.a ( * )\n"
|
|
" libgcc.a ( * )\n"
|
|
" }\n"
|
|
" .ARM.attributes 0 : { *(.ARM.attributes) }\n"
|
|
"}\n"
|
|
)
|