FindCMSIS.cmake 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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.1.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 "F4")
  28. IF(NOT STM32Cube_DIR)
  29. SET(STM32Cube_DIR "/opt/STM32Cube_FW_F4_V1.6.0")
  30. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  31. ENDIF()
  32. LIST(APPEND CMSIS_COMMON_HEADERS core_cm4.h)
  33. SET(CMSIS_DEVICE_HEADERS stm32f4xx.h system_stm32f4xx.h)
  34. SET(CMSIS_DEVICE_SOURCES system_stm32f4xx.c)
  35. ENDIF()
  36. SET(CMSIS_STARTUP_SOURCE startup_stm32f${STM32_CHIP_TYPE_LOWER}.s)
  37. FIND_PATH(CMSIS_COMMON_INCLUDE_DIR ${CMSIS_COMMON_HEADERS}
  38. PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER} cmsis
  39. HINTS ${STM32Cube_DIR}/Drivers/CMSIS/Include/
  40. CMAKE_FIND_ROOT_PATH_BOTH
  41. )
  42. FIND_PATH(CMSIS_DEVICE_INCLUDE_DIR ${CMSIS_DEVICE_HEADERS}
  43. PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER} cmsis
  44. HINTS ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32${STM32_FAMILY}xx/Include
  45. CMAKE_FIND_ROOT_PATH_BOTH
  46. )
  47. SET(CMSIS_INCLUDE_DIRS
  48. ${CMSIS_DEVICE_INCLUDE_DIR}
  49. ${CMSIS_COMMON_INCLUDE_DIR}
  50. )
  51. FOREACH(SRC ${CMSIS_DEVICE_SOURCES})
  52. SET(SRC_FILE SRC_FILE-NOTFOUND)
  53. FIND_FILE(SRC_FILE ${SRC}
  54. PATH_SUFFIXES src stm32${STM32_FAMILY_LOWER} cmsis
  55. HINTS ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32${STM32_FAMILY}xx/Source/Templates/
  56. CMAKE_FIND_ROOT_PATH_BOTH
  57. )
  58. LIST(APPEND CMSIS_SOURCES ${SRC_FILE})
  59. ENDFOREACH()
  60. IF(STM32_CHIP_TYPE)
  61. SET(SRC_FILE SRC_FILE-NOTFOUND)
  62. FIND_FILE(SRC_FILE ${CMSIS_STARTUP_SOURCE}
  63. PATH_SUFFIXES src stm32${STM32_FAMILY_LOWER} cmsis
  64. HINTS ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32${STM32_FAMILY}xx/Source/Templates/gcc/
  65. CMAKE_FIND_ROOT_PATH_BOTH
  66. )
  67. LIST(APPEND CMSIS_SOURCES ${SRC_FILE})
  68. ENDIF()
  69. INCLUDE(FindPackageHandleStandardArgs)
  70. FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_INCLUDE_DIRS CMSIS_SOURCES)