FindCMSIS.cmake 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
  2. IF(STM32_FAMILY STREQUAL "F1")
  3. SET(CMSIS_STARTUP_PREFIX startup_stm32f10x_)
  4. SET(CMSIS_HEADERS system_stm32f10x.h core_cm3.h stm32f10x.h)
  5. SET(CMSIS_LINKER_SCRIPT_NAME stm32f1_flash.ld.in)
  6. SET(CMSIS_SRCS system_stm32f10x.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_flash.ld.in)
  11. SET(CMSIS_SRCS system_stm32f4xx.c)
  12. ENDIF()
  13. IF((NOT STM32_CHIP_TYPE) AND (NOT STM32_CHIP))
  14. UNSET(CMSIS_STARTUP_NAME)
  15. UNSET(CMSIS_STARTUP_SOURCE)
  16. FOREACH(CHIP_TYPE ${STM32_CHIP_TYPES})
  17. STRING(TOLOWER ${CHIP_TYPE} CHIP_TYPE_LOWER)
  18. LIST(APPEND CMSIS_FIND_LIBS cmsis_${STM32_FAMILY_LOWER}_${CHIP_TYPE_LOWER})
  19. ENDFOREACH()
  20. ELSE()
  21. IF(NOT STM32_CHIP_TYPE)
  22. STM32_GET_CHIP_TYPE(${STM32_CHIP} STM32_CHIP_TYPE)
  23. IF(NOT STM32_CHIP_TYPE)
  24. MESSAGE(FATAL_ERROR "Unknown chip: ${STM32_CHIP}. Try to use STM32_CHIP_TYPE directly.")
  25. ENDIF()
  26. MESSAGE(STATUS "${STM32_CHIP} is ${STM32_CHIP_TYPE} device")
  27. ENDIF()
  28. STRING(TOLOWER ${STM32_CHIP_TYPE} STM32_CHIP_TYPE_LOWER)
  29. SET(CMSIS_FIND_LIBS cmsis_${STM32_FAMILY_LOWER}_${STM32_CHIP_TYPE_LOWER})
  30. SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_PREFIX}${STM32_CHIP_TYPE_LOWER}.s)
  31. ENDIF()
  32. FIND_PATH(CMSIS_INCLUDE_DIR ${CMSIS_HEADERS}
  33. PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER}
  34. )
  35. FOREACH(CMSIS_LIB_NAME ${CMSIS_FIND_LIBS})
  36. SET(CMSIS_LIBRARY CMSIS_LIBRARY-NOTFOUND)
  37. FIND_LIBRARY(CMSIS_LIBRARY
  38. NAMES ${CMSIS_LIB_NAME}
  39. PATH_SUFFIXES lib
  40. )
  41. LIST(APPEND CMSIS_LIBRARIES ${CMSIS_LIBRARY})
  42. ENDFOREACH()
  43. FIND_FILE(CMSIS_LINKER_SCRIPT ${CMSIS_LINKER_SCRIPT_NAME}
  44. PATHS ${CMAKE_FIND_ROOT_PATH}
  45. PATH_SUFFIXES share/cmsis cmsis
  46. )
  47. FOREACH(CMSIS_SRC ${CMSIS_SRCS})
  48. FIND_FILE(CMSIS_SRC_FILE NAMES ${CMSIS_SRC} PATHS ${CMAKE_FIND_ROOT_PATH} PATH_SUFFIXES share/cmsis cmsis)
  49. LIST(APPEND CMSIS_SOURCES ${CMSIS_SRC_FILE})
  50. ENDFOREACH()
  51. INCLUDE(FindPackageHandleStandardArgs)
  52. IF(NOT STM32_CHIP_TYPE)
  53. FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_LIBRARIES CMSIS_INCLUDE_DIR CMSIS_LINKER_SCRIPT CMSIS_SOURCES)
  54. ELSE()
  55. FIND_FILE(CMSIS_STARTUP_SOURCE
  56. ${CMSIS_STARTUP_NAME}
  57. PATHS ${CMAKE_FIND_ROOT_PATH}/share/cmsis/
  58. )
  59. FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_LIBRARIES CMSIS_INCLUDE_DIR CMSIS_STARTUP_SOURCE CMSIS_LINKER_SCRIPT CMSIS_SOURCES)
  60. ENDIF()