summaryrefslogtreecommitdiff
path: root/externals
diff options
context:
space:
mode:
Diffstat (limited to 'externals')
-rw-r--r--externals/CMakeLists.txt42
-rw-r--r--externals/acl.cmake150
-rw-r--r--externals/eigen3.cmake12
3 files changed, 204 insertions, 0 deletions
diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt
new file mode 100644
index 000000000..0d8579e48
--- /dev/null
+++ b/externals/CMakeLists.txt
@@ -0,0 +1,42 @@
+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()
+
+#
+# Tensorflow Lite library
+#
+file(GLOB TFLITE_CORE_SRCS "${TENSORFLOW_LITE_BASE}/*.c" "${TENSORFLOW_LITE_BASE}/*.cc")
+file(GLOB TFLITE_CORE_TESTS "${TENSORFLOW_LITE_BASE}/*test*.cc")
+list(REMOVE_ITEM TFLITE_CORE_SRCS ${TFLITE_CORE_TESTS})
+
+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})
+
+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_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")
+
+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)
+
+install(TARGETS tensorflow-lite ARCHIVE DESTINATION lib)
+
+if(BUILD_ACL)
+ include(acl.cmake)
+endif(BUILD_ACL)
diff --git a/externals/acl.cmake b/externals/acl.cmake
new file mode 100644
index 000000000..206ada650
--- /dev/null
+++ b/externals/acl.cmake
@@ -0,0 +1,150 @@
+###
+### ARM Compute Library
+###
+set(ACL_BASE ${CMAKE_CURRENT_SOURCE_DIR}/acl)
+set(ACL_GENERATED ${CMAKE_CURRENT_BINARY_DIR}/acl_generated)
+set(ACL_VERSION_TAG "${ACL_GENERATED}/arm_compute_version.embed")
+
+# Create 'arm_compute_version.embed'
+add_custom_command(OUTPUT ${ACL_VERSION_TAG}
+ COMMAND mkdir -p "${ACL_GENERATED}"
+ COMMAND echo '"unknown"' > "${ACL_VERSION_TAG}")
+
+file(GLOB_RECURSE ACL_UTIL_SRCS "${ACL_BASE}/src/core/utils/*.cpp")
+
+### ARM Compute Library - Foundation library (such as I/O and logging)
+if(BUILD_ACL_STATIC_LIB)
+ add_library(acl_foundation ${ACL_UTIL_SRCS})
+ target_include_directories(acl_foundation PUBLIC "${ACL_BASE}")
+ target_include_directories(acl_foundation PUBLIC "${ACL_BASE}/include")
+ target_link_libraries(acl_foundation dl pthread)
+endif(BUILD_ACL_STATIC_LIB)
+
+###
+### ARM Compute Library Common (Core & Runtime)
+###
+file(GLOB ACL_CORE_COMMON_SRCS "${ACL_BASE}/src/core/*.cpp")
+list(APPEND ACL_CORE_COMMON_SRCS ${ACL_VERSION_TAG})
+# Both CL & NEON runtime funtions use these CPP kernels
+list(APPEND ACL_CORE_COMMON_SRCS "${ACL_BASE}/src/core/CPP/kernels/CPPCornerCandidatesKernel.cpp")
+list(APPEND ACL_CORE_COMMON_SRCS "${ACL_BASE}/src/core/CPP/kernels/CPPDetectionWindowNonMaximaSuppressionKernel.cpp")
+list(APPEND ACL_CORE_COMMON_SRCS "${ACL_BASE}/src/core/CPP/kernels/CPPSortEuclideanDistanceKernel.cpp")
+
+if(BUILD_ACL_STATIC_LIB)
+ add_library(acl_core_common ${ACL_CORE_COMMON_SRCS})
+ target_include_directories(acl_core_common PUBLIC "${ACL_GENERATED}")
+ target_link_libraries(acl_core_common acl_foundation)
+endif(BUILD_ACL_STATIC_LIB)
+
+file(GLOB ACL_RUNTIME_COMMON_SRCS "${ACL_BASE}/src/runtime/*.cpp")
+# src/runtime/Scheduler.cpp depends on this scheduler
+list(APPEND ACL_RUNTIME_COMMON_SRCS "${ACL_BASE}/src/runtime/CPP/SingleThreadScheduler.cpp")
+
+if(BUILD_ACL_STATIC_LIB)
+ add_library(acl_core_opencl ${ACL_CORE_OPENCL_SRCS})
+ target_link_libraries(acl_core_opencl acl_core_common OpenCL)
+endif(BUILD_ACL_STATIC_LIB)
+
+###
+### ARM Compute Library Open CL (Core & Runtime & Example)
+###
+file(GLOB ACL_CORE_OPENCL_SRCS "${ACL_BASE}/src/core/CL/*.cpp")
+file(GLOB ACL_CORE_OPENCL_KERNEL_SRCS "${ACL_BASE}/src/core/CL/kernels/*.cpp")
+list(APPEND ACL_CORE_OPENCL_SRCS ${ACL_CORE_OPENCL_KERNEL_SRCS})
+
+if(BUILD_ACL_STATIC_LIB)
+ add_library(acl_runtime_opencl ${ACL_RUNTIME_OPENCL_SRCS})
+ target_link_libraries(acl_runtime_opencl acl_runtime_common acl_core_opencl)
+endif(BUILD_ACL_STATIC_LIB)
+
+file(GLOB_RECURSE ACL_RUNTIME_OPENCL_SRCS "${ACL_BASE}/src/runtime/CL/*.cpp")
+
+if(BUILD_ACL_STATIC_LIB)
+ add_library(acl_core_neon ${ACL_CORE_NEON_SRCS})
+ target_include_directories(acl_core_neon PUBLIC "${ACL_BASE}/arm_compute/core/NEON/kernels/assembly")
+ target_link_libraries(acl_core_neon acl_core_common)
+endif(BUILD_ACL_STATIC_LIB)
+
+###
+### ARM Compute Library NEON (Core & Runtime & Example)
+###
+file(GLOB ACL_CORE_NEON_SRCS "${ACL_BASE}/src/core/NEON/kernels/*.cpp" "${ACL_BASE}/src/core/NEON/kernels/arm32/*.cpp")
+file(GLOB_RECURSE ACL_CORE_NEON_CONVOLUTION_SRCS "${ACL_BASE}/src/core/NEON/kernels/convolution/winograd/*.cpp" "${ACL_BASE}/src/core/NEON/kernels/convolution/depthwise/*.cpp")
+list(APPEND ACL_CORE_NEON_SRCS ${ACL_CORE_NEON_CONVOLUTION_SRCS})
+list(APPEND ACL_CORE_NEON_SRCS "${ACL_BASE}/src/core/CPP/ICPPSimpleKernel.cpp")
+list(APPEND ACL_CORE_NEON_SRCS "${ACL_BASE}/src/core/CPP/kernels/CPPPermuteKernel.cpp")
+
+if(BUILD_ACL_STATIC_LIB)
+ add_library(acl_runtime_neon ${ACL_RUNTIME_NEON_SRCS})
+ target_link_libraries(acl_runtime_neon acl_runtime_common acl_core_neon)
+endif(BUILD_ACL_STATIC_LIB)
+
+file(GLOB_RECURSE ACL_RUNTIME_NEON_SRCS "${ACL_BASE}/src/runtime/NEON/*.cpp")
+# runtime/NEON/functions/NEWinogradLayer.h use this implementation
+list(APPEND ACL_RUNTIME_NEON_SRCS "${ACL_BASE}/src/runtime/CPP/ICPPSimpleFunction.cpp")
+list(APPEND ACL_RUNTIME_NEON_SRCS "${ACL_BASE}/src/runtime/CPP/functions/CPPPermute.cpp")
+
+if(BUILD_ACL_STATIC_LIB)
+ add_library(acl_graph ${ACL_GRAPH_SRCS})
+ target_link_libraries(acl_graph acl_runtime_opencl acl_runtime_neon)
+endif(BUILD_ACL_STATIC_LIB)
+
+# TODO Support Open MP core(?)
+# TODO Support Open GLES core(?)
+
+###
+### ARM Compute Library (Graph & Example)
+###
+file(GLOB ACL_GRAPH_COMMON_SRCS "${ACL_BASE}/src/graph/*.cpp" "${ACL_BASE}/src/graph/nodes/*.cpp")
+file(GLOB ACL_GRAPH_OPENCL_SRCS "${ACL_BASE}/src/graph/CL/*.cpp" "${ACL_BASE}/src/graph/operations/CL*.cpp")
+file(GLOB ACL_GRAPH_NEON_SRCS "${ACL_BASE}/src/graph/NE/*.cpp" "${ACL_BASE}/src/graph/operations/NE*.cpp")
+
+list(APPEND ACL_GRAPH_SRCS ${ACL_GRAPH_COMMON_SRCS})
+list(APPEND ACL_GRAPH_SRCS ${ACL_GRAPH_OPENCL_SRCS})
+list(APPEND ACL_GRAPH_SRCS ${ACL_GRAPH_NEON_SRCS})
+
+if(BUILD_ACL_STATIC_LIB)
+ add_library(acl_graph ${ACL_GRAPH_SRCS})
+ target_link_libraries(acl_graph acl_runtime_opencl acl_runtime_neon)
+endif(BUILD_ACL_STATIC_LIB)
+
+###
+### ARM Compute Shared Libraries
+###
+list(APPEND ACL_CORE_SRCS ${ACL_UTIL_SRCS})
+list(APPEND ACL_CORE_SRCS ${ACL_CORE_COMMON_SRCS})
+list(APPEND ACL_CORE_SRCS ${ACL_CORE_OPENCL_SRCS})
+list(APPEND ACL_CORE_SRCS ${ACL_CORE_NEON_SRCS})
+
+add_library(arm_compute_core SHARED ${ACL_CORE_SRCS})
+target_include_directories(arm_compute_core PUBLIC "${ACL_GENERATED}")
+target_include_directories(arm_compute_core PUBLIC "${ACL_BASE}")
+target_include_directories(arm_compute_core PUBLIC "${ACL_BASE}/include")
+target_include_directories(arm_compute_core PUBLIC "${ACL_BASE}/arm_compute/core/NEON/kernels/assembly")
+target_link_libraries(arm_compute_core dl pthread)
+
+list(APPEND ACL_RUNTIME_SRCS ${ACL_RUNTIME_COMMON_SRCS})
+list(APPEND ACL_RUNTIME_SRCS ${ACL_RUNTIME_OPENCL_SRCS})
+list(APPEND ACL_RUNTIME_SRCS ${ACL_RUNTIME_NEON_SRCS})
+
+add_library(arm_compute SHARED ${ACL_RUNTIME_SRCS})
+target_link_libraries(arm_compute arm_compute_core OpenCL)
+
+add_library(arm_compute_graph SHARED ${ACL_GRAPH_SRCS})
+target_link_libraries(arm_compute_graph arm_compute)
+
+add_library(arm_compute_test SHARED "${ACL_BASE}/utils/Utils.cpp")
+target_link_libraries(arm_compute_test arm_compute)
+
+add_library(arm_compute_graph_test SHARED "${ACL_BASE}/utils/GraphUtils.cpp")
+target_link_libraries(arm_compute_graph_test arm_compute_graph arm_compute_test)
+
+add_executable(cl_convolution "${ACL_BASE}/examples/cl_convolution.cpp")
+target_compile_definitions(cl_convolution PRIVATE ARM_COMPUTE_CL)
+target_link_libraries(cl_convolution arm_compute_test)
+
+add_executable(neon_convolution "${ACL_BASE}/examples/neon_convolution.cpp")
+target_link_libraries(neon_convolution arm_compute_test)
+
+add_executable(graph_lenet "${ACL_BASE}/examples/graph_lenet.cpp")
+target_link_libraries(graph_lenet arm_compute_graph_test)
diff --git a/externals/eigen3.cmake b/externals/eigen3.cmake
new file mode 100644
index 000000000..bc8bf59fd
--- /dev/null
+++ b/externals/eigen3.cmake
@@ -0,0 +1,12 @@
+#
+# Eigen 3
+#
+set(EIGEN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tensorflow/tensorflow/contrib/lite/downloads/eigen")
+file(GLOB_RECURSE EIGEN3_HDRS "${EIGEN_DIR}/*.h")
+
+# NOTE From 3.x, CMake supports INTERFACE library feature. Unfortunately,
+# CMake 2.8.12 (which Ubuntu 14.04 provides) does not support this
+# library feature.
+add_library(eigen3 STATIC ${EIGEN3_HDRS})
+set_target_properties(eigen3 PROPERTIES LINKER_LANGUAGE CXX)
+target_include_directories(eigen3 PUBLIC "${EIGEN_DIR}")