set(NNFW_ACL_FOLDER "")
set(NNFW_ACL_INCLUDES "")
endif()
-set(NNFW_ACL_LIBS arm_compute_graph arm_compute arm_compute_core dl pthread)
set(NNFW_NN_RUNTIME_ROOT ${CMAKE_SOURCE_DIR}/runtimes/nn)
# NOTE '${CMAKE_INSTALL_PREFIX}/lib' should be added as a link directory as
+nnfw_find_package(ARMCompute REQUIRED)
+
add_library(arm_compute_benchmark SHARED "Benchmark.cpp")
target_include_directories(arm_compute_benchmark PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
-target_include_directories(arm_compute_benchmark PUBLIC ${NNFW_ACL_INCLUDES})
-target_link_libraries(arm_compute_benchmark ${NNFW_ACL_LIBS})
+target_link_libraries(arm_compute_benchmark arm_compute_graph)
install(TARGETS arm_compute_benchmark DESTINATION lib)
# GoogLeNet benchmark
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
add_compile_options(--sysroot=${ROOTFS_ARM64})
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
###
### ARM Compute Library
###
-set(ACL_BASE ${CMAKE_CURRENT_SOURCE_DIR}/acl)
+set(ACL_BASE ${CMAKE_SOURCE_DIR}/externals/acl)
set(ACL_GENERATED ${CMAKE_CURRENT_BINARY_DIR}/acl_generated)
set(ACL_VERSION_TAG "${ACL_GENERATED}/arm_compute_version.embed")
--- /dev/null
+function(_ARMCompute_Build)
+ if(TARGET arm_compute_core)
+ set(ARMCompute_FOUND TRUE PARENT_SCOPE)
+ return()
+ endif(TARGET arm_compute_core)
+
+ add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/ARMCompute" "${CMAKE_BINARY_DIR}/externals/ARMCompute")
+ set(ARMCompute_FOUND TRUE PARENT_SCOPE)
+endfunction(_ARMCompute_Build)
+
+function(_ARMCompute_Import)
+ include(FindPackageHandleStandardArgs)
+
+ list(APPEND ARMCompute_INCLUDE_SEARCH_PATHS /usr/include)
+
+ list(APPEND ARMCompute_LIB_SEARCH_PATHS /usr/lib)
+
+ find_path(INCLUDE_DIR NAMES arm_compute/core/ITensor.h PATHS ${ARMCompute_INCLUDE_SEARCH_PATHS})
+
+ find_library(CORE_LIBRARY NAMES arm_compute_core PATHS ${ARMCompute_LIB_SEARCH_PATHS})
+ find_library(RUNTIME_LIBRARY NAMES arm_compute PATHS ${ARMCompute_LIB_SEARCH_PATHS})
+ find_library(GRAPH_LIBRARY NAMES arm_compute_graph PATHS ${ARMCompute_LIB_SEARCH_PATHS})
+
+ if(NOT INCLUDE_DIR)
+ set(INCLUDE_DIR ${CMAKE_SOURCE_DIR}/externals/acl ${CMAKE_SOURCE_DIR}/externals/acl/include)
+ endif(NOT INCLUDE_DIR)
+
+ # NOTE '${CMAKE_INSTALL_PREFIX}/lib' should be searched as CI server places
+ # pre-built ARM compute libraries on this directory
+ if(NOT CORE_LIBRARY AND EXISTS ${CMAKE_INSTALL_PREFIX}/lib/libarm_compute_core.so)
+ set(CORE_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib/libarm_compute_core.so)
+ endif()
+
+ if(NOT CORE_LIBRARY)
+ return()
+ set(ARMCompute_FOUND FALSE PARENT_SCOPE)
+ endif()
+
+ if(NOT RUNTIME_LIBRARY AND EXISTS ${CMAKE_INSTALL_PREFIX}/lib/libarm_compute.so)
+ set(RUNTIME_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib/libarm_compute.so)
+ endif()
+
+ if(NOT RUNTIME_LIBRARY)
+ return()
+ set(ARMCompute_FOUND FALSE PARENT_SCOPE)
+ endif()
+
+ if(NOT GRAPH_LIBRARY AND EXISTS ${CMAKE_INSTALL_PREFIX}/lib/libarm_compute_graph.so)
+ set(GRAPH_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib/libarm_compute_graph.so)
+ endif()
+
+ if(NOT GRAPH_LIBRARY)
+ return()
+ set(ARMCompute_FOUND FALSE PARENT_SCOPE)
+ endif()
+
+ if(NOT TARGET arm_compute_core)
+ add_library(arm_compute_core INTERFACE)
+ target_include_directories(arm_compute_core INTERFACE ${INCLUDE_DIR})
+ target_link_libraries(arm_compute_core INTERFACE ${CORE_LIBRARY})
+ if (${TARGET_OS} STREQUAL "tizen")
+ target_link_libraries(arm_compute_core INTERFACE OpenCL)
+ endif()
+ endif(NOT TARGET arm_compute_core)
+
+ if(NOT TARGET arm_compute)
+ add_library(arm_compute INTERFACE)
+ target_include_directories(arm_compute INTERFACE ${INCLUDE_DIR})
+ target_link_libraries(arm_compute INTERFACE ${RUNTIME_LIBRARY})
+ target_link_libraries(arm_compute INTERFACE arm_compute_core)
+ endif(NOT TARGET arm_compute)
+
+ if(NOT TARGET arm_compute_graph)
+ add_library(arm_compute_graph INTERFACE)
+ target_include_directories(arm_compute_graph INTERFACE ${INCLUDE_DIR})
+ target_link_libraries(arm_compute_graph INTERFACE ${GRAPH_LIBRARY})
+ target_link_libraries(arm_compute_graph INTERFACE arm_compute)
+ endif(NOT TARGET arm_compute_graph)
+
+ set(ARMCompute_FOUND TRUE PARENT_SCOPE)
+endfunction(_ARMCompute_Import)
+
+if(BUILD_ACL)
+ _ARMCompute_Build()
+else(BUILD_ACL)
+ _ARMCompute_Import()
+endif(BUILD_ACL)
return()
endif(NOT ${TARGET_ARCH_BASE} STREQUAL "arm")
+nnfw_find_package(ARMCompute REQUIRED)
+
file(GLOB_RECURSE NNAPI_BINDACL_SRCS "src/*.cc")
link_directories(${CMAKE_INSTALL_PREFIX}/lib)
add_library(exp_bindacl SHARED ${NNAPI_BINDACL_SRCS})
-target_include_directories(exp_bindacl PUBLIC ${NNFW_INCLUDE_DIR}
- ${NNFW_ACL_INCLUDES})
-target_link_libraries(exp_bindacl nnfw_util ${NNFW_ACL_LIBS})
+target_include_directories(exp_bindacl PUBLIC ${NNFW_INCLUDE_DIR})
+target_link_libraries(exp_bindacl nnfw_util arm_compute_graph)
# we need the library name to be 'neuralnetworks' and this will do the trick
set_target_properties(exp_bindacl PROPERTIES OUTPUT_NAME neuralnetworks)
return()
endif(NOT ${TARGET_ARCH_BASE} STREQUAL "arm")
+nnfw_find_package(ARMCompute REQUIRED)
+
file(GLOB_RECURSE NNAPI_CONVACL_SRCS "src/*.cc")
link_directories(${CMAKE_INSTALL_PREFIX}/lib)
add_library(exp_convacl SHARED ${NNAPI_CONVACL_SRCS})
-target_include_directories(exp_convacl PUBLIC ${NNFW_INCLUDE_DIR}
- ${NNFW_ACL_INCLUDES})
-target_link_libraries(exp_convacl nnfw_util ${NNFW_ACL_LIBS})
+target_include_directories(exp_convacl PUBLIC ${NNFW_INCLUDE_DIR})
+target_link_libraries(exp_convacl nnfw_util arm_compute_graph)
# we need the library name to be 'neuralnetworks' and this will do the trick
set_target_properties(exp_convacl PROPERTIES OUTPUT_NAME neuralnetworks)
return()
endif(NOT ${TARGET_ARCH_BASE} STREQUAL "arm")
+nnfw_find_package(ARMCompute REQUIRED)
+
function(add_kerneltesting TESTNAME SRC_FILES)
link_directories(${CMAKE_INSTALL_PREFIX}/lib)
add_executable(${TESTNAME} ${SRC_FILES})
target_include_directories(${TESTNAME} PUBLIC
- ${NNFW_INCLUDE_DIR}
- ${NNFW_ACL_INCLUDES})
- if (${TARGET_OS} STREQUAL "tizen")
- target_link_libraries(${TESTNAME} nnfw_util OpenCL ${NNFW_ACL_LIBS})
- else()
- target_link_libraries(${TESTNAME} nnfw_util ${NNFW_ACL_LIBS})
- endif()
+ ${NNFW_INCLUDE_DIR})
+ target_link_libraries(${TESTNAME} nnfw_util arm_compute_graph)
install(TARGETS ${TESTNAME} DESTINATION bin)
endfunction()
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_ACL)
- include(acl.cmake)
-endif(BUILD_ACL)
+nnfw_find_package(ARMCompute REQUIRED)
+
set(LIB_KERNELACL kernelacl)
set(LIB_KERNELACL_TEST kernelacl_test)
target_include_directories(${LIB_KERNELACL} PUBLIC
${NNFW_INCLUDE_DIR}
${RUNTIME_INCLUDES}
- ${NNFW_ACL_INCLUDES}
${CMAKE_SOURCE_DIR}/include
)
target_link_libraries(${LIB_KERNELACL} nnfw_support_nnapi)
-if (${TARGET_OS} STREQUAL "tizen")
- target_link_libraries(${LIB_KERNELACL} nnfw_util ${NNFW_ACL_LIBS} OpenCL)
-else()
- target_link_libraries(${LIB_KERNELACL} nnfw_util ${NNFW_ACL_LIBS})
-endif()
+target_link_libraries(${LIB_KERNELACL} nnfw_util arm_compute)
install(TARGETS ${LIB_KERNELACL} DESTINATION lib)
# kernel test executable
target_include_directories(${LIB_KERNELACL_TEST} PUBLIC
${NNFW_INCLUDE_DIR}
${RUNTIME_INCLUDES}
- ${NNFW_ACL_INCLUDES}
)
if (NOT ${TARGET_OS} STREQUAL "tizen")
add_dependencies(${LIB_KERNELACL_TEST} googletest)
endif()
target_link_libraries(${LIB_KERNELACL_TEST}
${LIB_KERNELACL}
- nnfw_util ${NNFW_ACL_LIBS}
+ nnfw_util arm_compute
${NNFW_GTEST_LIBS}
)
install(TARGETS ${LIB_KERNELACL_TEST} DESTINATION unittest)
-if(BUILD_PURE_ARM_COMPUTE)
+if(NOT BUILD_PURE_ARM_COMPUTE)
+ return()
+endif(NOT BUILD_PURE_ARM_COMPUTE)
+
+nnfw_find_package(ARMCompute REQUIRED)
+
+# NOTE This strange indentation is introduced to minimize code diffs
+# TODO Revise indentation
file(GLOB_RECURSE SOURCES "src/*.cc")
add_library(nnapi_pure_arm_compute SHARED ${SOURCES})
# To prevent undefined references
add_executable(pure_arm_compute_symbolcheck symbolcheck.cpp)
target_link_libraries(pure_arm_compute_symbolcheck nnapi_pure_arm_compute)
-endif(BUILD_PURE_ARM_COMPUTE)