Add 'TensorFlowLite' as an external module (#188)
author박종현/동작제어Lab(SR)/Senior Engineer/삼성전자 <jh1302.park@samsung.com>
Thu, 3 May 2018 05:34:03 +0000 (14:34 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Thu, 3 May 2018 05:34:03 +0000 (14:34 +0900)
This commit adds 'TensorFlowLite' external module which builds a
'libtensorflowlite.a' from TensorFlow Lite source.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
cmake/packages/TensorFlowLiteConfig.cmake [new file with mode: 0644]

diff --git a/cmake/packages/TensorFlowLiteConfig.cmake b/cmake/packages/TensorFlowLiteConfig.cmake
new file mode 100644 (file)
index 0000000..36395ce
--- /dev/null
@@ -0,0 +1,70 @@
+function(_TensorFlowLite_import)
+  nncc_find_package(TensorFlowSource QUIET)
+
+  if(NOT TensorFlowSource_FOUND)
+    set(TensorFlowLite_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif(NOT TensorFlowSource_FOUND)
+
+  nncc_find_package(FlatBuffers QUIET)
+
+  if(NOT FlatBuffers_FOUND)
+    set(TensorFlowLite_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif(NOT FlatBuffers_FOUND)
+
+  nncc_find_package(Farmhash QUIET)
+
+  if(NOT Farmhash_FOUND)
+    set(TensorFlowLite_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif(NOT Farmhash_FOUND)
+
+  nncc_find_package(Eigen QUIET)
+
+  if(NOT Eigen_FOUND)
+    set(TensorFlowLite_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif(NOT Eigen_FOUND)
+
+  nncc_find_package(GEMMLowp QUIET)
+
+  if(NOT GEMMLowp_FOUND)
+    set(TensorFlowLite_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif(NOT GEMMLowp_FOUND)
+
+  nncc_find_package(NEON2SSE QUIET)
+
+  if(NOT NEON2SSE_FOUND)
+    set(TensorFlowLite_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif(NOT NEON2SSE_FOUND)
+
+  set(TensorFlowLiteSource_DIR ${TensorFlowSource_DIR}/tensorflow/contrib/lite)
+
+  file(GLOB CORE_SRCS "${TensorFlowLiteSource_DIR}/*.c" "${TensorFlowLiteSource_DIR}/*.cc")
+  file(GLOB CORE_TESTS "${TensorFlowLiteSource_DIR}/*test*.cc")
+  list(REMOVE_ITEM CORE_SRCS ${CORE_TESTS})
+
+  file(GLOB_RECURSE KERNEL_SRCS "${TensorFlowLiteSource_DIR}/kernels/*.cc")
+  file(GLOB_RECURSE KERNEL_TESTS "${TensorFlowLiteSource_DIR}/kernels/*test*.cc")
+  list(REMOVE_ITEM KERNEL_SRCS ${KERNEL_TESTS})
+  # Exclude buggy kernel(s) from the build
+  list(REMOVE_ITEM KERNEL_SRCS "${TensorFlowLiteSource_DIR}/kernels/internal/spectrogram.cc")
+
+  list(APPEND SRCS ${CORE_SRCS})
+  list(APPEND SRCS ${KERNEL_SRCS})
+
+  if(NOT TARGET tensorflowlite)
+    add_library(tensorflowlite ${SRCS})
+    target_include_directories(tensorflowlite PUBLIC ${TensorFlowSource_DIR})
+    target_compile_options(tensorflowlite PUBLIC -Wno-ignored-attributes)
+    target_compile_definitions(tensorflowlite PUBLIC "GEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK")
+    target_link_libraries(tensorflowlite eigen gemmlowp neon2sse farmhash flatbuffers dl)
+  endif(NOT TARGET tensorflowlite)
+
+  set(TensorFlowLite_FOUND TRUE PARENT_SCOPE)
+endfunction(_TensorFlowLite_import)
+
+_TensorFlowLite_import()