2 # The script to detect Intel(R) Integrated Performance Primitives Integration Wrappers (IPP Integration Wrappers)
6 # On return this will define:
8 # HAVE_IPP_IW - True if Intel IPP Integration Wrappers found
9 # HAVE_IPP_IW_LL - True if Intel IPP Integration Wrappers found with Low Level API header
10 # IPP_IW_PATH - Root of Intel IPP Integration Wrappers directory
11 # IPP_IW_LIBRARIES - Intel IPP Integration Wrappers libraries
12 # IPP_IW_INCLUDES - Intel IPP Integration Wrappers include folder
15 unset(HAVE_IPP_IW CACHE)
16 unset(HAVE_IPP_IW_LL CACHE)
18 unset(IPP_IW_LIBRARIES)
19 unset(IPP_IW_INCLUDES)
20 unset(IW_CONFIG_DEBUG)
21 #set(IW_CONFIG_DEBUG 1)
27 macro(ippiw_debugmsg MESSAGE)
28 if(DEFINED IW_CONFIG_DEBUG)
29 message(STATUS "${MESSAGE}")
34 foreach(__file ${IPP_IW_LICENSE_FILES})
35 if(EXISTS "${__file}")
36 ocv_install_3rdparty_licenses(ippiw "${__file}")
42 file(TO_CMAKE_PATH "${IPPROOT}" IPPROOT)
44 # This function detects Intel IPP Integration Wrappers version by analyzing .h file
45 macro(ippiw_setup PATH BUILD)
46 set(FILE "${PATH}/include/iw/iw_version.h")
48 ippiw_debugmsg("Checking sources: ${PATH}")
50 ippiw_debugmsg("Checking binaries: ${PATH}")
53 ippiw_debugmsg("vfile\tfound")
54 file(STRINGS "${FILE}" IW_VERSION_MAJOR REGEX "IW_VERSION_MAJOR")
55 file(STRINGS "${FILE}" IW_VERSION_MINOR REGEX "IW_VERSION_MINOR")
56 file(STRINGS "${FILE}" IW_VERSION_UPDATE REGEX "IW_VERSION_UPDATE")
58 file(STRINGS "${FILE}" IW_MIN_COMPATIBLE_IPP_MAJOR REGEX "IW_MIN_COMPATIBLE_IPP_MAJOR")
59 file(STRINGS "${FILE}" IW_MIN_COMPATIBLE_IPP_MINOR REGEX "IW_MIN_COMPATIBLE_IPP_MINOR")
60 file(STRINGS "${FILE}" IW_MIN_COMPATIBLE_IPP_UPDATE REGEX "IW_MIN_COMPATIBLE_IPP_UPDATE")
62 string(REGEX MATCH "[0-9]+" IW_MIN_COMPATIBLE_IPP_MAJOR ${IW_MIN_COMPATIBLE_IPP_MAJOR})
63 string(REGEX MATCH "[0-9]+" IW_MIN_COMPATIBLE_IPP_MINOR ${IW_MIN_COMPATIBLE_IPP_MINOR})
64 string(REGEX MATCH "[0-9]+" IW_MIN_COMPATIBLE_IPP_UPDATE ${IW_MIN_COMPATIBLE_IPP_UPDATE})
66 string(REGEX MATCH "[0-9]+" IW_VERSION_MAJOR ${IW_VERSION_MAJOR})
67 string(REGEX MATCH "[0-9]+" IW_VERSION_MINOR ${IW_VERSION_MINOR})
68 string(REGEX MATCH "[0-9]+" IW_VERSION_UPDATE ${IW_VERSION_UPDATE})
70 math(EXPR IPP_VERSION_EXP "${IPP_VERSION_MAJOR}*10000 + ${IPP_VERSION_MINOR}*100 + ${IPP_VERSION_BUILD}")
71 math(EXPR IW_MIN_COMPATIBLE_IPP_EXP "${IW_MIN_COMPATIBLE_IPP_MAJOR}*10000 + ${IW_MIN_COMPATIBLE_IPP_MINOR}*100 + ${IW_MIN_COMPATIBLE_IPP_UPDATE}")
73 if((IPP_VERSION_EXP GREATER IW_MIN_COMPATIBLE_IPP_EXP) OR (IPP_VERSION_EXP EQUAL IW_MIN_COMPATIBLE_IPP_EXP))
74 ippiw_debugmsg("vcheck\tpassed")
77 if(EXISTS "${PATH}/src/iw_core.c")
78 ippiw_debugmsg("sources\tyes")
79 set(IPP_IW_PATH "${PATH}")
80 message(STATUS "found Intel IPP Integration Wrappers sources: ${IW_VERSION_MAJOR}.${IW_VERSION_MINOR}.${IW_VERSION_UPDATE}")
81 message(STATUS "at: ${IPP_IW_PATH}")
83 set(IPP_IW_LIBRARY ippiw)
84 set(IPP_IW_INCLUDES "${IPP_IW_PATH}/include")
85 set(IPP_IW_LIBRARIES ${IPP_IW_LIBRARY})
86 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${OpenCV_SOURCE_DIR}/3rdparty/ippicv/CMakeLists.txt" "${IPP_IW_PATH}/")
87 add_subdirectory("${IPP_IW_PATH}/" ${OpenCV_BINARY_DIR}/3rdparty/ippiw)
90 set(FILE "${PATH}/include/iw/iw_ll.h") # check if Intel IPP Integration Wrappers is OpenCV specific
96 ippiw_debugmsg("sources\tno")
101 set(FILE "${PATH}/lib/intel64/${CMAKE_STATIC_LIBRARY_PREFIX}ipp_iw${CMAKE_STATIC_LIBRARY_SUFFIX}")
103 set(FILE "${PATH}/lib/ia32/${CMAKE_STATIC_LIBRARY_PREFIX}ipp_iw${CMAKE_STATIC_LIBRARY_SUFFIX}")
106 ippiw_debugmsg("binaries\tyes (64=${IPP_X64})")
107 set(IPP_IW_PATH "${PATH}")
108 message(STATUS "found Intel IPP Integration Wrappers binaries: ${IW_VERSION_MAJOR}.${IW_VERSION_MINOR}.${IW_VERSION_UPDATE}")
109 message(STATUS "at: ${IPP_IW_PATH}")
111 add_library(ippiw STATIC IMPORTED)
112 set_target_properties(ippiw PROPERTIES
113 IMPORTED_LINK_INTERFACE_LIBRARIES ""
114 IMPORTED_LOCATION "${FILE}"
116 if (NOT BUILD_SHARED_LIBS)
117 # CMake doesn't support "install(TARGETS ${name} ...)" command with imported targets
118 install(FILES "${FILE}"
119 DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
120 set(IPPIW_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_3P_LIB_INSTALL_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}ipp_iw${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE INTERNAL "" FORCE)
121 set(IPPIW_LOCATION_PATH "${FILE}" CACHE INTERNAL "" FORCE)
124 set(IPP_IW_INCLUDES "${IPP_IW_PATH}/include")
125 set(IPP_IW_LIBRARIES ippiw)
129 set(FILE "${PATH}/include/iw/iw_ll.h") # check if Intel IPP Integration Wrappers is OpenCV specific
131 set(HAVE_IPP_IW_LL 1)
135 ippiw_debugmsg("binaries\tno")
139 ippiw_debugmsg("vcheck\tfailed")
142 ippiw_debugmsg("vfile\tnot found")
145 set(HAVE_IPP_IW_LL 0)
148 # check build options first
151 if(DEFINED IPPIWROOT)
152 ippiw_setup("${IPPIWROOT}/" 1)
153 message(STATUS "Can't find Intel IPP Integration Wrappers sources at: ${IPPIWROOT}")
157 ippiw_setup("${OpenCV_SOURCE_DIR}/3rdparty/ippiw" 1)
159 set(IPPIW_ROOT "${IPPROOT}/../iw")
160 set(IPP_IW_LICENSE_FILES ${IPP_IW_LICENSE_FILES_EXTRA}
161 "${IPPIW_ROOT}/../support.txt"
162 "${IPPIW_ROOT}/../third-party-programs.txt"
163 "${IPPIW_ROOT}/../EULA.rtf"
164 "${IPPIW_ROOT}/../EULA.txt"
168 get_filename_component(__PATH "${IPPROOT}/../iw/" ABSOLUTE)
169 ippiw_setup("${__PATH}" 1)
171 # take Intel IPP Integration Wrappers from ICV package
173 message(STATUS "Cannot find Intel IPP Integration Wrappers. Checking \"Intel IPP for OpenCV\" package")
175 include("${OpenCV_SOURCE_DIR}/3rdparty/ippicv/ippicv.cmake")
176 download_ippicv(TEMP_ROOT)
177 set(IPPIW_ROOT "${TEMP_ROOT}/iw/")
178 set(IPP_IW_LICENSE_FILES ${IPP_IW_LICENSE_FILES_EXTRA}
179 "${IPPIW_ROOT}/../EULA.txt"
180 "${IPPIW_ROOT}/../support.txt"
181 "${IPPIW_ROOT}/../third-party-programs.txt"
184 ippiw_setup("${IPPIW_ROOT}" 1)
190 if(DEFINED IPPIWROOT)
191 ippiw_setup("${IPPIWROOT}/" 0)
192 message(STATUS "Can't find Intel IPP Integration Wrappers binaries at: ${IPPIWROOT}")
195 # check binaries in IPP folder
196 ippiw_setup("${IPPROOT}/" 0)
198 # check binaries near IPP folder
199 ippiw_setup("${IPPROOT}/../iw/" 0)
203 set(HAVE_IPP_IW_LL 0)
204 message(STATUS "Cannot find Intel IPP Integration Wrappers, optimizations will be limited. Use IPPIWROOT to set custom location")