Merge pull request #16832 from liqi-c:3.4-tengine-android
authorNesQl <32612899+liqi-c@users.noreply.github.com>
Fri, 20 Mar 2020 10:10:39 +0000 (18:10 +0800)
committerGitHub <noreply@github.com>
Fri, 20 Mar 2020 10:10:39 +0000 (10:10 +0000)
* Add android support for tengine

* modify tengine download use commit id

* Del some invalid log in Tengine

* Test. default enable tengine

* ndk version judegment

* Close test . set Tengine default OFF

* Logic problem

* test .Android NDK judgement .

* Cmake error modify.

* cmake: cleanup tengine scripts

* cmake: use tengine target name

* cmake: disable testing of BUILD_ANDROID_PROJECTS=OFF

* Close test .

3rdparty/libtengine/tengine.cmake
CMakeLists.txt
cmake/OpenCVFindTengine.cmake

index 7bd42d1ba2cea9910e3330180724db9c9a179f4c..4085afcf319cb8b430606160b19094add08342e6 100644 (file)
 #         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 FAILEDTurning 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()
-
-
index 6d36719f108840f6b0289113203267c13c03ca4e..831602a4c1c9f2fdf5ef5d03b9c400ffdb33f22e 100644 (file)
@@ -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
index 3f0bb7029c4c954ed44b54a1f0c05c27f66d100c..2d33f5c993871214a280d406e8e7f7411269e0e8 100644 (file)
 #
 
 # ----------------------------------------------------------------------------
-#  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
 )