linker.cmake 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. function(stm32_set_linker_script TARGET SCRIPT)
  2. target_link_options(${TARGET} PRIVATE -T "${SCRIPT}")
  3. endfunction()
  4. function(stm32_generate_linker_script TARGET)
  5. stm32_get_chip(${TARGET} FAMILY DEVICE)
  6. get_target_property(FLASH_ORIGIN ${TARGET} STM32_FLASH_ORIGIN)
  7. get_target_property(RAM_ORIGIN ${TARGET} STM32_RAM_ORIGIN)
  8. get_target_property(CCRAM_ORIGIN ${TARGET} STM32_CCRAM_ORIGIN)
  9. get_target_property(FLASH_SIZE ${TARGET} STM32_FLASH_SIZE)
  10. get_target_property(RAM_SIZE ${TARGET} STM32_RAM_SIZE)
  11. get_target_property(CCRAM_SIZE ${TARGET} STM32_CCRAM_SIZE)
  12. get_target_property(STACK_SIZE ${TARGET} STM32_STACK_SIZE)
  13. get_target_property(HEAP_SIZE ${TARGET} STM32_HEAP_SIZE)
  14. if(NOT FLASH_ORIGIN)
  15. set(FLASH_ORIGIN 0x8000000)
  16. endif()
  17. if(NOT RAM_ORIGIN)
  18. set(RAM_ORIGIN 0x20000000)
  19. endif()
  20. if(NOT CCRAM_ORIGIN)
  21. set(CCRAM_ORIGIN 0x10000000)
  22. endif()
  23. if(${FAMILY} STREQUAL "F4")
  24. stm32f4_memory_size(${DEVICE} DEF_FLASH DEF_RAM DEF_CCRAM)
  25. endif()
  26. if(NOT FLASH_SIZE)
  27. set(FLASH_SIZE ${DEF_FLASH})
  28. endif()
  29. if(NOT RAM_SIZE)
  30. set(RAM_SIZE ${DEF_RAM})
  31. endif()
  32. if(NOT CCRAM_SIZE)
  33. set(CCRAM_SIZE ${DEF_CCRAM})
  34. endif()
  35. if(NOT STACK_SIZE)
  36. set(STACK_SIZE 0x400)
  37. endif()
  38. if(NOT HEAP_SIZE)
  39. set(HEAP_SIZE 0x200)
  40. endif()
  41. add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld"
  42. COMMAND ${CMAKE_COMMAND}
  43. -DFLASH_ORIGIN="${FLASH_ORIGIN}"
  44. -DRAM_ORIGIN="${RAM_ORIGIN}"
  45. -DCCRAM_ORIGIN="${CCRAM_ORIGIN}"
  46. -DFLASH_SIZE="${FLASH_SIZE}"
  47. -DRAM_SIZE="${RAM_SIZE}"
  48. -DCCRAM_SIZE="${CCRAM_SIZE}"
  49. -DSTACK_SIZE="${STACK_SIZE}"
  50. -DHEAP_SIZE="${HEAP_SIZE}"
  51. -DLINKER_SCRIPT="${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld"
  52. -P "${STM32_CMAKE_DIR}/stm32/linker_ld.cmake"
  53. )
  54. add_custom_target(${TARGET}_linker_script DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld)
  55. add_dependencies(${TARGET} ${TARGET}_linker_script)
  56. stm32_set_linker_script(${TARGET} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld)
  57. endfunction()