FindBSP.cmake 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. set(BSP_F0_BOARDS
  2. STM32F0xx_Nucleo_32 STM32F0xx-Nucleo STM32F072B-Discovery
  3. STM32F0308-Discovery STM32072B_EVAL STM32091C_EVAL
  4. )
  5. set(BSP_F0_COMPONENTS
  6. hx8347d l3gd20 spfd5408 st7735 stlm75
  7. )
  8. set(BSP_F0_SOURCES_STM32F0xx_Nucleo_32 stm32f0xx_nucleo_32.c)
  9. set(BSP_F0_SOURCES_STM32F0xx_Nucleo stm32f0xx_nucleo.c)
  10. set(BSP_F0_SOURCES_STM32F072B_Discovery stm32f072b_discovery_eeprom.c stm32f072b_discovery_gyroscope.c stm32f072b_discovery.c)
  11. set(BSP_F0_SOURCES_STM32F0308_Discovery stm32f0308_discovery.c)
  12. set(BSP_F0_SOURCES_STM32072B_EVAL stm32072b_eval_eeprom.c stm32072b_eval_lcd.c stm32072b_eval_sd.c stm32072b_eval_tsensor.c stm32072b_eval.c)
  13. set(BSP_F0_SOURCES_STM32091C_EVAL stm32091c_eval_eeprom.c stm32091c_eval_lcd.c stm32091c_eval_sd.c stm32091c_eval_tsensor.c stm32091c_eval.c)
  14. if(NOT BSP_FIND_COMPONENTS)
  15. set(BSP_FIND_COMPONENTS
  16. STM32F0 STM32F1 STM32F2 STM32F3 STM32F4 STM32F7
  17. STM32G0 STM32G4
  18. STM32H7
  19. STM32L0 STM32L1 STM32L4
  20. )
  21. endif()
  22. foreach(COMP ${BSP_FIND_COMPONENTS})
  23. string(TOLOWER ${COMP} COMP_L)
  24. string(TOUPPER ${COMP} COMP_U)
  25. string(REGEX MATCH "^STM32([FGHL][0-9]).*$" COMP_U ${COMP_U})
  26. if(NOT CMAKE_MATCH_1)
  27. message(FATAL_ERROR "Unknown HAL component: ${COMP}")
  28. endif()
  29. set(FAMILY ${CMAKE_MATCH_1})
  30. string(TOLOWER ${FAMILY} FAMILY_L)
  31. if(NOT STM32_CUBE_${FAMILY}_PATH)
  32. set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube${FAMILY} CACHE PATH "Path to STM32Cube${FAMILY}")
  33. message(STATUS "No STM32_CUBE_${FAMILY}_PATH specified using default: ${STM32_CUBE_${FAMILY}_PATH}")
  34. endif()
  35. find_path(BSP_${FAMILY}_PATH
  36. NAMES Components/Common/io.h
  37. PATHS "${STM32_CUBE_${FAMILY}_PATH}/Drivers/BSP"
  38. NO_DEFAULT_PATH
  39. )
  40. if (NOT BSP_${FAMILY}_PATH)
  41. continue()
  42. endif()
  43. set(BSP_${FAMILY}_INCLUDE "${BSP_${FAMILY}_PATH}/Components/Common")
  44. add_library(BSP::STM32::${FAMILY} INTERFACE IMPORTED)
  45. target_link_libraries(BSP::STM32::${FAMILY} INTERFACE STM32::${FAMILY})
  46. target_include_directories(BSP::STM32::${FAMILY} INTERFACE "${BSP_${FAMILY}_PATH}/Components/Common")
  47. foreach(BOARD ${BSP_${FAMILY}_BOARDS})
  48. string(REPLACE "-" "_" BOARD_CANONICAL ${BOARD})
  49. add_library(BSP::STM32::${BOARD_CANONICAL} INTERFACE IMPORTED)
  50. target_link_libraries(BSP::STM32::${BOARD_CANONICAL} INTERFACE BSP::STM32::${FAMILY} CMSIS::STM32::${FAMILY})
  51. target_include_directories(BSP::STM32::${BOARD_CANONICAL} INTERFACE "${BSP_${FAMILY}_PATH}/${BOARD}")
  52. foreach(SRC ${BSP_${FAMILY}_SOURCES_${BOARD_CANONICAL}})
  53. target_sources(BSP::STM32::${BOARD_CANONICAL} INTERFACE "${BSP_${FAMILY}_PATH}/${BOARD}/${SRC}")
  54. endforeach()
  55. endforeach()
  56. foreach(BCOMP ${BSP_${FAMILY}_COMPONENTS})
  57. string(TOLOWER ${BCOMP} BCOMP_L)
  58. string(TOUPPER ${BCOMP} BCOMP_U)
  59. add_library(BSP::STM32::${FAMILY}::${BCOMP_U} INTERFACE IMPORTED)
  60. target_link_libraries(BSP::STM32::${FAMILY}::${BCOMP_U} INTERFACE BSP::STM32::${FAMILY} CMSIS::STM32::${FAMILY})
  61. target_include_directories(BSP::STM32::${FAMILY}::${BCOMP_U} INTERFACE "${BSP_${FAMILY}_PATH}/Components/${BCOMP}")
  62. target_sources(BSP::STM32::${FAMILY}::${BCOMP_U} INTERFACE "${BSP_${FAMILY}_PATH}/Components/${BCOMP}/${BCOMP}.c")
  63. endforeach()
  64. set(BSP_${COMP}_FOUND TRUE)
  65. if(BSP_${COMP}_FOUND)
  66. list(APPEND BSP_INCLUDE_DIRS "${BSP_${FAMILY}_INCLUDE}")
  67. endif()
  68. endforeach()
  69. include(FindPackageHandleStandardArgs)
  70. find_package_handle_standard_args(BSP
  71. REQUIRED_VARS BSP_INCLUDE_DIRS
  72. FOUND_VAR BSP_FOUND
  73. HANDLE_COMPONENTS
  74. )