FindCMSIS.cmake 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. IF(STM32_CHIP_TYPE OR STM32_CHIP)
  2. IF(NOT STM32_CHIP_TYPE)
  3. STM32_GET_CHIP_TYPE(${STM32_CHIP} STM32_CHIP_TYPE)
  4. IF(NOT STM32_CHIP_TYPE)
  5. MESSAGE(FATAL_ERROR "Unknown chip: ${STM32_CHIP}. Try to use STM32_CHIP_TYPE directly.")
  6. ENDIF()
  7. MESSAGE(STATUS "${STM32_CHIP} is ${STM32_CHIP_TYPE} device")
  8. ENDIF()
  9. STRING(TOLOWER ${STM32_CHIP_TYPE} STM32_CHIP_TYPE_LOWER)
  10. ENDIF()
  11. SET(CMSIS_COMMON_HEADERS
  12. arm_common_tables.h
  13. arm_const_structs.h
  14. arm_math.h
  15. core_cmFunc.h
  16. core_cmInstr.h
  17. core_cmSimd.h
  18. )
  19. IF(STM32_FAMILY STREQUAL "F1")
  20. IF(NOT STM32Cube_DIR)
  21. SET(STM32Cube_DIR "/opt/STM32Cube_FW_F1_V1.2.0")
  22. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  23. ENDIF()
  24. LIST(APPEND CMSIS_COMMON_HEADERS core_cm3.h)
  25. SET(CMSIS_DEVICE_HEADERS stm32f1xx.h system_stm32f1xx.h)
  26. SET(CMSIS_DEVICE_SOURCES system_stm32f1xx.c)
  27. ELSEIF(STM32_FAMILY STREQUAL "F2")
  28. IF(NOT STM32Cube_DIR)
  29. SET(STM32Cube_DIR "/opt/STM32Cube_FW_F2_V1.1.1")
  30. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  31. ENDIF()
  32. STRING(REGEX REPLACE "^(2[01]7).[BCDEFG]" "\\1" STM32_DEVICE_NUM ${STM32_CHIP_TYPE})
  33. SET(CMSIS_STARTUP_SOURCE startup_stm32f${STM32_DEVICE_NUM}xx.s)
  34. LIST(APPEND CMSIS_COMMON_HEADERS core_cm4.h)
  35. SET(CMSIS_DEVICE_HEADERS stm32f2xx.h system_stm32f2xx.h)
  36. SET(CMSIS_DEVICE_SOURCES system_stm32f2xx.c)
  37. ELSEIF(STM32_FAMILY STREQUAL "F3")
  38. IF(NOT STM32Cube_DIR)
  39. SET(STM32Cube_DIR "/opt/STM32Cube_FW_F3_V1.6.0")
  40. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  41. ENDIF()
  42. STRING(REGEX REPLACE "^(3..).(.)" "\\1x\\2" STM32_STARTUP_NAME ${STM32_CODE})
  43. STRING(TOLOWER ${STM32_STARTUP_NAME} STM32_STARTUP_NAME_LOWER)
  44. SET(CMSIS_STARTUP_SOURCE startup_stm32f${STM32_STARTUP_NAME_LOWER}.s)
  45. LIST(APPEND CMSIS_COMMON_HEADERS core_cm4.h)
  46. SET(CMSIS_DEVICE_HEADERS stm32f3xx.h system_stm32f3xx.h)
  47. SET(CMSIS_DEVICE_SOURCES system_stm32f3xx.c)
  48. ELSEIF(STM32_FAMILY STREQUAL "F4")
  49. IF(NOT STM32Cube_DIR)
  50. SET(STM32Cube_DIR "/opt/STM32Cube_FW_F4_V1.8.0")
  51. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  52. ENDIF()
  53. LIST(APPEND CMSIS_COMMON_HEADERS core_cm4.h)
  54. SET(CMSIS_DEVICE_HEADERS stm32f4xx.h system_stm32f4xx.h)
  55. SET(CMSIS_DEVICE_SOURCES system_stm32f4xx.c)
  56. ELSEIF(STM32_FAMILY STREQUAL "F7")
  57. IF(NOT STM32Cube_DIR)
  58. SET(STM32Cube_DIR "/opt/STM32Cube_FW_F7_V1.3.0")
  59. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  60. ENDIF()
  61. LIST(APPEND CMSIS_COMMON_HEADERS core_cm7.h)
  62. SET(CMSIS_DEVICE_HEADERS stm32f7xx.h system_stm32f7xx.h)
  63. SET(CMSIS_DEVICE_SOURCES system_stm32f7xx.c)
  64. ELSEIF(STM32_FAMILY STREQUAL "F0")
  65. IF(NOT STM32Cube_DIR)
  66. SET(STM32Cube_DIR "/opt/STM32Cube_FW_F0_V1.4.0")
  67. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  68. ENDIF()
  69. LIST(APPEND CMSIS_COMMON_HEADERS core_cm3.h)
  70. SET(CMSIS_DEVICE_HEADERS stm32f0xx.h system_stm32f0xx.h)
  71. SET(CMSIS_DEVICE_SOURCES system_stm32f0xx.c)
  72. ELSEIF(STM32_FAMILY STREQUAL "G0")
  73. IF(NOT STM32Cube_DIR)
  74. SET(STM32Cube_DIR "/opt/STM32Cube_FW_G0_V1.1.0")
  75. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  76. ENDIF()
  77. LIST(APPEND CMSIS_COMMON_HEADERS core_cm0plus.h)
  78. SET(CMSIS_DEVICE_HEADERS stm32g0xx.h system_stm32g0xx.h)
  79. SET(CMSIS_DEVICE_SOURCES system_stm32g0xx.c)
  80. STRING(REGEX REPLACE "^(0[3478][01]).[BCDEFG468]" "\\1" STM32_DEVICE_NUM ${STM32_CHIP_TYPE})
  81. SET(CMSIS_STARTUP_SOURCE startup_stm32g${STM32_DEVICE_NUM}xx.s)
  82. ELSEIF(STM32_FAMILY STREQUAL "H7")
  83. IF(NOT STM32Cube_DIR)
  84. SET(STM32Cube_DIR "/opt/STM32Cube_FW_H7_V1.3.0")
  85. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  86. ENDIF()
  87. LIST(APPEND CMSIS_COMMON_HEADERS core_cm7.h)
  88. SET(CMSIS_DEVICE_HEADERS stm32h7xx.h system_stm32h7xx.h)
  89. SET(CMSIS_DEVICE_SOURCES system_stm32h7xx.c)
  90. IF(NOT CMSIS_STARTUP_SOURCE)
  91. SET(CMSIS_STARTUP_SOURCE startup_stm32h${STM32_CHIP_TYPE_LOWER}.s)
  92. ENDIF()
  93. message(STATUS "CMSIS_STARTUP_SOURCE @@@@@@ ${CMSIS_STARTUP_SOURCE}")
  94. ELSEIF(STM32_FAMILY STREQUAL "L0")
  95. IF(NOT STM32Cube_DIR)
  96. SET(STM32Cube_DIR "/opt/STM32Cube_FW_L0_V1.7.0")
  97. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  98. ENDIF()
  99. LIST(APPEND CMSIS_COMMON_HEADERS core_cm0.h)
  100. SET(CMSIS_DEVICE_HEADERS stm32l0xx.h system_stm32l0xx.h)
  101. SET(CMSIS_DEVICE_SOURCES system_stm32l0xx.c)
  102. IF(NOT CMSIS_STARTUP_SOURCE)
  103. SET(CMSIS_STARTUP_SOURCE startup_stm32l${STM32_CHIP_TYPE_LOWER}.s)
  104. ENDIF()
  105. ELSEIF(STM32_FAMILY STREQUAL "L1")
  106. IF(NOT STM32Cube_DIR)
  107. SET(STM32Cube_DIR "/opt/STM32Cube_FW_L1_V1.8.0")
  108. MESSAGE(WARNING "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  109. ENDIF()
  110. LIST(APPEND CMSIS_COMMON_HEADERS core_cm3.h)
  111. SET(CMSIS_DEVICE_HEADERS stm32l1xx.h system_stm32l1xx.h)
  112. SET(CMSIS_DEVICE_SOURCES system_stm32l1xx.c)
  113. IF(NOT CMSIS_STARTUP_SOURCE)
  114. SET(CMSIS_STARTUP_SOURCE startup_stm32l${STM32_CHIP_TYPE_LOWER}.s)
  115. ENDIF()
  116. ELSEIF(STM32_FAMILY STREQUAL "L4")
  117. IF(NOT STM32Cube_DIR)
  118. SET(STM32Cube_DIR "/opt/STM32Cube_FW_L4_V1.9.0")
  119. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  120. ENDIF()
  121. LIST(APPEND CMSIS_COMMON_HEADERS core_cm4.h)
  122. SET(CMSIS_DEVICE_HEADERS stm32l4xx.h system_stm32l4xx.h)
  123. SET(CMSIS_DEVICE_SOURCES system_stm32l4xx.c)
  124. IF(NOT CMSIS_STARTUP_SOURCE)
  125. SET(CMSIS_STARTUP_SOURCE startup_stm32l${STM32_CHIP_TYPE_LOWER}.s)
  126. ENDIF()
  127. ENDIF()
  128. IF(NOT CMSIS_STARTUP_SOURCE)
  129. SET(CMSIS_STARTUP_SOURCE startup_stm32f${STM32_CHIP_TYPE_LOWER}.s)
  130. ENDIF()
  131. FIND_PATH(CMSIS_COMMON_INCLUDE_DIR ${CMSIS_COMMON_HEADERS}
  132. PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER} cmsis
  133. HINTS ${STM32Cube_DIR}/Drivers/CMSIS/Include/
  134. CMAKE_FIND_ROOT_PATH_BOTH
  135. )
  136. FIND_PATH(CMSIS_DEVICE_INCLUDE_DIR ${CMSIS_DEVICE_HEADERS}
  137. PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER} cmsis
  138. HINTS ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32${STM32_FAMILY}xx/Include
  139. CMAKE_FIND_ROOT_PATH_BOTH
  140. )
  141. SET(CMSIS_INCLUDE_DIRS
  142. ${CMSIS_DEVICE_INCLUDE_DIR}
  143. ${CMSIS_COMMON_INCLUDE_DIR}
  144. )
  145. FOREACH(SRC ${CMSIS_DEVICE_SOURCES})
  146. STRING(MAKE_C_IDENTIFIER "${SRC}" SRC_CLEAN)
  147. SET(CMSIS_${SRC_CLEAN}_FILE SRC_FILE-NOTFOUND)
  148. FIND_FILE(CMSIS_${SRC_CLEAN}_FILE ${SRC}
  149. PATH_SUFFIXES src stm32${STM32_FAMILY_LOWER} cmsis
  150. HINTS ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32${STM32_FAMILY}xx/Source/Templates/
  151. CMAKE_FIND_ROOT_PATH_BOTH
  152. )
  153. LIST(APPEND CMSIS_SOURCES ${CMSIS_${SRC_CLEAN}_FILE})
  154. ENDFOREACH()
  155. IF(STM32_CHIP_TYPE)
  156. SET(CMSIS_STARTUP_SOURCE_FILE SRC_FILE-NOTFOUND)
  157. FIND_FILE(CMSIS_STARTUP_SOURCE_FILE ${CMSIS_STARTUP_SOURCE}
  158. PATH_SUFFIXES src stm32${STM32_FAMILY_LOWER} cmsis
  159. HINTS ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32${STM32_FAMILY}xx/Source/Templates/gcc/
  160. CMAKE_FIND_ROOT_PATH_BOTH
  161. )
  162. LIST(APPEND CMSIS_SOURCES ${CMSIS_STARTUP_SOURCE_FILE})
  163. ENDIF()
  164. IF(CMSIS_FIND_COMPONENTS STREQUAL NN)
  165. FIND_PACKAGE(CMSISNN)
  166. LIST(APPEND CMSIS_SOURCES ${CMSISNN_SOURCES})
  167. LIST(APPEND CMSIS_INCLUDE_DIRS ${CMSISNN_INCLUDE_DIRS})
  168. ENDIF()
  169. INCLUDE(FindPackageHandleStandardArgs)
  170. FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_INCLUDE_DIRS CMSIS_SOURCES)