FindCMSISNN.cmake 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. INCLUDE(FetchContent)
  2. SET(FETCHCONTENT_UPDATES_DISCONNECTED ON)
  3. FetchContent_Declare(
  4. arm_cmsis
  5. GIT_REPOSITORY https://github.com/ARM-software/CMSIS_5.git
  6. )
  7. FetchContent_GetProperties(arm_cmsis)
  8. IF(NOT arm_cmsis_POPULATED)
  9. MESSAGE(STATUS "Getting most recent ARM CMSIS sources")
  10. FetchContent_Populate(arm_cmsis)
  11. EXECUTE_PROCESS(COMMAND git -C ${arm_cmsis_SOURCE_DIR} checkout develop)
  12. ENDIF()
  13. # FIND_PACKAGE(Fixedpoint)
  14. SET(ARM_CMSIS_DIR ${arm_cmsis_SOURCE_DIR}/CMSIS)
  15. SET(CMSIS_NN_HEADERS
  16. arm_nnfunctions.h
  17. arm_nnsupportfunctions.h
  18. arm_nn_tables.h
  19. )
  20. FILE(GLOB CMSIS_NN_SOURCES ${ARM_CMSIS_DIR}/NN/Source/*/*.c)
  21. FIND_PATH(CMSIS_NN_INC_DIR ${CMSIS_NN_HEADERS}
  22. PATHS ${ARM_CMSIS_DIR}/NN/Include
  23. CMAKE_FIND_ROOT_PATH_BOTH
  24. )
  25. SET(CMSIS_DSP_HEADERS
  26. arm_common_tables.h
  27. arm_const_structs.h
  28. arm_helium_utils.h
  29. arm_math.h
  30. arm_mve_tables.h
  31. arm_vec_math.h
  32. )
  33. SET(CMSIS_DSP_PRIVATE_HEADERS
  34. arm_sorting.h
  35. arm_vec_fft.h
  36. arm_vec_filtering.h
  37. )
  38. SET(CMSIS_DSP_SRCS
  39. BasicMathFunctions.c
  40. arm_gaussian_naive_bayes_predict_f32.c
  41. CommonTables.c
  42. ComplexMathFunctions.c
  43. ControllerFunctions.c
  44. arm_boolean_distance.c
  45. arm_boolean_distance_template.h
  46. arm_braycurtis_distance_f32.c
  47. arm_canberra_distance_f32.c
  48. arm_chebyshev_distance_f32.c
  49. arm_cityblock_distance_f32.c
  50. arm_correlation_distance_f32.c
  51. arm_cosine_distance_f32.c
  52. arm_dice_distance.c
  53. arm_euclidean_distance_f32.c
  54. arm_hamming_distance.c
  55. arm_jaccard_distance.c
  56. arm_jensenshannon_distance_f32.c
  57. arm_kulsinski_distance.c
  58. arm_minkowski_distance_f32.c
  59. arm_rogerstanimoto_distance.c
  60. arm_russellrao_distance.c
  61. arm_sokalmichener_distance.c
  62. arm_sokalsneath_distance.c
  63. arm_yule_distance.c
  64. FastMathFunctions.c
  65. FilteringFunctions.c
  66. MatrixFunctions.c
  67. StatisticsFunctions.c
  68. SupportFunctions.c
  69. arm_svm_linear_init_f32.c
  70. arm_svm_linear_predict_f32.c
  71. arm_svm_polynomial_init_f32.c
  72. arm_svm_polynomial_predict_f32.c
  73. arm_svm_rbf_init_f32.c
  74. arm_svm_rbf_predict_f32.c
  75. arm_svm_sigmoid_init_f32.c
  76. arm_svm_sigmoid_predict_f32.c
  77. TransformFunctions.c
  78. )
  79. FOREACH(SRC ${CMSIS_DSP_SRCS})
  80. STRING(MAKE_C_IDENTIFIER "${SRC}" SRC_CLEAN)
  81. SET(CMSIS_DSP_${SRC_CLEAN}_FILE ${SRC_CLEAN}-NOTFOUND)
  82. FIND_FILE(CMSIS_DSP_${SRC_CLEAN}_FILE ${SRC}
  83. PATH_SUFFIXES
  84. BasicMathFunctions
  85. BayesFunctions
  86. CommonTables
  87. ComplexMathFunctions
  88. ControllerFunctions
  89. DistanceFunctions
  90. FastMathFunctions
  91. FilteringFunctions
  92. MatrixFunctions
  93. StatisticsFunctions
  94. SupportFunctions
  95. SVMFunctions
  96. TransformFunctions
  97. PATHS ${ARM_CMSIS_DIR}/DSP/Source
  98. CMAKE_FIND_ROOT_PATH_BOTH
  99. )
  100. LIST(APPEND CMSIS_DSP_SOURCES ${CMSIS_DSP_${SRC_CLEAN}_FILE})
  101. ENDFOREACH()
  102. FIND_PATH(CMSIS_DSP_PRIVATE_INC_DIR ${CMSIS_DSP_PRIVATE_HEADERS}
  103. PATHS ${ARM_CMSIS_DIR}/DSP/PrivateInclude
  104. CMAKE_FIND_ROOT_PATH_BOTH
  105. )
  106. FIND_PATH(CMSIS_DSP_INC_DIR ${CMSIS_DSP_HEADERS}
  107. PATHS ${ARM_CMSIS_DIR}/DSP/Include
  108. CMAKE_FIND_ROOT_PATH_BOTH
  109. )
  110. SET(CMSIS_DSP_INC_DIRS
  111. ${CMSIS_DSP_PRIVATE_INC_DIR}
  112. ${CMSIS_DSP_INC_DIR}
  113. )
  114. SET(CMSISNN_INCLUDE_DIRS
  115. ${CMSIS_DSP_INC_DIRS}
  116. ${CMSIS_NN_INC_DIR}
  117. )
  118. SET(CMSISNN_SOURCES
  119. ${CMSIS_DSP_SOURCES}
  120. ${CMSIS_NN_SOURCES}
  121. )
  122. IF(STM32_FAMILY STREQUAL "F0")
  123. ADD_DEFINITIONS(-DARM_MATH_CM0)
  124. ELSEIF(STM32_FAMILY STREQUAL "F3")
  125. ADD_DEFINITIONS(-DARM_MATH_CM3)
  126. ELSEIF(STM32_FAMILY STREQUAL "F4")
  127. #TODO find better solution to this
  128. ADD_DEFINITIONS(-D__FPU_PRESENT=1)
  129. ADD_DEFINITIONS(-DARM_MATH_CM4)
  130. ELSEIF(STM32_FAMILY STREQUAL "F7")
  131. ADD_DEFINITIONS(-DARM_MATH_CM7)
  132. ELSEIF(STM32_FAMILY STREQUAL "L0")
  133. ADD_DEFINITIONS(-DARM_MATH_CM0PLUS)
  134. ELSE()
  135. MESSAGE(STATUS "ARM_MATH define not found, see arm_math.h")
  136. ENDIF()
  137. INCLUDE(FindPackageHandleStandardArgs)
  138. FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSISNN DEFAULT_MSG CMSISNN_INCLUDE_DIRS CMSISNN_SOURCES)