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

Merge pull request #130 from alxhoff/feature-tflite-micro-module

TensorFlow Lite Micro cmake module
Konstantin Oblaukhov 5 лет назад
Родитель
Сommit
0c4ea4eb8b
1 измененных файлов с 162 добавлено и 0 удалено
  1. 162 0
      cmake/FindTFLite.cmake

+ 162 - 0
cmake/FindTFLite.cmake

@@ -0,0 +1,162 @@
+SET(LIB_NAME tensorflow-microlite)
+
+IF(TF_RECACHE)
+    MESSAGE(STATUS "Rebasing TensorFlow source")
+    UNSET(TF_TAG CACHE)
+    UNSET(TF_COMMIT CACHE)
+ENDIF()
+
+IF(NOT TF_SRC)
+    INCLUDE(FetchContent)
+    IF(TF_TAG)
+        MESSAGE(STATUS "Getting TF tag '${TF_TAG}' and not master")
+        FetchContent_Declare(
+            tf 
+            GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
+            GIT_PROGRESS FALSE
+            GIT_REMOTE_UPDATE_STRATEGY REBASE_CHECKOUT
+            GIT_TAG ${TF_TAG}
+            QUIET
+            )
+    ELSEIF(TF_COMMIT)
+        MESSAGE(STATUS "Getting TF commit '${TF_COMMIT}' and not master")
+        FetchContent_Declare(
+            tf
+            GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
+            GIT_PROGRESS FALSE
+            GIT_REMOTE_UPDATE_STRATEGY REBASE_CHECKOUT
+            GIT_TAG ${TF_COMMIT}
+            QUIET
+            )
+    ELSE()
+        FetchContent_Declare(
+            tf 
+            GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
+            GIT_PROGRESS FALSE
+            GIT_REMOTE_UPDATE_STRATEGY REBASE_CHECKOUT
+            QUIET
+            )
+    ENDIF()
+    FetchContent_GetProperties(tf)
+    IF(NOT tf_POPULATED)
+        MESSAGE(STATUS "TensorFlow sources not given/populated, fetching from GH...")
+        FetchContent_Populate(tf)
+    ENDIF()
+    SET(TF_SRC ${tf_SOURCE_DIR})
+
+    FetchContent_Declare(
+        flatbuffers 
+        GIT_REPOSITORY https://github.com/google/flatbuffers.git 
+        GIT_PROGRESS FALSE 
+        QUIET
+        )
+    FetchContent_GetProperties(flatbuffers)
+    IF(NOT flatbuffers_POPULATED)
+        MESSAGE(STATUS "Now getting 'flatbuffers'...")
+        FetchContent_Populate(flatbuffers)
+    ENDIF()
+    LIST(APPEND TFL_INC_DIRS ${flatbuffers_SOURCE_DIR}/include)
+
+    FetchContent_Declare(
+        fixedpoint 
+        GIT_REPOSITORY https://github.com/google/gemmlowp.git 
+        GIT_PROGRESS FALSE 
+        QUIET 
+        )
+    FetchContent_GetProperties(fixedpoint)
+    IF(NOT fixedpoint_POPULATED)
+        MESSAGE(STATUS "And finaly 'fixedpoint'...")
+        FetchContent_Populate(fixedpoint)
+    ENDIF()
+    LIST(APPEND TFL_INC_DIRS ${fixedpoint_SOURCE_DIR})
+
+    FetchContent_Declare(
+        ruy 
+        GIT_REPOSITORY https://github.com/google/ruy.git 
+        GIT_PROGRESS FALSE 
+        QUIET 
+        )
+    FetchContent_GetProperties(ruy)
+    IF(NOT ruy_POPULATED)
+        MESSAGE(STATUS "Oh we also need 'ruy'...")
+        FetchContent_Populate(ruy)
+    ENDIF()
+    LIST(APPEND TFL_INC_DIRS ${ruy_SOURCE_DIR})
+ENDIF()
+
+SET(TFL_SRC ${TF_SRC}/tensorflow/lite)
+SET(TFLM_SRC ${TFL_SRC}/micro)
+SET(TFLD_SRC ${TFL_SRC}/tools/make/downloads)
+
+IF(EXISTS ${TFLD_SRC}/flatbuffers/include)
+    LIST(APPEND TFL_INC_DIRS ${TFLD_SRC}/flatbuffers/include)
+ENDIF()
+
+IF(EXISTS ${TFLD_SRC}/gemmlowp)
+    LIST(APPEND ${TFLD_SRC}/gemmlowp)
+ENDIF()
+
+LIST(APPEND TFL_INC_DIRS 
+    ${TF_SRC}
+    )
+
+FILE(GLOB TFL_ROOT_SRCS
+    ${TFLM_SRC}/*.cc 
+    )
+
+FILE(GLOB TFL_KERNELS_SRCS
+    ${TFLM_SRC}/kernels/*.cc 
+    ${TFL_SRC}/kernels/internal/quantization_util.cc 
+    ${TFL_SRC}/kernels/kernel_util.cc
+    )
+
+FILE(GLOB TFL_CORE_API_SRCS
+    ${TFL_SRC}/core/api/*.cc 
+    )
+
+FILE(GLOB TFL_C_SRCS
+    ${TFL_SRC}/c/common.c
+    )
+
+FILE(GLOB TFL_MEM_PLANNER_SRCS
+    ${TFLM_SRC}/memory_planner/*.cc
+    )
+
+SET(TFL_SRCS 
+    ${TFL_ROOT_SRCS}
+    ${TFL_KERNELS_SRCS}
+    ${TFL_CORE_API_SRCS}
+    ${TFL_C_SRCS}
+    ${TFL_MEM_PLANNER_SRCS}
+    )
+
+LIST(FILTER TFL_SRCS EXCLUDE REGEX "([a-z0-9_]+_test.cc)$")
+
+ADD_LIBRARY(${LIB_NAME} STATIC
+    ${TFL_SRCS}
+)
+
+TARGET_INCLUDE_DIRECTORIES(${LIB_NAME} PUBLIC
+    ${TFL_INC_DIRS}
+)
+
+TARGET_COMPILE_DEFINITIONS(${LIB_NAME} PUBLIC
+    TF_LITE_USE_GLOBAL_MAX
+    TF_LITE_USE_GLOBAL_MIN
+    TF_LITE_USE_GLOBAL_CMATH_FUNCTIONS
+    TF_LITE_STATIC_MEMORY
+    TFLITE_EMULATE_FLOAT
+    "$<$<CONFIG:RELEASE>:TF_LITE_STRIP_ERROR_STRINGS>"
+)
+
+SET(TFLite_INCLUDE_DIRS 
+    ${TFL_INC_DIRS}
+    )
+
+SET(TFLite_SOURCES 
+    ${TFL_SRCS}
+    )
+
+INCLUDE(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(TFLite DEFAULT_MSG TFLite_INCLUDE_DIRS TFLite_SOURCES)