diff options
Diffstat (limited to 'externals')
-rw-r--r-- | externals/CMakeLists.txt | 42 | ||||
-rw-r--r-- | externals/acl.cmake | 150 | ||||
-rw-r--r-- | externals/eigen3.cmake | 12 |
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}") |