linker_ld.cmake 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. if((NOT CCRAM_SIZE) OR (CCRAM_SIZE STREQUAL "0K"))
  2. set(CCRAM_DEFINITION "")
  3. set(CCRAM_SECTION "")
  4. else()
  5. set(CCRAM_DEFINITION " CCMRAM (rw) : ORIGIN = ${CCRAM_ORIGIN}, LENGTH = ${CCRAM_SIZE}\n")
  6. set(CCRAM_SECTION "
  7. _siccmram = LOADADDR(.ccmram);\n\
  8. .ccmram :\n\
  9. {\n\
  10. . = ALIGN(4);\n\
  11. _sccmram = .;\n\
  12. *(.ccmram)\n\
  13. *(.ccmram*)\n\
  14. . = ALIGN(4);\n\
  15. _eccmram = .;\n\
  16. } >CCMRAM AT> FLASH\n\
  17. ")
  18. endif()
  19. if((NOT RAM_SHARE_SIZE) OR (RAM_SHARE_SIZE STREQUAL "0K"))
  20. set(RAM_SHARE_DEFINITION "")
  21. set(RAM_SHARE_SECTION "")
  22. else()
  23. set(RAM_SHARE_DEFINITION " RAM_SHARED (rw) : ORIGIN = ${RAM_SHARE_ORIGIN}, LENGTH = ${RAM_SHARE_SIZE}\n")
  24. set(RAM_SHARE_SECTION "
  25. MAPPING_TABLE (NOLOAD) : { *(MAPPING_TABLE) } >RAM_SHARED\n\
  26. MB_MEM1 (NOLOAD) : { *(MB_MEM1) } >RAM_SHARED\n\
  27. _siMB_MEM2 = LOADADDR(.MB_MEM2);\n\
  28. .MB_MEM2 :\n\
  29. {\n\
  30. _sMB_MEM2 = . ;\n\
  31. *(MB_MEM2) ;\n\
  32. _eMB_MEM2 = . ;\n\
  33. } >RAM_SHARED AT> FLASH\n\
  34. ")
  35. endif()
  36. set(SCRIPT_TEXT
  37. "ENTRY(Reset_Handler)\n\
  38. \n\
  39. _estack = ${RAM_ORIGIN} + ${RAM_SIZE};\n\
  40. _Min_Heap_Size = ${HEAP_SIZE};\n\
  41. _Min_Stack_Size = ${STACK_SIZE};\n\
  42. \n\
  43. MEMORY\n\
  44. {\n\
  45. FLASH (rx) : ORIGIN = ${FLASH_ORIGIN}, LENGTH = ${FLASH_SIZE}\n\
  46. RAM (xrw) : ORIGIN = ${RAM_ORIGIN}, LENGTH = ${RAM_SIZE}\n\
  47. ${CCRAM_DEFINITION}\n\
  48. ${RAM_SHARE_DEFINITION}\n\
  49. }\n\
  50. \n\
  51. SECTIONS\n\
  52. {\n\
  53. .isr_vector :\n\
  54. {\n\
  55. . = ALIGN(4);\n\
  56. KEEP(*(.isr_vector))\n\
  57. . = ALIGN(4);\n\
  58. } >FLASH\n\
  59. \n\
  60. .text :\n\
  61. {\n\
  62. . = ALIGN(4);\n\
  63. *(.text)\n\
  64. *(.text*)\n\
  65. *(.glue_7)\n\
  66. *(.glue_7t)\n\
  67. *(.eh_frame)\n\
  68. \n\
  69. KEEP (*(.init))\n\
  70. KEEP (*(.fini))\n\
  71. \n\
  72. . = ALIGN(4);\n\
  73. _etext = .;\n\
  74. } >FLASH\n\
  75. \n\
  76. .rodata :\n\
  77. {\n\
  78. . = ALIGN(4);\n\
  79. *(.rodata)\n\
  80. *(.rodata*)\n\
  81. . = ALIGN(4);\n\
  82. } >FLASH\n\
  83. \n\
  84. .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH\n\
  85. .ARM : {\n\
  86. __exidx_start = .;\n\
  87. *(.ARM.exidx*)\n\
  88. __exidx_end = .;\n\
  89. } >FLASH\n\
  90. \n\
  91. .preinit_array :\n\
  92. {\n\
  93. PROVIDE_HIDDEN (__preinit_array_start = .);\n\
  94. KEEP (*(.preinit_array*))\n\
  95. PROVIDE_HIDDEN (__preinit_array_end = .);\n\
  96. } >FLASH\n\
  97. .init_array :\n\
  98. {\n\
  99. PROVIDE_HIDDEN (__init_array_start = .);\n\
  100. KEEP (*(SORT(.init_array.*)))\n\
  101. KEEP (*(.init_array*))\n\
  102. PROVIDE_HIDDEN (__init_array_end = .);\n\
  103. } >FLASH\n\
  104. .fini_array :\n\
  105. {\n\
  106. PROVIDE_HIDDEN (__fini_array_start = .);\n\
  107. KEEP (*(SORT(.fini_array.*)))\n\
  108. KEEP (*(.fini_array*))\n\
  109. PROVIDE_HIDDEN (__fini_array_end = .);\n\
  110. } >FLASH\n\
  111. \n\
  112. _sidata = LOADADDR(.data);\n\
  113. \n\
  114. .data : \n\
  115. {\n\
  116. . = ALIGN(4);\n\
  117. _sdata = .; \n\
  118. *(.data)\n\
  119. *(.data*)\n\
  120. \n\
  121. . = ALIGN(4);\n\
  122. _edata = .;\n\
  123. } >RAM AT> FLASH\n\
  124. ${CCRAM_SECTION}\n\
  125. . = ALIGN(4);\n\
  126. .bss :\n\
  127. {\n\
  128. _sbss = .;\n\
  129. __bss_start__ = _sbss;\n\
  130. *(.bss)\n\
  131. *(.bss*)\n\
  132. *(COMMON)\n\
  133. \n\
  134. . = ALIGN(4);\n\
  135. _ebss = .;\n\
  136. __bss_end__ = _ebss;\n\
  137. } >RAM\n\
  138. \n\
  139. ._user_heap_stack :\n\
  140. {\n\
  141. . = ALIGN(8);\n\
  142. PROVIDE ( end = . );\n\
  143. PROVIDE ( _end = . );\n\
  144. . = . + _Min_Heap_Size;\n\
  145. . = . + _Min_Stack_Size;\n\
  146. . = ALIGN(8);\n\
  147. } >RAM\n\
  148. \n\
  149. /DISCARD/ :\n\
  150. {\n\
  151. libc.a ( * )\n\
  152. libm.a ( * )\n\
  153. libgcc.a ( * )\n\
  154. }\n\
  155. \n\
  156. .ARM.attributes 0 : { *(.ARM.attributes) }\n\
  157. ${RAM_SHARE_SECTION}\n\
  158. }"
  159. )
  160. file(WRITE "${LINKER_SCRIPT}" "${SCRIPT_TEXT}")