summaryrefslogtreecommitdiff
path: root/externals/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'externals/CMakeLists.txt')
-rw-r--r--externals/CMakeLists.txt104
1 files changed, 87 insertions, 17 deletions
diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt
index 0d8579e48..5bfc4ad4e 100644
--- a/externals/CMakeLists.txt
+++ b/externals/CMakeLists.txt
@@ -1,12 +1,12 @@
set(TENSORFLOW_BASE ${CMAKE_CURRENT_SOURCE_DIR}/tensorflow)
set(TENSORFLOW_LITE_BASE ${TENSORFLOW_BASE}/tensorflow/contrib/lite)
-set(EXTERNAL_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tensorflow/tensorflow/contrib/lite/downloads")
-include(eigen3.cmake)
-
-if(BUILD_IS_NATIVE AND NOT HOST_ARCH_BASE STREQUAL "arm")
- add_subdirectory(${EXTERNAL_SRC_DIR}/flatbuffers)
-endif()
+# Required source & package
+nnfw_find_package(Eigen REQUIRED)
+nnfw_find_package(FarmhashSource REQUIRED)
+nnfw_find_package(FlatBuffersSource REQUIRED)
+nnfw_find_package(GEMMLowpSource REQUIRED)
+nnfw_find_package(TensorFlowSource REQUIRED)
#
# Tensorflow Lite library
@@ -19,24 +19,94 @@ file(GLOB_RECURSE TFLITE_KERNEL_SRCS "${TENSORFLOW_LITE_BASE}/kernels/*.cc")
file(GLOB_RECURSE TFLITE_KERNEL_TESTS "${TENSORFLOW_LITE_BASE}/kernels/*test*.cc")
list(REMOVE_ITEM TFLITE_KERNEL_SRCS ${TFLITE_KERNEL_TESTS})
+# We will use our own BuiltinOpResolver
+list(REMOVE_ITEM TFLITE_KERNEL_SRCS "${TENSORFLOW_LITE_BASE}/kernels/register.cc")
list(APPEND TFLITE_SRCS ${TFLITE_CORE_SRCS})
list(APPEND TFLITE_SRCS ${TFLITE_KERNEL_SRCS})
-list(APPEND TFLITE_SRCS "${EXTERNAL_SRC_DIR}/farmhash/src/farmhash.cc")
-list(APPEND TFLITE_INCLUDES "${EXTERNAL_SRC_DIR}/")
+list(APPEND TFLITE_SRCS "${TFLITE_DEPEND_DIR}/farmhash/src/farmhash.cc")
+
+# Profiling
+if(BUILD_TFLITE_BENCHMARK_MODEL)
+ file(GLOB TFLITE_PROFILING_SRCS "${TENSORFLOW_LITE_BASE}/profiling/*.cc")
+ file(GLOB TFLITE_PROFILING_TESTS "${TENSORFLOW_LITE_BASE}/profiling/*test*.cc")
+ list(REMOVE_ITEM TFLITE_PROFILING_SRCS ${TFLITE_PROFILING_TESTS})
+ list(APPEND TFLITE_PROFILING_SRCS "${TENSORFLOW_BASE}/tensorflow/core/util/stats_calculator.cc")
+ list(APPEND TFLITE_SRCS ${TFLITE_PROFILING_SRCS})
+endif()
+
list(APPEND TFLITE_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/tensorflow")
-list(APPEND TFLITE_INCLUDES "${EXTERNAL_SRC_DIR}/gemmlowp")
-list(APPEND TFLITE_INCLUDES "${EXTERNAL_SRC_DIR}/neon_2_sse")
-list(APPEND TFLITE_INCLUDES "${EXTERNAL_SRC_DIR}/farmhash/src")
-list(APPEND TFLITE_INCLUDES "${EXTERNAL_SRC_DIR}/flatbuffers/include")
+list(APPEND TFLITE_INCLUDES "${TFLITE_DEPEND_DIR}/gemmlowp")
+list(APPEND TFLITE_INCLUDES "${TFLITE_DEPEND_DIR}/farmhash/src")
+list(APPEND TFLITE_INCLUDES "${TFLITE_DEPEND_DIR}/flatbuffers/include")
+
+if(BUILD_IS_NATIVE AND NOT HOST_ARCH_BASE STREQUAL "arm")
+ # Flatbuffer build
+ nnfw_find_package(FlatBuffers)
+ # Required external sourcefor x86-64 build
+ nnfw_find_package(NEON2SSESource REQUIRED)
+ list(APPEND TFLITE_INCLUDES "${TFLITE_DEPEND_DIR}/neon_2_sse")
+endif()
+
+# This kernels are not used on nnfw
+## spectrogram
+list(REMOVE_ITEM TFLITE_SRCS "${TENSORFLOW_LITE_BASE}/kernels/audio_spectrogram.cc")
+list(REMOVE_ITEM TFLITE_SRCS "${TENSORFLOW_LITE_BASE}/kernels/audio_spectrogram_test.cc")
+list(REMOVE_ITEM TFLITE_SRCS "${TENSORFLOW_LITE_BASE}/kernels/internal/spectrogram.cc")
+## mfcc
+list(REMOVE_ITEM TFLITE_SRCS "${TENSORFLOW_LITE_BASE}/kernels/internal/mfcc.cc")
+list(REMOVE_ITEM TFLITE_SRCS "${TENSORFLOW_LITE_BASE}/kernels/internal/mfcc_dct.cc")
+list(REMOVE_ITEM TFLITE_SRCS "${TENSORFLOW_LITE_BASE}/kernels/internal/mfcc_mel_filterbank.cc")
+list(REMOVE_ITEM TFLITE_SRCS "${TENSORFLOW_LITE_BASE}/kernels/mfcc.cc")
+list(REMOVE_ITEM TFLITE_SRCS "${TENSORFLOW_LITE_BASE}/kernels/mfcc_test.cc")
+
+if("${TARGET_OS}" STREQUAL "android")
+ if(NOT DEFINED NDK_DIR)
+ file(GLOB NDK_DIRS "${CMAKE_SOURCE_DIR}/tools/cross/ndk/*")
+ list(LENGTH NDK_DIRS NDK_DIRS_COUNT)
+ if (NDK_DIRS_COUNT EQUAL 1)
+ set(NDK_DIR "${NDK_DIRS}")
+ endif(NDK_DIRS_COUNT EQUAL 1)
+ endif(NOT DEFINED NDK_DIR)
+
+ if(NOT DEFINED NDK_DIR)
+ message(FATAL_ERROR "NDK_DIR should be specified via environment variable")
+ endif()
+ message(STATUS "Found NDK: ${NDK_DIR}")
+ list(APPEND TFLITE_INCLUDES "${NDK_DIR}")
+endif()
add_library(tensorflow-lite ${TFLITE_SRCS})
target_include_directories(tensorflow-lite PUBLIC ${TFLITE_INCLUDES})
target_compile_definitions(tensorflow-lite PUBLIC "GEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK")
-target_link_libraries(tensorflow-lite eigen3 ${LIB_PTHREAD} dl)
+if(BUILD_TFLITE_BENCHMARK_MODEL)
+ target_compile_definitions(tensorflow-lite PUBLIC "TFLITE_PROFILING_ENABLED")
+endif()
+target_link_libraries(tensorflow-lite eigen ${LIB_PTHREAD} dl)
-install(TARGETS tensorflow-lite ARCHIVE DESTINATION lib)
+if("${TARGET_OS}" STREQUAL "android")
+ target_link_libraries(tensorflow-lite log)
+ #
+ # Tensorflow Lite JNI library
+ #
+ set(TFLITE_JNI_BASE ${TENSORFLOW_LITE_BASE}/java/src/main/native)
+ set(TFLITE_JNI_SRCS ${TFLITE_JNI_BASE}/duration_utils_jni.cc
+ ${TFLITE_JNI_BASE}/exception_jni.cc
+ ${TFLITE_JNI_BASE}/nativeinterpreterwrapper_jni.cc
+ ${TFLITE_JNI_BASE}/tensor_jni.cc
+ ${TFLITE_JNI_BASE}/tensorflow_lite_jni.cc
+ ${TFLITE_JNI_BASE}/builtin_ops_jni.cc
+ )
+ set(TFLITE_JNI_INCLUDES ${TENSORFLOW_LITE_BASE}/java/src/native)
-if(BUILD_ACL)
- include(acl.cmake)
-endif(BUILD_ACL)
+ # We need this for running vanilla tflite
+ # TODO remove this when nnfw is used
+ set(TFLITE_SRCS_V ${TENSORFLOW_LITE_BASE}/kernels/register.cc)
+
+ # TODO use tensorflow-lite static library instead of compiling all the sources again
+ add_library(tensorflowlite_jni SHARED ${TFLITE_JNI_SRCS} ${TFLITE_SRCS} ${TFLITE_SRCS_V})
+ target_include_directories(tensorflowlite_jni PUBLIC ${TFLITE_JNI_INCLUDES} ${TFLITE_INCLUDES})
+ target_link_libraries(tensorflowlite_jni eigen ${LIB_PTHREAD} dl)
+ target_link_libraries(tensorflowlite_jni log)
+ install(TARGETS tensorflowlite_jni DESTINATION lib)
+endif()