FindCMSIS.cmake 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. SET(STM32_CHIP_DEF_HD "STM32F10X_HD")
  2. SET(STM32_CHIP_DEF_HD_VL "STM32F10X_HD_VL")
  3. SET(STM32_CHIP_DEF_MD "STM32F10X_MD")
  4. SET(STM32_CHIP_DEF_MD_VL "STM32F10X_MD_VL")
  5. SET(STM32_CHIP_DEF_LD "STM32F10X_LD")
  6. SET(STM32_CHIP_DEF_LD_VL "STM32F10X_LD_VL")
  7. SET(STM32_CHIP_DEF_CL "STM32F10X_CL")
  8. SET(STM32_CHIP_DEF_XL "STM32F10X_XL")
  9. SET(CMSIS_LIB_NAME_HD "cmsis_hd")
  10. SET(CMSIS_LIB_NAME_HD_VL "cmsis_hd_vl")
  11. SET(CMSIS_LIB_NAME_MD "cmsis_md")
  12. SET(CMSIS_LIB_NAME_MD_VL "cmsis_md_vl")
  13. SET(CMSIS_LIB_NAME_LD "cmsis_ld")
  14. SET(CMSIS_LIB_NAME_LD_VL "cmsis_ld_vl")
  15. SET(CMSIS_LIB_NAME_CL "cmsis_cl")
  16. SET(CMSIS_LIB_NAME_XL "cmsis_xl")
  17. SET(CMSIS_STARTUP_SOURCE_HD "startup_stm32f10x_hd.s")
  18. SET(CMSIS_STARTUP_SOURCE_HD_VL "startup_stm32f10x_hd_vl.s")
  19. SET(CMSIS_STARTUP_SOURCE_MD "startup_stm32f10x_md.s")
  20. SET(CMSIS_STARTUP_SOURCE_MD_VL "startup_stm32f10x_md_vl.s")
  21. SET(CMSIS_STARTUP_SOURCE_LD "startup_stm32f10x_ld.s")
  22. SET(CMSIS_STARTUP_SOURCE_LD_VL "startup_stm32f10x_ld_vl.s")
  23. SET(CMSIS_STARTUP_SOURCE_CL "startup_stm32f10x_cl.s")
  24. SET(CMSIS_STARTUP_SOURCE_XL "startup_stm32f10x_xl.s")
  25. IF(NOT STM32_CHIP_TYPE)
  26. MESSAGE(STATUS "No stm32 chip selected. You will have to use chip specific variables, i.e. STM32_CHIP_DEF_HD. You can select stm32 chip using STM32_CHIP_TYPE variable. (HD, HD_VL, MD, MD_VL, LD, LD_VL, XL, CL)")
  27. UNSET(CMSIS_STARTUP_NAME)
  28. UNSET(CMSIS_STARTUP_SOURCE)
  29. UNSET(STM32_CHIP_DEF)
  30. SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_HD} ${CMSIS_LIB_NAME_HD_VL} ${CMSIS_LIB_NAME_MD} ${CMSIS_LIB_NAME_MD_VL} ${CMSIS_LIB_NAME_LD} ${CMSIS_LIB_NAME_LD_VL} ${CMSIS_LIB_NAME_CL} ${CMSIS_LIB_NAME_XL})
  31. ELSE()
  32. IF(STM32_CHIP_TYPE STREQUAL "HD")
  33. SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_HD})
  34. SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_HD})
  35. SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_HD})
  36. ELSEIF(STM32_CHIP_TYPE STREQUAL "HD_VL")
  37. SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_HD_VL})
  38. SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_HD_VL})
  39. SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_HD_VL})
  40. ELSEIF(STM32_CHIP_TYPE STREQUAL "MD")
  41. SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_MD})
  42. SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_MD})
  43. SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_MD})
  44. ELSEIF(STM32_CHIP_TYPE STREQUAL "MD_VL")
  45. SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_MD_VL})
  46. SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_MD_VL})
  47. SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_MD_VL})
  48. ELSEIF(STM32_CHIP_TYPE STREQUAL "LD")
  49. SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_LD})
  50. SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_LD})
  51. SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_LD})
  52. ELSEIF(STM32_CHIP_TYPE STREQUAL "LD_VL")
  53. SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_LD_VL})
  54. SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_LD_VL})
  55. SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_LD_VL})
  56. ELSEIF(STM32_CHIP_TYPE STREQUAL "XL")
  57. SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_XL})
  58. SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_XL})
  59. SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_XL})
  60. ELSEIF(STM32_CHIP_TYPE STREQUAL "CL")
  61. SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_CL})
  62. SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_CL})
  63. SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_CL})
  64. ELSE()
  65. MESSAGE(FATAL_ERROR "Invalid stm32 chip type.")
  66. ENDIF()
  67. ENDIF()
  68. FIND_PATH(CMSIS_INCLUDE_DIR system_stm32f10x.h core_cm3.h stm32f10x.h
  69. PATH_SUFFIXES include stm32
  70. )
  71. FOREACH(CMSIS_LIB_NAME ${CMSIS_FIND_LIBS})
  72. SET(CMSIS_LIBRARY CMSIS_LIBRARY-NOTFOUND)
  73. FIND_LIBRARY(CMSIS_LIBRARY
  74. NAMES ${CMSIS_LIB_NAME}
  75. PATH_SUFFIXES lib
  76. )
  77. SET(CMSIS_LIBRARIES ${CMSIS_LIBRARIES} ${CMSIS_LIBRARY})
  78. ENDFOREACH()
  79. FIND_FILE(CMSIS_LINKER_SCRIPT
  80. stm32_flash.ld.in
  81. PATHS ${CMAKE_FIND_ROOT_PATH}/share/cmsis/
  82. )
  83. INCLUDE(FindPackageHandleStandardArgs)
  84. IF(NOT STM32_CHIP_TYPE)
  85. FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_LIBRARIES CMSIS_INCLUDE_DIR CMSIS_LINKER_SCRIPT STM32_CHIP_DEF_HD STM32_CHIP_DEF_HD_VL STM32_CHIP_DEF_MD STM32_CHIP_DEF_MD_VL STM32_CHIP_DEF_LD STM32_CHIP_DEF_LD_VL STM32_CHIP_DEF_XL STM32_CHIP_DEF_CL)
  86. ELSE()
  87. FIND_FILE(CMSIS_STARTUP_SOURCE
  88. ${CMSIS_STARTUP_NAME}
  89. PATHS ${CMAKE_FIND_ROOT_PATH}/share/cmsis/
  90. )
  91. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D${STM32_CHIP_DEF}")
  92. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${STM32_CHIP_DEF}")
  93. FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_LIBRARIES CMSIS_INCLUDE_DIR CMSIS_STARTUP_SOURCE CMSIS_LINKER_SCRIPT STM32_CHIP_DEF)
  94. ENDIF()
  95. FUNCTION(STM32_SET_PARAMS FLASH_SIZE RAM_SIZE STACK_ADDRESS MIN_STACK_SIZE MIN_HEAP_SIZE EXT_RAM_SIZE FLASH_ORIGIN RAM_ORIGIN EXT_RAM_ORIGIN)
  96. CONFIGURE_FILE(${CMSIS_LINKER_SCRIPT} ${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld)
  97. ENDFUNCTION(STM32_SET_PARAMS)
  98. FUNCTION(STM32_SET_PARAMS FLASH_SIZE RAM_SIZE STACK_ADDRESS)
  99. SET(STACK_ADDRESS ${STACK_ADDRESS})
  100. SET(FLASH_SIZE ${FLASH_SIZE})
  101. SET(RAM_SIZE ${RAM_SIZE})
  102. SET(MIN_STACK_SIZE "0x200")
  103. SET(MIN_HEAP_SIZE "0")
  104. SET(EXT_RAM_SIZE "0K")
  105. SET(FLASH_ORIGIN "0x08000000")
  106. SET(RAM_ORIGIN "0x20000000")
  107. SET(EXT_RAM_ORIGIN "0x60000000")
  108. CONFIGURE_FILE(${CMSIS_LINKER_SCRIPT} ${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld)
  109. ENDFUNCTION(STM32_SET_PARAMS)