Просмотр исходного кода

Module to add ARM CMSIS NN from development branch of ARM CMSIS_5, added to CMSIS as component 'NN'

Alex Hoffman 6 лет назад
Родитель
Сommit
79c91bf2b5
2 измененных файлов с 163 добавлено и 0 удалено
  1. 6 0
      cmake/FindCMSIS.cmake
  2. 157 0
      cmake/FindCMSISNN.cmake

+ 6 - 0
cmake/FindCMSIS.cmake

@@ -158,6 +158,12 @@ IF(STM32_CHIP_TYPE)
     LIST(APPEND CMSIS_SOURCES ${CMSIS_STARTUP_SOURCE_FILE})
     LIST(APPEND CMSIS_SOURCES ${CMSIS_STARTUP_SOURCE_FILE})
 ENDIF()
 ENDIF()
 
 
+IF(CMSIS_FIND_COMPONENTS STREQUAL NN)
+    FIND_PACKAGE(CMSISNN)
+    LIST(APPEND CMSIS_SOURCES ${CMSISNN_SOURCES})
+    LIST(APPEND CMSIS_INCLUDE_DIRS ${CMSISNN_INCLUDE_DIRS})
+ENDIF()
+
 INCLUDE(FindPackageHandleStandardArgs)
 INCLUDE(FindPackageHandleStandardArgs)
 
 
 FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_INCLUDE_DIRS CMSIS_SOURCES)
 FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_INCLUDE_DIRS CMSIS_SOURCES)

+ 157 - 0
cmake/FindCMSISNN.cmake

