cmsis.cmake 1.9 KB

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