FindUSBDevice.cmake 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. IF(NOT STM32Cube_DIR)
  2. SET(STM32Cube_DIR "/opt/STM32Cube_FW_F1_V1.2.0")
  3. MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
  4. ENDIF()
  5. IF(NOT USBDevice_FIND_COMPONENTS)
  6. SET(USBDevice_FIND_COMPONENTS ${USBDevice_COMPONENTS})
  7. MESSAGE(STATUS "No USBDevice components selected, using all: ${USBDevice_FIND_COMPONENTS}")
  8. ENDIF()
  9. SET(USBDevice_SRC
  10. Core/Src/usbd_ctlreq.c
  11. Core/Src/usbd_core.c
  12. Core/Src/usbd_ioreq.c
  13. # Core/Src/usbd_conf_template.c
  14. )
  15. SET(USBDevice_INC
  16. Core/Inc/usbd_ctlreq.h
  17. Core/Inc/usbd_ioreq.h
  18. Core/Inc/usbd_core.h
  19. # Core/Inc/usbd_conf_template.h
  20. Core/Inc/usbd_def.h
  21. )
  22. SET(USBDevice_COMPONENTS CDC DFU AUDIO Template MSC HID CustomHID)
  23. SET(USBDevice_COMPONENTS_CDC_HEADERS
  24. Class/CDC/Inc/usbd_cdc.h
  25. # Class/CDC/Inc/usbd_cdc_if_template.h
  26. )
  27. SET(USBDevice_COMPONENTS_CDC_SOURCES
  28. Class/CDC/Src/usbd_cdc.c
  29. # Class/CDC/Src/usbd_cdc_if_template.c
  30. )
  31. SET(USBDevice_COMPONENTS_DFU_HEADERS
  32. # Class/DFU/Inc/usbd_dfu_media_template.h
  33. Class/DFU/Inc/usbd_dfu.h
  34. )
  35. SET(USBDevice_COMPONENTS_DFU_SOURCES
  36. Class/DFU/Src/usbd_dfu.c
  37. # Class/DFU/Src/usbd_dfu_media_template.c
  38. )
  39. SET(USBDevice_COMPONENTS_AUDIO_HEADERS
  40. Class/AUDIO/Inc/usbd_audio.h
  41. # Class/AUDIO/Inc/usbd_audio_if_template.h
  42. )
  43. SET(USBDevice_COMPONENTS_AUDIO_SOURCES
  44. # Class/AUDIO/Src/usbd_audio_if_template.c
  45. Class/AUDIO/Src/usbd_audio.c
  46. )
  47. SET(USBDevice_COMPONENTS_Template_HEADERS
  48. Class/Template/Inc/usbd_template.h
  49. )
  50. SET(USBDevice_COMPONENTS_Template_SOURCES
  51. Class/Template/Src/usbd_template.c
  52. )
  53. SET(USBDevice_COMPONENTS_MSC_HEADERS
  54. Class/MSC/Inc/usbd_msc_scsi.h
  55. # Class/MSC/Inc/usbd_msc_storage_template.h
  56. Class/MSC/Inc/usbd_msc_data.h
  57. Class/MSC/Inc/usbd_msc.h
  58. Class/MSC/Inc/usbd_msc_bot.h
  59. )
  60. SET(USBDevice_COMPONENTS_MSC_SOURCES
  61. Class/MSC/Src/usbd_msc.c
  62. Class/MSC/Src/usbd_msc_data.c
  63. Class/MSC/Src/usbd_msc_bot.c
  64. Class/MSC/Src/usbd_msc_scsi.c
  65. # Class/MSC/Src/usbd_msc_storage_template.c
  66. )
  67. IF(NOT USBDevice_HID_CONFIG_DIR)
  68. MESSAGE(STATUS "No user defined HID sources, using library sources")
  69. SET(USBDevice_COMPONENTS_HID_HEADERS
  70. Class/HID/Inc/usbd_hid.h
  71. )
  72. SET(USBDevice_COMPONENTS_HID_SOURCES
  73. Class/HID/Src/usbd_hid.c
  74. )
  75. ELSE()
  76. MESSAGE(STATUS "Using user defined HID sources in ${USBDevice_HID_CONFIG_DIR}")
  77. LIST(APPEND USBDevice_SOURCES ${USBDevice_HID_CONFIG_DIR}/usbd_hid.c)
  78. LIST(APPEND USBDevice_INCLUDE_DIR ${USBDevice_HID_CONFIG_DIR})
  79. LIST(REMOVE_ITEM USBDevice_FIND_COMPONENTS HID)
  80. ENDIF()
  81. SET(USBDevice_COMPONENTS_CustomHID_HEADERS
  82. # Class/CustomHID/Inc/usbd_customhid_if_template.h
  83. Class/CustomHID/Inc/usbd_customhid.h
  84. )
  85. SET(USBDevice_COMPONENTS_CustomHID_SOURCES
  86. Class/CustomHID/Src/usbd_customhid.c
  87. # Class/CustomHID/Src/usbd_customhid_if_template.c
  88. )
  89. FOREACH(cmp ${USBDevice_FIND_COMPONENTS})
  90. LIST(FIND USBDevice_COMPONENTS ${cmp} USBDevice_FOUND_INDEX)
  91. IF(${USBDevice_FOUND_INDEX} LESS 0)
  92. MESSAGE(FATAL_ERROR "Unknown USBDevice component: ${cmp}. Available components: ${USBDevice_COMPONENTS}")
  93. ENDIF()
  94. LIST(FIND USBDevice_COMPONENTS ${cmp} USBDevice_FOUND_INDEX)
  95. IF(NOT (${USBDevice_FOUND_INDEX} LESS 0))
  96. LIST(APPEND USBDevice_INC ${USBDevice_COMPONENTS_${cmp}_HEADERS})
  97. LIST(APPEND USBDevice_SRC ${USBDevice_COMPONENTS_${cmp}_SOURCES})
  98. ENDIF()
  99. ENDFOREACH()
  100. LIST(REMOVE_DUPLICATES USBDevice_INC)
  101. LIST(REMOVE_DUPLICATES USBDevice_SRC)
  102. FOREACH(INC ${USBDevice_INC})
  103. SET(INC_FILE INC_FILE-NOTFOUND)
  104. GET_FILENAME_COMPONENT(INC_FILE ${STM32Cube_DIR}/Middlewares/ST/STM32_USB_Device_Library/${INC} DIRECTORY)
  105. MESSAGE(STATUS "Found ${INC}: ${INC_FILE}")
  106. LIST(APPEND USBDevice_INCLUDE_DIR ${INC_FILE})
  107. ENDFOREACH()
  108. LIST(REMOVE_DUPLICATES USBDevice_INCLUDE_DIR)
  109. FOREACH(SRC ${USBDevice_SRC})
  110. SET(SRC_FILE SRC_FILE-NOTFOUND)
  111. FIND_FILE(SRC_FILE ${SRC}
  112. HINTS ${STM32Cube_DIR}/Middlewares/ST/STM32_USB_Device_Library
  113. CMAKE_FIND_ROOT_PATH_BOTH
  114. )
  115. MESSAGE(STATUS "Found ${SRC}: ${SRC_FILE}")
  116. LIST(APPEND USBDevice_SOURCES ${SRC_FILE})
  117. ENDFOREACH()
  118. INCLUDE(FindPackageHandleStandardArgs)
  119. FIND_PACKAGE_HANDLE_STANDARD_ARGS(USBDevice DEFAULT_MSG USBDevice_INCLUDE_DIR USBDevice_SOURCES)