@@ -0,0 +1,157 @@
+INCLUDE(FetchContent)
+
+SET(FETCHCONTENT_UPDATES_DISCONNECTED ON)
+FetchContent_Declare(
+    arm_cmsis
+    GIT_REPOSITORY https://github.com/ARM-software/CMSIS_5.git
+    )
+
+FetchContent_GetProperties(arm_cmsis)
+IF(NOT arm_cmsis_POPULATED)
+    MESSAGE(STATUS "Getting most recent ARM CMSIS sources")
+    FetchContent_Populate(arm_cmsis)
+    EXECUTE_PROCESS(COMMAND git -C ${arm_cmsis_SOURCE_DIR} checkout develop)
+ENDIF()
+
+# FIND_PACKAGE(Fixedpoint)
+
+SET(ARM_CMSIS_DIR ${arm_cmsis_SOURCE_DIR}/CMSIS)
+
+SET(CMSIS_NN_HEADERS
+    arm_nnfunctions.h
+    arm_nnsupportfunctions.h
+    arm_nn_tables.h
+    )
+
+FILE(GLOB CMSIS_NN_SOURCES ${ARM_CMSIS_DIR}/NN/Source/*/*.c)
+
+FIND_PATH(CMSIS_NN_INC_DIR ${CMSIS_NN_HEADERS}
+    PATHS ${ARM_CMSIS_DIR}/NN/Include
+    CMAKE_FIND_ROOT_PATH_BOTH
+    )
+
+SET(CMSIS_DSP_HEADERS
+    arm_common_tables.h
+    arm_const_structs.h
+    arm_helium_utils.h
+    arm_math.h
+    arm_mve_tables.h
+    arm_vec_math.h
+    )
+
+SET(CMSIS_DSP_PRIVATE_HEADERS
+    arm_sorting.h
+    arm_vec_fft.h
+    arm_vec_filtering.h
+    )
+
+SET(CMSIS_DSP_SRCS
+    BasicMathFunctions.c
+    arm_gaussian_naive_bayes_predict_f32.c
+    CommonTables.c
+    ComplexMathFunctions.c
+    ControllerFunctions.c
+    arm_boolean_distance.c
+    arm_boolean_distance_template.h
+    arm_braycurtis_distance_f32.c
+    arm_canberra_distance_f32.c
+    arm_chebyshev_distance_f32.c
+    arm_cityblock_distance_f32.c
+    arm_correlation_distance_f32.c
+    arm_cosine_distance_f32.c
+    arm_dice_distance.c
+    arm_euclidean_distance_f32.c
+    arm_hamming_distance.c
+    arm_jaccard_distance.c
+    arm_jensenshannon_distance_f32.c
+    arm_kulsinski_distance.c
+    arm_minkowski_distance_f32.c
+    arm_rogerstanimoto_distance.c
+    arm_russellrao_distance.c
+    arm_sokalmichener_distance.c
+    arm_sokalsneath_distance.c
+    arm_yule_distance.c
+    FastMathFunctions.c
+    FilteringFunctions.c
+    MatrixFunctions.c
+    StatisticsFunctions.c
+    SupportFunctions.c
+    arm_svm_linear_init_f32.c
+    arm_svm_linear_predict_f32.c
+    arm_svm_polynomial_init_f32.c
+    arm_svm_polynomial_predict_f32.c
+    arm_svm_rbf_init_f32.c
+    arm_svm_rbf_predict_f32.c
+    arm_svm_sigmoid_init_f32.c
+    arm_svm_sigmoid_predict_f32.c
+    TransformFunctions.c
+    )
+
+FOREACH(SRC ${CMSIS_DSP_SRCS})
+    STRING(MAKE_C_IDENTIFIER "${SRC}" SRC_CLEAN)
+    SET(CMSIS_DSP_${SRC_CLEAN}_FILE ${SRC_CLEAN}-NOTFOUND)
+    FIND_FILE(CMSIS_DSP_${SRC_CLEAN}_FILE ${SRC}
+        PATH_SUFFIXES
+        BasicMathFunctions
+        BayesFunctions
+        CommonTables
+        ComplexMathFunctions
+        ControllerFunctions
+        DistanceFunctions
+        FastMathFunctions
+        FilteringFunctions
+        MatrixFunctions
+        StatisticsFunctions
+        SupportFunctions
+        SVMFunctions
+        TransformFunctions
+        PATHS ${ARM_CMSIS_DIR}/DSP/Source
+        CMAKE_FIND_ROOT_PATH_BOTH
+        )
+    LIST(APPEND CMSIS_DSP_SOURCES ${CMSIS_DSP_${SRC_CLEAN}_FILE})
+ENDFOREACH()
+
+FIND_PATH(CMSIS_DSP_PRIVATE_INC_DIR ${CMSIS_DSP_PRIVATE_HEADERS}
+    PATHS ${ARM_CMSIS_DIR}/DSP/PrivateInclude
+    CMAKE_FIND_ROOT_PATH_BOTH
+    )
+
+FIND_PATH(CMSIS_DSP_INC_DIR ${CMSIS_DSP_HEADERS}
+    PATHS ${ARM_CMSIS_DIR}/DSP/Include
+    CMAKE_FIND_ROOT_PATH_BOTH
+    )
+
+SET(CMSIS_DSP_INC_DIRS
+    ${CMSIS_DSP_PRIVATE_INC_DIR}
+    ${CMSIS_DSP_INC_DIR}
+    )
+
+SET(CMSISNN_INCLUDE_DIRS
+    ${CMSIS_DSP_INC_DIRS}
+    ${CMSIS_NN_INC_DIR}
+    )
+
+SET(CMSISNN_SOURCES
+    ${CMSIS_DSP_SOURCES}
+    ${CMSIS_NN_SOURCES}
+    )
+
+IF(STM32_FAMILY STREQUAL "F0")
+    ADD_DEFINITIONS(-DARM_MATH_CM0)
+ELSEIF(STM32_FAMILY STREQUAL "F3")
+    ADD_DEFINITIONS(-DARM_MATH_CM3)
+ELSEIF(STM32_FAMILY STREQUAL "F4")
+    #TODO find better solution to this
+    ADD_DEFINITIONS(-D__FPU_PRESENT=1)
+    ADD_DEFINITIONS(-DARM_MATH_CM4)
+ELSEIF(STM32_FAMILY STREQUAL "F7")
+    ADD_DEFINITIONS(-DARM_MATH_CM7)
+ELSEIF(STM32_FAMILY STREQUAL "L0")
+    ADD_DEFINITIONS(-DARM_MATH_CM0PLUS)
+ELSE()
+    MESSAGE(STATUS "ARM_MATH define not found, see arm_math.h")
+ENDIF()
+
+INCLUDE(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSISNN DEFAULT_MSG CMSISNN_INCLUDE_DIRS CMSISNN_SOURCES)