linker_ld.cmake 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. set(SCRIPT_TEXT
  20. "ENTRY(Reset_Handler)\n\
  21. \n\
  22. _estack = ${RAM_ORIGIN} + ${RAM_SIZE};\n\
  23. _Min_Heap_Size = ${HEAP_SIZE};\n\
  24. _Min_Stack_Size = ${STACK_SIZE};\n\
  25. \n\
  26. MEMORY\n\
  27. {\n\
  28. FLASH (rx) : ORIGIN = ${FLASH_ORIGIN}, LENGTH = ${FLASH_SIZE}\n\
  29. RAM (xrw) : ORIGIN = ${RAM_ORIGIN}, LENGTH = ${RAM_SIZE}\n\
  30. ${CCRAM_DEFINITION}\n\
  31. }\n\
  32. \n\
  33. SECTIONS\n\
  34. {\n\
  35. .isr_vector :\n\
  36. {\n\
  37. . = ALIGN(4);\n\
  38. KEEP(*(.isr_vector))\n\
  39. . = ALIGN(4);\n\
  40. } >FLASH\n\
  41. \n\
  42. .text :\n\
  43. {\n\
  44. . = ALIGN(4);\n\
  45. *(.text)\n\
  46. *(.text*)\n\
  47. *(.glue_7)\n\
  48. *(.glue_7t)\n\
  49. *(.eh_frame)\n\
  50. \n\
  51. KEEP (*(.init))\n\
  52. KEEP (*(.fini))\n\
  53. \n\
  54. . = ALIGN(4);\n\
  55. _etext = .;\n\
  56. } >FLASH\n\
  57. \n\
  58. .rodata :\n\
  59. {\n\
  60. . = ALIGN(4);\n\
  61. *(.rodata)\n\
  62. *(.rodata*)\n\
  63. . = ALIGN(4);\n\
  64. } >FLASH\n\
  65. \n\
  66. .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH\n\
  67. .ARM : {\n\
  68. __exidx_start = .;\n\
  69. *(.ARM.exidx*)\n\
  70. __exidx_end = .;\n\
  71. } >FLASH\n\
  72. \n\
  73. .preinit_array :\n\
  74. {\n\
  75. PROVIDE_HIDDEN (__preinit_array_start = .);\n\
  76. KEEP (*(.preinit_array*))\n\
  77. PROVIDE_HIDDEN (__preinit_array_end = .);\n\
  78. } >FLASH\n\
  79. .init_array :\n\
  80. {\n\
  81. PROVIDE_HIDDEN (__init_array_start = .);\n\
  82. KEEP (*(SORT(.init_array.*)))\n\
  83. KEEP (*(.init_array*))\n\
  84. PROVIDE_HIDDEN (__init_array_end = .);\n\
  85. } >FLASH\n\
  86. .fini_array :\n\
  87. {\n\
  88. PROVIDE_HIDDEN (__fini_array_start = .);\n\
  89. KEEP (*(SORT(.fini_array.*)))\n\
  90. KEEP (*(.fini_array*))\n\
  91. PROVIDE_HIDDEN (__fini_array_end = .);\n\
  92. } >FLASH\n\
  93. \n\
  94. _sidata = LOADADDR(.data);\n\
  95. \n\
  96. .data : \n\
  97. {\n\
  98. . = ALIGN(4);\n\
  99. _sdata = .; \n\
  100. *(.data)\n\
  101. *(.data*)\n\
  102. \n\
  103. . = ALIGN(4);\n\
  104. _edata = .;\n\
  105. } >RAM AT> FLASH\n\
  106. ${CCRAM_SECTION}\n\
  107. . = ALIGN(4);\n\
  108. .bss :\n\
  109. {\n\
  110. _sbss = .;\n\
  111. __bss_start__ = _sbss;\n\
  112. *(.bss)\n\
  113. *(.bss*)\n\
  114. *(COMMON)\n\
  115. \n\
  116. . = ALIGN(4);\n\
  117. _ebss = .;\n\
  118. __bss_end__ = _ebss;\n\
  119. } >RAM\n\
  120. \n\
  121. ._user_heap_stack :\n\
  122. {\n\
  123. . = ALIGN(8);\n\
  124. PROVIDE ( end = . );\n\
  125. PROVIDE ( _end = . );\n\
  126. . = . + _Min_Heap_Size;\n\
  127. . = . + _Min_Stack_Size;\n\
  128. . = ALIGN(8);\n\
  129. } >RAM\n\
  130. \n\
  131. /DISCARD/ :\n\
  132. {\n\
  133. libc.a ( * )\n\
  134. libm.a ( * )\n\
  135. libgcc.a ( * )\n\
  136. }\n\
  137. \n\
  138. .ARM.attributes 0 : { *(.ARM.attributes) }\n\
  139. }"
  140. )
  141. file(WRITE "${LINKER_SCRIPT}" "${SCRIPT_TEXT}")