cmsis.cmake 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. include(FindPackageHandleStandardArgs)
  2. function(stm32_add_cmsis TARGET)
  3. stm32_get_chip(${TARGET} FAMILY DEVICE)
  4. stm32_get_type(${FAMILY} ${DEVICE} TYPE)
  5. string(TOLOWER ${FAMILY} FAMILY_L)
  6. string(TOLOWER ${DEVICE} DEVICE_L)
  7. string(TOLOWER ${TYPE} TYPE_L)
  8. if(NOT STM32_CUBE_${FAMILY}_PATH)
  9. set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube_FW_${FAMILY} CACHE PATH "Path to STM32Cube_FW_${FAMILY}")
  10. message(STATUS "No STM32_CUBE_${FAMILY}_PATH specified using default: ${STM32_CUBE_${FAMILY}_PATH}")
  11. endif()
  12. set(CMSIS_PATH "${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS")
  13. find_path(STM32_CMSIS_${FAMILY}_COMMON_INCLUDE
  14. NAMES cmsis_version.h
  15. PATHS "${CMSIS_PATH}/Include"
  16. NO_DEFAULT_PATH
  17. )
  18. find_path(STM32_CMSIS_${FAMILY}_INCLUDE
  19. NAMES stm32${FAMILY_L}xx.h
  20. PATHS "${CMSIS_PATH}/Device/ST/STM32${FAMILY}xx/Include"
  21. NO_DEFAULT_PATH
  22. )
  23. find_file(STM32_CMSIS_${FAMILY}_SOURCE
  24. NAMES system_stm32${FAMILY_L}xx.c
  25. PATHS "${CMSIS_PATH}/Device/ST/STM32${FAMILY}xx/Source/Templates"
  26. NO_DEFAULT_PATH
  27. )
  28. find_file(STM32_CMSIS_${FAMILY}_${TYPE}_STARTUP
  29. NAMES startup_stm32f${TYPE_L}.s
  30. PATHS "${CMSIS_PATH}/Device/ST/STM32${FAMILY}xx/Source/Templates/gcc"
  31. NO_DEFAULT_PATH
  32. )
  33. if((NOT STM32_CMSIS_${FAMILY}_COMMON_INCLUDE) OR
  34. (NOT STM32_CMSIS_${FAMILY}_INCLUDE) OR
  35. (NOT STM32_CMSIS_${FAMILY}_SOURCE) OR
  36. (NOT STM32_CMSIS_${FAMILY}_${TYPE}_STARTUP))
  37. message(FATAL_ERROR "Cannot find CMSIS. Make sure STM32_CUBE_${FAMILY}_PATH contains path to STM32Cube_FW_${FAMILY}.")
  38. endif()
  39. target_include_directories(${TARGET} PRIVATE
  40. ${STM32_CMSIS_${FAMILY}_COMMON_INCLUDE}
  41. ${STM32_CMSIS_${FAMILY}_INCLUDE}
  42. )
  43. target_sources(${TARGET} PRIVATE
  44. ${STM32_CMSIS_${FAMILY}_${TYPE}_STARTUP}
  45. ${STM32_CMSIS_${FAMILY}_SOURCE}
  46. )
  47. endfunction()