FindSTM32STD.cmake 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. IF(STM32_FAMILY STREQUAL "F4")
  2. SET(STD_COMPONENTS adc can cec crc cryp dac dbgmcu dcmi dfsdm dma2d dma dsi
  3. exti flash flash_ramfunc fmc fmpi2c fsmc gpio hash i2c iwdg lptim ltdc pwr qspi rcc
  4. rng rtc sai sdio spdifrx spi syscfg tim usart wwdg)
  5. SET(STD_REQUIRED_COMPONENTS dma dma2d fmc i2c ltdc gpio rcc spi usart adc tim exti syscfg)
  6. SET(STD_EX_COMPONENTS cryp hash)
  7. SET(STD_PREFIX stm32f4xx_)
  8. ENDIF()
  9. SET(STD_HEADERS
  10. misc.h
  11. stm32f4xx.h
  12. core_cm4.h
  13. )
  14. SET(STD_SRCS
  15. misc.c
  16. )
  17. IF(NOT STM32STDPERIPH_FIND_COMPONENTS)
  18. SET(STM32STDPERIPH_FIND_COMPONENTS ${STD_COMPONENTS})
  19. MESSAGE(STATUS "No STM32STD components selected, using all: ${STM32STD_FIND_COMPONENTS}")
  20. ENDIF()
  21. FOREACH(cmp ${STD_REQUIRED_COMPONENTS})
  22. LIST(FIND STM32STDPERIPH_FIND_COMPONENTS ${cmp} STM32STD_FOUND_INDEX)
  23. IF(${STM32STD_FOUND_INDEX} LESS 0)
  24. LIST(APPEND STM32STDPERIPH_FIND_COMPONENTS ${cmp})
  25. ENDIF()
  26. ENDFOREACH()
  27. FOREACH(cmp ${STM32STD_FIND_COMPONENTS})
  28. LIST(FIND STD_COMPONENTS ${cmp} STM32STD_FOUND_INDEX)
  29. IF($STM32STD_FOUND_INDEX LESS 0)
  30. MESSAGE(FATAL_ERROR "Unknown STM32STD Peripheral component: ${cmp}. Available components: ${STD_COMPONENTS}")
  31. ELSE()
  32. LIST(APPEND STD_HEADERS ${STD_PREFIX}${cmp}.h)
  33. LIST(APPEND STD_SRCS ${STD_PREFIX}${cmp}.c)
  34. ENDIF()
  35. LIST(FIND STD_EX_COMPONENTS ${cmp} STM32STD_FOUND_INDEX)
  36. if(NOT (${STM32STD_FOUND_INDEX} LESS 0))
  37. STRING(COMPARE EQUAL ${cmp} "cryp" STM32_EQUAL)
  38. if(${STM32_EQUAL})
  39. LIST(APPEND STD_SRCS ${STD_PREFIX}${cmp}_aes.c)
  40. LIST(APPEND STD_SRCS ${STD_PREFIX}${cmp}_des.c)
  41. LIST(APPEND STD_SRCS ${STD_PREFIX}${cmp}_tdes.c)
  42. ENDIF()
  43. STRING(COMPARE EQUAL ${cmp} "hash" STM32_EQUAL)
  44. if(${STM32_EQUAL})
  45. LIST(APPEND STD_SRCS ${STD_PREFIX}${cmp}_md5.c)
  46. LIST(APPEND STD_SRCS ${STD_PREFIX}${cmp}_sha1.c)
  47. ENDIF()
  48. ENDIF()
  49. ENDFOREACH()
  50. LIST(REMOVE_DUPLICATES STD_HEADERS)
  51. LIST(REMOVE_DUPLICATES STD_SRCS)
  52. FOREACH(HEADER ${STD_HEADERS})
  53. FIND_PATH(STM32STD_${HEADER}_INCLUDE_DIR
  54. NAMES ${HEADER}
  55. PATHS
  56. ${STM32STD_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Include
  57. ${STM32STD_DIR}/Libraries/CMSIS/Include
  58. ${STM32STD_DIR}/Libraries/STM32F4xx_StdPeriph_Driver/inc
  59. CMAKE_FIND_ROOT_PATH_BOTH
  60. )
  61. LIST(APPEND STM32STD_INCLUDE_DIR ${STM32STD_${HEADER}_INCLUDE_DIR})
  62. ENDFOREACH()
  63. SET(SRC_HINTS_DIR ${STM32STD_DIR}/Libraries/STM32${STM32_FAMILY}xx_StdPeriph_Driver/src)
  64. FOREACH(STD_SRC ${STD_SRCS})
  65. STRING(MAKE_C_IDENTIFIER "${STD_SRC}" STD_SRC_CLEAN)
  66. SET(STD_${STD_SRC_CLEAN}_FILE STD_SRC_FILE-NOTFOUND)
  67. FIND_FILE(STD_${STD_SRC_CLEAN}_FILE ${STD_SRC}
  68. PATH_SUFFIXES src
  69. HINTS ${SRC_HINTS_DIR}
  70. CMAKE_FIND_ROOT_PATH_BOTH
  71. )
  72. LIST(APPEND STM32STD_SOURCES ${STD_${STD_SRC_CLEAN}_FILE})
  73. ENDFOREACH()
  74. LIST(REMOVE_DUPLICATES STM32STD_INCLUDE_DIR)
  75. INCLUDE(FindPackageHandleStandardArgs)
  76. FIND_PACKAGE_HANDLE_STANDARD_ARGS(STM32STD DEFAULT_MSG STM32STD_INCLUDE_DIR STM32STD_SOURCES)