diff --git a/3rdparty/libtengine/tengine.cmake b/3rdparty/libtengine/tengine.cmake index 7bd42d1ba2..4085afcf31 100644 --- a/3rdparty/libtengine/tengine.cmake +++ b/3rdparty/libtengine/tengine.cmake @@ -22,69 +22,70 @@ # sqfu@openailab.com # -SET(TENGINE_VERSION "tengine-opencv") -SET(OCV_TENGINE_DSTDIRECTORY ${OpenCV_BINARY_DIR}/3rdparty/libtengine) -SET(DEFAULT_OPENCV_TENGINE_SOURCE_PATH ${OCV_TENGINE_DSTDIRECTORY}/Tengine-${TENGINE_VERSION}) +SET(TENGINE_COMMIT_VERSION "2f3cd86217f3530c8e4a82f3ed5af14c7a4e3943") +SET(OCV_TENGINE_DIR "${OpenCV_BINARY_DIR}/3rdparty/libtengine") +SET(OCV_TENGINE_SOURCE_PATH "${OCV_TENGINE_DIR}/Tengine-${TENGINE_COMMIT_VERSION}") -IF(EXISTS ${DEFAULT_OPENCV_TENGINE_SOURCE_PATH}) - MESSAGE(STATUS "Tengine is exist already .") +IF(EXISTS "${OCV_TENGINE_SOURCE_PATH}") + MESSAGE(STATUS "Tengine is exist already at: ${OCV_TENGINE_SOURCE_PATH}") SET(Tengine_FOUND ON) - set(BUILD_TENGINE ON) + SET(BUILD_TENGINE ON) ELSE() - SET(OCV_TENGINE_FILENAME "${TENGINE_VERSION}.zip")#name2 + SET(OCV_TENGINE_FILENAME "${TENGINE_COMMIT_VERSION}.zip")#name2 SET(OCV_TENGINE_URL "https://github.com/OAID/Tengine/archive/") #url2 - SET(tengine_md5sum 9c80d91dc8413911522ec80cde013ae2) #md5sum2 + SET(tengine_md5sum 9124324b6e2b350012e46ae1db4bad7d) #md5sum2 - MESSAGE(STATUS "**** TENGINE DOWNLOAD BEGIN ****") + #MESSAGE(STATUS "**** TENGINE DOWNLOAD BEGIN ****") ocv_download(FILENAME ${OCV_TENGINE_FILENAME} HASH ${tengine_md5sum} URL "${OPENCV_TENGINE_URL}" "$ENV{OPENCV_TENGINE_URL}" "${OCV_TENGINE_URL}" - DESTINATION_DIR ${OCV_TENGINE_DSTDIRECTORY} + DESTINATION_DIR "${OCV_TENGINE_DIR}" ID TENGINE STATUS res UNPACK RELATIVE_URL) if (NOT res) - MESSAGE(STATUS "TENGINE DOWNLOAD FAILED .Turning Tengine_FOUND off.") + MESSAGE(STATUS "TENGINE DOWNLOAD FAILED. Turning Tengine_FOUND off.") SET(Tengine_FOUND OFF) else () MESSAGE(STATUS "TENGINE DOWNLOAD success . ") SET(Tengine_FOUND ON) - set(BUILD_TENGINE ON) + SET(BUILD_TENGINE ON) endif() ENDIF() -if (BUILD_TENGINE) - set(HAVE_TENGINE 1) +if(BUILD_TENGINE) + SET(HAVE_TENGINE 1) # android system if(ANDROID) if(${ANDROID_ABI} STREQUAL "armeabi-v7a") - set(CONFIG_ARCH_ARM32 ON) + SET(CONFIG_ARCH_ARM32 ON) elseif(${ANDROID_ABI} STREQUAL "arm64-v8a") - set(CONFIG_ARCH_ARM64 ON) + SET(CONFIG_ARCH_ARM64 ON) endif() + SET(Tengine_LIB "tengine" CACHE INTERNAL "") + else() + # linux system + if(CMAKE_SYSTEM_PROCESSOR STREQUAL arm) + SET(CONFIG_ARCH_ARM32 ON) + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) ## AARCH64 + SET(CONFIG_ARCH_ARM64 ON) + endif() + SET(Tengine_LIB "tengine" CACHE INTERNAL "") endif() - # linux system - if(CMAKE_SYSTEM_PROCESSOR STREQUAL arm) - set(CONFIG_ARCH_ARM32 ON) - elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) ## AARCH64 - set(CONFIG_ARCH_ARM64 ON) - endif() - - SET(DEFAULT_OPENCV_TENGINE_SOURCE_PATH ${OCV_TENGINE_DSTDIRECTORY}/Tengine-${TENGINE_VERSION}) - set(BUILT_IN_OPENCV ON) ## set for tengine compile discern . - set(Tengine_INCLUDE_DIR ${DEFAULT_OPENCV_TENGINE_SOURCE_PATH}/core/include) - set(Tengine_LIB ${CMAKE_BINARY_DIR}/lib/${ANDROID_ABI}/libtengine.a) - if ( IS_DIRECTORY ${DEFAULT_OPENCV_TENGINE_SOURCE_PATH}) - add_subdirectory("${DEFAULT_OPENCV_TENGINE_SOURCE_PATH}" ${OCV_TENGINE_DSTDIRECTORY}/build) + SET(BUILT_IN_OPENCV ON) ## set for tengine compile discern . + SET(Tengine_INCLUDE_DIR "${OCV_TENGINE_SOURCE_PATH}/core/include" CACHE INTERNAL "") + if(EXISTS "${OCV_TENGINE_SOURCE_PATH}/CMakeLists.txt") + add_subdirectory("${OCV_TENGINE_SOURCE_PATH}" "${OCV_TENGINE_DIR}/build") + else() + message(WARNING "TENGINE: Missing 'CMakeLists.txt' in source code package: ${OCV_TENGINE_SOURCE_PATH}") + SET(HAVE_TENGINE 1) endif() endif() - - diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d36719f10..831602a4c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -433,7 +433,7 @@ OCV_OPTION(WITH_QUIRC "Include library QR-code decoding" ON VISIBLE_IF TRUE VERIFY HAVE_QUIRC) OCV_OPTION(WITH_TENGINE "Include Arm Inference Tengine support" OFF - VISIBLE_IF (ARM OR AARCH64) AND UNIX AND NOT ANDROID AND NOT IOS + VISIBLE_IF (ARM OR AARCH64) AND (UNIX OR ANDROID) AND NOT IOS VERIFY HAVE_TENGINE) # OpenCV build components diff --git a/cmake/OpenCVFindTengine.cmake b/cmake/OpenCVFindTengine.cmake index 3f0bb7029c..2d33f5c993 100644 --- a/cmake/OpenCVFindTengine.cmake +++ b/cmake/OpenCVFindTengine.cmake @@ -21,25 +21,42 @@ # # ---------------------------------------------------------------------------- -# Path for Tengine modules +# Path for Tengine binaries # ---------------------------------------------------------------------------- -set(OPENCV_LIBTENGINE_ROOT_DIR "" CACHE PATH "Where to look for additional OpenCV modules (can be ;-separated list of paths)") +set(OPENCV_LIBTENGINE_ROOT_DIR "" CACHE PATH "Path to TENGINE binaries installation") -IF(OPENCV_LIBTENGINE_ROOT_DIR) +IF(OPENCV_LIBTENGINE_ROOT_DIR AND NOT BUILD_TENGINE) - MESSAGE(STATUS "TENGINE:-- Set tengine lib dir by user ") + MESSAGE(STATUS "TENGINE:-- Use binaries at ${OPENCV_LIBTENGINE_ROOT_DIR}") SET(Tengine_FOUND ON) set(BUILD_TENGINE OFF) - SET(Tengine_INCLUDE_DIR ${OPENCV_LIBTENGINE_ROOT_DIR}/include) - SET(Tengine_LIB ${OPENCV_LIBTENGINE_ROOT_DIR}/lib/libtengine.a) + SET(Tengine_INCLUDE_DIR "${OPENCV_LIBTENGINE_ROOT_DIR}/include" CACHE PATH "TENGINE include dir") + SET(Tengine_LIB "${OPENCV_LIBTENGINE_ROOT_DIR}/lib/libtengine.a" CACHE PATH "TENGINE library dir") ELSE() - - MESSAGE(STATUS "TENGINE:-- Auto download Tengine source code. ") + IF(ANDROID) + IF(OPENCV_TENGINE_FORCE_ANDROID) + # nothing, use Android + ELSEIF(OPENCV_TENGINE_SKIP_ANDROID) + set(Tengine_FOUND OFF) + set(HAVE_TENGINE FALSE) + return() + ELSEIF(NOT DEFINED ANDROID_NDK_REVISION) + MESSAGE(STATUS "Android NDK version Tengine not support: ANDROID_NDK_REVISION is not defined") + set(Tengine_FOUND OFF) + set(HAVE_TENGINE FALSE) + return() + ELSEIF(ANDROID_NDK_REVISION VERSION_LESS 14) + MESSAGE(STATUS "Android NDK version Tengine not support: ANDROID_NDK_REVISION=${ANDROID_NDK_REVISION}") + set(Tengine_FOUND OFF) + set(HAVE_TENGINE FALSE) + return() + ENDIF() + ENDIF() + MESSAGE(STATUS "TENGINE:-- Build Tengine from source code. ") include("${OpenCV_SOURCE_DIR}/3rdparty/libtengine/tengine.cmake") - ENDIF() IF(NOT Tengine_LIB) @@ -55,11 +72,7 @@ IF (Tengine_FOUND) set(TENGINE_INCLUDE_DIRS ${Tengine_INCLUDE_DIR}) ENDIF (Tengine_FOUND) -MESSAGE(STATUS "Tengine include is:" ${Tengine_INCLUDE_DIR}) -MESSAGE(STATUS "Tengine library is:" ${Tengine_LIB}) - MARK_AS_ADVANCED( Tengine_INCLUDE_DIR Tengine_LIB - Tengine )