FindCMSIS.cmake 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
  2. IF(STM32_FAMILY STREQUAL "F1")
  3. SET(CMSIS_STARTUP_PREFIX startup_stm32f)
  4. SET(CMSIS_HEADERS system_stm32f1xx.h core_cm3.h stm32f1xx.h)
  5. SET(CMSIS_LINKER_SCRIPT_NAME stm32f1.ld.in)
  6. SET(CMSIS_SRCS system_stm32f1xx.c)
  7. ELSEIF(STM32_FAMILY STREQUAL "F4")
  8. SET(CMSIS_STARTUP_PREFIX startup_stm32f)
  9. SET(CMSIS_HEADERS system_stm32f4xx.h core_cm4.h stm32f4xx.h)
  10. SET(CMSIS_LINKER_SCRIPT_NAME stm32f4.ld.in)
  11. SET(CMSIS_SRCS system_stm32f4xx.c)
  12. ENDIF()
  13. IF(STM32_CHIP_TYPE OR STM32_CHIP)
  14. IF(NOT STM32_CHIP_TYPE)
  15. STM32_GET_CHIP_TYPE(${STM32_CHIP} STM32_CHIP_TYPE)
  16. IF(NOT STM32_CHIP_TYPE)
  17. MESSAGE(FATAL_ERROR "Unknown chip: ${STM32_CHIP}. Try to use STM32_CHIP_TYPE directly.")
  18. ENDIF()
  19. MESSAGE(STATUS "${STM32_CHIP} is ${STM32_CHIP_TYPE} device")
  20. ENDIF()
  21. STRING(TOLOWER ${STM32_CHIP_TYPE} STM32_CHIP_TYPE_LOWER)
  22. SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_PREFIX}${STM32_CHIP_TYPE_LOWER}.s)
  23. ENDIF()
  24. FIND_PATH(CMSIS_INCLUDE_DIR ${CMSIS_HEADERS}
  25. PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER}
  26. )
  27. FIND_FILE(CMSIS_LINKER_SCRIPT ${CMSIS_LINKER_SCRIPT_NAME}
  28. PATHS ${CMAKE_FIND_ROOT_PATH}
  29. PATH_SUFFIXES share/cmsis cmsis
  30. )
  31. FOREACH(CMSIS_SRC ${CMSIS_SRCS})
  32. FIND_FILE(CMSIS_SRC_FILE NAMES ${CMSIS_SRC} PATHS ${CMAKE_FIND_ROOT_PATH} PATH_SUFFIXES share/cmsis cmsis)
  33. LIST(APPEND CMSIS_SOURCES ${CMSIS_SRC_FILE})
  34. ENDFOREACH()
  35. IF(STM32_CHIP_TYPE)
  36. FIND_FILE(CMSIS_STARTUP_SOURCE
  37. ${CMSIS_STARTUP_NAME}
  38. PATHS ${CMAKE_FIND_ROOT_PATH}/share/cmsis/
  39. )
  40. LIST(APPEND CMSIS_SOURCES ${CMSIS_STARTUP_SOURCE})
  41. ENDIF()
  42. INCLUDE(FindPackageHandleStandardArgs)
  43. FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_INCLUDE_DIR CMSIS_LINKER_SCRIPT CMSIS_SOURCES)