From: Alexander Alekhin Date: Thu, 10 Apr 2014 11:42:57 +0000 (+0400) Subject: ICV: added package downloader X-Git-Tag: accepted/tizen/6.0/unified/20201030.111113~3307^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=047d285b7d63ba4af14fda0722a475d4a6535a0b;p=platform%2Fupstream%2Fopencv.git ICV: added package downloader --- diff --git a/3rdparty/ippicv/.gitignore b/3rdparty/ippicv/.gitignore new file mode 100644 index 0000000..c7decd2 --- /dev/null +++ b/3rdparty/ippicv/.gitignore @@ -0,0 +1,4 @@ +downloads/ +macosx/ +linux/ +windows/ diff --git a/3rdparty/ippicv/downloader.cmake b/3rdparty/ippicv/downloader.cmake new file mode 100644 index 0000000..849c038 --- /dev/null +++ b/3rdparty/ippicv/downloader.cmake @@ -0,0 +1,100 @@ +# +# The script downloads ICV package +# +# On return this will define: +# OPENCV_ICV_PATH - path to unpacked downloaded package +# + +function(_icv_downloader) + # Define actual ICV versions + if(APPLE) + set(OPENCV_ICV_PACKAGE_NAME "ippicv_macosx.tar.gz") + set(OPENCV_ICV_PACKAGE_HASH "d489e447906de7808a9a9d7e3f225f7a") + set(OPENCV_ICV_PLATFORM "macosx") + elseif(UNIX AND NOT ANDROID) + set(OPENCV_ICV_PACKAGE_NAME "ippicv_linux.tar.gz") + set(OPENCV_ICV_PACKAGE_HASH "42798c6cd6348bd40e74c425dc23338a") + set(OPENCV_ICV_PLATFORM "linux") + elseif(WIN32 AND NOT ARM) + set(OPENCV_ICV_PACKAGE_NAME "ippicv_windows.zip") + set(OPENCV_ICV_PACKAGE_HASH "2715f39ae65dc09bae3648bffe538706") + set(OPENCV_ICV_PLATFORM "windows") + else() + return() # Not supported + endif() + + set(OPENCV_ICV_PATH "${CMAKE_CURRENT_LIST_DIR}/${OPENCV_ICV_PLATFORM}") + + if(DEFINED OPENCV_ICV_PACKAGE_DOWNLOADED + AND OPENCV_ICV_PACKAGE_DOWNLOADED STREQUAL OPENCV_ICV_PACKAGE_HASH + AND EXISTS ${OPENCV_ICV_PATH}) + # Package has been downloaded and checked by the previous build + set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE) + return() + else() + if(EXISTS ${OPENCV_ICV_PATH}) + message(STATUS "ICV: Removing previous unpacked package: ${OPENCV_ICV_PATH}") + file(REMOVE_RECURSE ${OPENCV_ICV_PATH}) + endif() + endif() + unset(OPENCV_ICV_PACKAGE_DOWNLOADED CACHE) + + set(OPENCV_ICV_PACKAGE_ARCHIVE "${CMAKE_CURRENT_LIST_DIR}/downloads/${OPENCV_ICV_PLATFORM}-${OPENCV_ICV_PACKAGE_HASH}/${OPENCV_ICV_PACKAGE_NAME}") + get_filename_component(OPENCV_ICV_PACKAGE_ARCHIVE_DIR "${OPENCV_ICV_PACKAGE_ARCHIVE}" PATH) + if(EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}") + file(MD5 "${OPENCV_ICV_PACKAGE_ARCHIVE}" archive_md5) + if(NOT archive_md5 STREQUAL OPENCV_ICV_PACKAGE_HASH) + message(WARNING "ICV: Local copy of ICV package has invalid MD5 hash: ${archive_md5} (expected: ${OPENCV_ICV_PACKAGE_HASH})") + file(REMOVE "${OPENCV_ICV_PACKAGE_ARCHIVE}") + file(REMOVE_RECURSE "${OPENCV_ICV_PACKAGE_ARCHIVE_DIR}") + endif() + endif() + + if(NOT EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}") + if(NOT DEFINED OPENCV_ICV_URL) + if(NOT DEFINED ENV{OPENCV_ICV_URL}) + # TODO Specify default URL after ICV publishing + message(STATUS "ICV: downloading URL is not specified, skip downloading") + return() + endif() + set(OPENCV_ICV_URL $ENV{OPENCV_ICV_URL}) + endif() + + file(MAKE_DIRECTORY ${OPENCV_ICV_PACKAGE_ARCHIVE_DIR}) + message(STATUS "ICV: Downloading ${OPENCV_ICV_PACKAGE_NAME}...") + file(DOWNLOAD "${OPENCV_ICV_URL}/${OPENCV_ICV_PACKAGE_NAME}" "${OPENCV_ICV_PACKAGE_ARCHIVE}" + TIMEOUT 600 STATUS __status + EXPECTED_MD5 ${OPENCV_ICV_PACKAGE_HASH}) + if(NOT __status EQUAL 0) + message(FATAL_ERROR "ICV: Failed to download ICV package: ${OPENCV_ICV_PACKAGE_NAME}. Status=${__status}") + else() + # Don't remove this code, because EXPECTED_MD5 parameter doesn't fail "file(DOWNLOAD)" step + # on wrong hash + file(MD5 "${OPENCV_ICV_PACKAGE_ARCHIVE}" archive_md5) + if(NOT archive_md5 STREQUAL OPENCV_ICV_PACKAGE_HASH) + message(FATAL_ERROR "ICV: Downloaded copy of ICV package has invalid MD5 hash: ${archive_md5} (expected: ${OPENCV_ICV_PACKAGE_HASH})") + endif() + endif() + endif() + + ocv_assert(EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}") + ocv_assert(NOT EXISTS "${OPENCV_ICV_PATH}") + file(MAKE_DIRECTORY ${OPENCV_ICV_PATH}) + ocv_assert(EXISTS "${OPENCV_ICV_PATH}") + + message(STATUS "ICV: Unpacking ${OPENCV_ICV_PACKAGE_NAME} to ${OPENCV_ICV_PATH}...") + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xz "${OPENCV_ICV_PACKAGE_ARCHIVE}" + WORKING_DIRECTORY "${OPENCV_ICV_PATH}" + RESULT_VARIABLE __result) + + if(NOT __result EQUAL 0) + message(FATAL_ERROR "ICV: Failed to unpack ICV package from ${OPENCV_ICV_PACKAGE_ARCHIVE} to ${OPENCV_ICV_PATH} with error ${__result}") + endif() + + set(OPENCV_ICV_PACKAGE_DOWNLOADED "${OPENCV_ICV_PACKAGE_HASH}" CACHE INTERNAL "ICV package hash") + + message(STATUS "ICV: Package successfully downloaded") + set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE) +endfunction() + +_icv_downloader() diff --git a/cmake/OpenCVFindIPP.cmake b/cmake/OpenCVFindIPP.cmake index 9cb6ed0..6ad6c28 100644 --- a/cmake/OpenCVFindIPP.cmake +++ b/cmake/OpenCVFindIPP.cmake @@ -140,7 +140,7 @@ macro(ipp_detect_version) else() _ipp_not_supported("IPP ${IPP_VERSION_STR} at ${IPP_ROOT_DIR} is not supported") endif() - if(X86_64) + if(IPP_X64) _ipp_set_library_dir(${IPP_LIBRARY_DIR}/intel64) else() _ipp_set_library_dir(${IPP_LIBRARY_DIR}/ia32) @@ -221,7 +221,12 @@ if(DEFINED ENV{OPENCV_IPP_PATH} AND NOT DEFINED IPPROOT) set(IPPROOT "$ENV{OPENCV_IPP_PATH}") endif() if(NOT DEFINED IPPROOT) - set(IPPROOT "${OpenCV_SOURCE_DIR}/3rdparty/ippicv") + include("${OpenCV_SOURCE_DIR}/3rdparty/ippicv/downloader.cmake") + if(DEFINED OPENCV_ICV_PATH) + set(IPPROOT "${OPENCV_ICV_PATH}") + else() + return() + endif() endif() # Try ICV