cmake_policy(SET CMP0056 NEW) # try_compile(): link flags
endif()
+if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW) # CMake 3.7: try_compile(): use per-config flags, like CMAKE_CXX_FLAGS_RELEASE
+endif()
+
if(POLICY CMP0067)
cmake_policy(SET CMP0067 NEW) # CMake 3.8: try_compile(): honor language standard variables (like C++11)
endif()
cmake_policy(SET CMP0075 NEW) # CMake 3.12+: Include file check macros honor `CMAKE_REQUIRED_LIBRARIES`
endif()
+if(POLICY CMP0077)
+ cmake_policy(SET CMP0077 NEW) # CMake 3.13+: option() honors normal variables.
+endif()
#
# Configure OpenCV CMake hooks
OCV_OPTION(WITH_INF_ENGINE "Include Intel Inference Engine support" OFF
VISIBLE_IF TRUE
VERIFY INF_ENGINE_TARGET)
+OCV_OPTION(WITH_NGRAPH "Include nGraph support" WITH_INF_ENGINE
+ VISIBLE_IF TRUE
+ VERIFY TARGET ngraph::ngraph)
OCV_OPTION(WITH_JASPER "Include JPEG2K support" ON
VISIBLE_IF NOT IOS
VERIFY HAVE_JASPER)
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 OR ANDROID) AND NOT IOS
+ VERIFY HAVE_TENGINE)
# OpenCV build components
# ===================================================
# OpenCV installation options
# ===================================================
OCV_OPTION(INSTALL_CREATE_DISTRIB "Change install rules to build the distribution package" OFF )
+OCV_OPTION(INSTALL_BIN_EXAMPLES "Install prebuilt examples" WIN32 IF BUILD_EXAMPLES)
OCV_OPTION(INSTALL_C_EXAMPLES "Install C examples" OFF )
OCV_OPTION(INSTALL_PYTHON_EXAMPLES "Install Python examples" OFF )
OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples" OFF IF ANDROID )
OCV_OPTION(CV_TRACE "Enable OpenCV code trace" ON)
OCV_OPTION(OPENCV_GENERATE_SETUPVARS "Generate setup_vars* scripts" ON IF (NOT ANDROID AND NOT APPLE_FRAMEWORK) )
OCV_OPTION(ENABLE_CONFIG_VERIFICATION "Fail build if actual configuration doesn't match requested (WITH_XXX != HAVE_XXX)" OFF)
+OCV_OPTION(OPENCV_ENABLE_MEMALIGN "Enable posix_memalign or memalign usage" ON)
OCV_OPTION(ENABLE_PYLINT "Add target with Pylint checks" (BUILD_DOCS OR BUILD_EXAMPLES) IF (NOT CMAKE_CROSSCOMPILING AND NOT APPLE_FRAMEWORK) )
OCV_OPTION(ENABLE_FLAKE8 "Add target with Python flake8 checker" (BUILD_DOCS OR BUILD_EXAMPLES) IF (NOT CMAKE_CROSSCOMPILING AND NOT APPLE_FRAMEWORK) )
# Build & install layouts
# ----------------------------------------------------------------------------
-# Save libs and executables in the same place
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications")
-
-if(ANDROID)
- if(ANDROID_ABI MATCHES "NEON")
- set(ENABLE_NEON ON)
- endif()
- if(ANDROID_ABI MATCHES "VFPV3")
- set(ENABLE_VFPV3 ON)
- endif()
-endif()
-
-if(ANDROID OR WIN32)
- ocv_update(OPENCV_DOC_INSTALL_PATH doc)
-else()
- ocv_update(OPENCV_DOC_INSTALL_PATH share/OpenCV/doc)
-endif()
-
-if(WIN32 AND CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
- if(DEFINED OpenCV_RUNTIME AND DEFINED OpenCV_ARCH)
- ocv_update(OpenCV_INSTALL_BINARIES_PREFIX "${OpenCV_ARCH}/${OpenCV_RUNTIME}/")
- else()
- message(STATUS "Can't detect runtime and/or arch")
- ocv_update(OpenCV_INSTALL_BINARIES_PREFIX "")
- endif()
-elseif(ANDROID)
- ocv_update(OpenCV_INSTALL_BINARIES_PREFIX "sdk/native/")
-else()
- ocv_update(OpenCV_INSTALL_BINARIES_PREFIX "")
-endif()
-
-if(ANDROID)
- ocv_update(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples/${ANDROID_NDK_ABI_NAME}")
-else()
- ocv_update(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples")
-endif()
-
-if(ANDROID)
- ocv_update(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin/${ANDROID_NDK_ABI_NAME}")
-else()
- ocv_update(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin")
-endif()
-
-if(NOT OPENCV_TEST_INSTALL_PATH)
- ocv_update(OPENCV_TEST_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}")
-endif()
-
-if (OPENCV_TEST_DATA_PATH)
+if(OPENCV_TEST_DATA_PATH)
get_filename_component(OPENCV_TEST_DATA_PATH ${OPENCV_TEST_DATA_PATH} ABSOLUTE)
endif()
-if(ANDROID)
- ocv_update(OPENCV_TEST_DATA_INSTALL_PATH "sdk/etc/testdata")
-elseif(WIN32)
- ocv_update(OPENCV_TEST_DATA_INSTALL_PATH "testdata")
-else()
- ocv_update(OPENCV_TEST_DATA_INSTALL_PATH "share/OpenCV/testdata")
-endif()
+# Save libs and executables in the same place
+set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications")
if(ANDROID)
set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}")
ocv_update(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}")
- ocv_update(OPENCV_LIB_INSTALL_PATH sdk/native/libs/${ANDROID_NDK_ABI_NAME})
- ocv_update(OPENCV_LIB_ARCHIVE_INSTALL_PATH sdk/native/staticlibs/${ANDROID_NDK_ABI_NAME})
- ocv_update(OPENCV_3P_LIB_INSTALL_PATH sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME})
- ocv_update(OPENCV_CONFIG_INSTALL_PATH sdk/native/jni)
- ocv_update(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include)
- ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH samples/native)
- ocv_update(OPENCV_OTHER_INSTALL_PATH sdk/etc)
- ocv_update(OPENCV_LICENSES_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/licenses")
else()
set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib")
- ocv_update(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
-
- if(WIN32 AND CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
- if(OpenCV_STATIC)
- ocv_update(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
- else()
- ocv_update(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}lib${LIB_SUFFIX}")
- endif()
- ocv_update(OPENCV_3P_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
- ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH samples)
- ocv_update(OPENCV_JAR_INSTALL_PATH java)
- ocv_update(OPENCV_OTHER_INSTALL_PATH etc)
- ocv_update(OPENCV_CONFIG_INSTALL_PATH ".")
- ocv_update(OPENCV_LICENSES_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/licenses")
- else()
- include(GNUInstallDirs)
- ocv_update(OPENCV_LIB_INSTALL_PATH ${CMAKE_INSTALL_LIBDIR})
- ocv_update(OPENCV_3P_LIB_INSTALL_PATH share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH})
- ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH share/OpenCV/samples)
- ocv_update(OPENCV_JAR_INSTALL_PATH share/OpenCV/java)
- ocv_update(OPENCV_OTHER_INSTALL_PATH share/OpenCV)
- ocv_update(OPENCV_LICENSES_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/licenses/opencv3")
-
- if(NOT DEFINED OPENCV_CONFIG_INSTALL_PATH)
- math(EXPR SIZEOF_VOID_P_BITS "8 * ${CMAKE_SIZEOF_VOID_P}")
- if(LIB_SUFFIX AND NOT SIZEOF_VOID_P_BITS EQUAL LIB_SUFFIX)
- ocv_update(OPENCV_CONFIG_INSTALL_PATH ${CMAKE_INSTALL_LIBDIR}/cmake/opencv)
- else()
- ocv_update(OPENCV_CONFIG_INSTALL_PATH share/OpenCV)
- endif()
- endif()
- endif()
- ocv_update(OPENCV_INCLUDE_INSTALL_PATH "include")
- #ocv_update(OPENCV_PYTHON_INSTALL_PATH "python") # no default value, see https://github.com/opencv/opencv/issues/13202
-endif()
-
-ocv_update(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
-set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
-
-if(INSTALL_TO_MANGLED_PATHS)
- set(OPENCV_INCLUDE_INSTALL_PATH ${OPENCV_INCLUDE_INSTALL_PATH}/opencv-${OPENCV_VERSION})
- foreach(v
- OPENCV_3P_LIB_INSTALL_PATH
- OPENCV_SAMPLES_SRC_INSTALL_PATH
- OPENCV_CONFIG_INSTALL_PATH
- OPENCV_DOC_INSTALL_PATH
- OPENCV_JAR_INSTALL_PATH
- OPENCV_TEST_DATA_INSTALL_PATH
- OPENCV_OTHER_INSTALL_PATH
- )
- string(REPLACE "OpenCV" "OpenCV-${OPENCV_VERSION}" ${v} "${${v}}")
- string(REPLACE "opencv" "opencv-${OPENCV_VERSION}" ${v} "${${v}}")
- endforeach()
+ ocv_update(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib")
endif()
if(ANDROID)
- ocv_update(OPENCV_JNI_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}")
-elseif(INSTALL_CREATE_DISTRIB)
- ocv_update(OPENCV_JNI_INSTALL_PATH "${OPENCV_JAR_INSTALL_PATH}/${OpenCV_ARCH}")
-else()
- ocv_update(OPENCV_JNI_INSTALL_PATH "${OPENCV_JAR_INSTALL_PATH}")
-endif()
-ocv_update(OPENCV_JNI_BIN_INSTALL_PATH "${OPENCV_JNI_INSTALL_PATH}")
-
-if(NOT OPENCV_LIB_ARCHIVE_INSTALL_PATH)
- set(OPENCV_LIB_ARCHIVE_INSTALL_PATH ${OPENCV_LIB_INSTALL_PATH})
+ if(ANDROID_ABI MATCHES "NEON")
+ set(ENABLE_NEON ON)
+ endif()
+ if(ANDROID_ABI MATCHES "VFPV3")
+ set(ENABLE_VFPV3 ON)
+ endif()
endif()
if(WIN32)
set(BUILD_opencv_world ON CACHE INTERNAL "")
endif()
+include(cmake/OpenCVInstallLayout.cmake)
+
# ----------------------------------------------------------------------------
# Path for build/platform -specific headers
# ----------------------------------------------------------------------------
set(HAVE_PTHREAD 1)
endif()
- CHECK_SYMBOL_EXISTS(posix_memalign stdlib.h HAVE_POSIX_MEMALIGN)
- CHECK_INCLUDE_FILE(malloc.h HAVE_MALLOC_H)
- if(HAVE_MALLOC_H)
- CHECK_SYMBOL_EXISTS(memalign malloc.h HAVE_MEMALIGN)
+ if(OPENCV_ENABLE_MEMALIGN)
+ CHECK_SYMBOL_EXISTS(posix_memalign stdlib.h HAVE_POSIX_MEMALIGN)
+ CHECK_INCLUDE_FILE(malloc.h HAVE_MALLOC_H)
+ if(HAVE_MALLOC_H)
+ CHECK_SYMBOL_EXISTS(memalign malloc.h HAVE_MEMALIGN)
+ endif()
+ # TODO:
+ # - _aligned_malloc() on Win32
+ # - std::aligned_alloc() C++17 / C11
endif()
endif()
include(cmake/OpenCVFindLibsPerf.cmake)
include(cmake/OpenCVFindLAPACK.cmake)
include(cmake/OpenCVFindProtobuf.cmake)
+if(WITH_TENGINE)
+ include(cmake/OpenCVFindTengine.cmake)
+endif()
# ----------------------------------------------------------------------------
# Detect other 3rd-party libraries/tools
foreach(hal ${OpenCV_HAL})
if(hal STREQUAL "carotene")
- add_subdirectory(3rdparty/carotene/hal)
- ocv_hal_register(CAROTENE_HAL_LIBRARIES CAROTENE_HAL_HEADERS CAROTENE_HAL_INCLUDE_DIRS)
- list(APPEND OpenCV_USED_HAL "carotene (ver ${CAROTENE_HAL_VERSION})")
+ if(";${CPU_BASELINE_FINAL};" MATCHES ";NEON;")
+ add_subdirectory(3rdparty/carotene/hal)
+ ocv_hal_register(CAROTENE_HAL_LIBRARIES CAROTENE_HAL_HEADERS CAROTENE_HAL_INCLUDE_DIRS)
+ list(APPEND OpenCV_USED_HAL "carotene (ver ${CAROTENE_HAL_VERSION})")
+ else()
+ message(STATUS "Carotene: NEON is not available, disabling carotene...")
+ endif()
elseif(hal STREQUAL "openvx")
add_subdirectory(3rdparty/openvx)
ocv_hal_register(OPENVX_HAL_LIBRARIES OPENVX_HAL_HEADERS OPENVX_HAL_INCLUDE_DIRS)
# for UNIX it does not make sense as LICENSE and readme will be part of the package automatically
if(ANDROID OR NOT UNIX)
install(FILES ${OPENCV_LICENSE_FILE}
- PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
+ PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
DESTINATION ./ COMPONENT libs)
if(OPENCV_README_FILE)
install(FILES ${OPENCV_README_FILE}
- PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
+ PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
DESTINATION ./ COMPONENT libs)
endif()
endif()
status(" Intel VA-API/OpenCL:" HAVE_VA_INTEL THEN "YES (OpenCL: ${VA_INTEL_IOCL_ROOT})" ELSE NO)
endif()
+if(WITH_TENGINE OR HAVE_TENGINE)
+ status(" Tengine:" HAVE_TENGINE THEN "YES (${TENGINE_LIBRARIES})" ELSE NO)
+endif()
+
if(WITH_LAPACK OR HAVE_LAPACK)
status(" Lapack:" HAVE_LAPACK THEN "YES (${LAPACK_LIBRARIES})" ELSE NO)
endif()
)
get_target_property(_inc ${ie_target} INTERFACE_INCLUDE_DIRECTORIES)
status(" Inference Engine:" "${__msg}")
- status(" libs:" "${_lib}")
- status(" includes:" "${_inc}")
+ status(" * libs:" "${_lib}")
+ status(" * includes:" "${_inc}")
else()
status(" Inference Engine:" "NO")
endif()
endif()
+if(WITH_NGRAPH OR HAVE_NGRAPH)
+ if(HAVE_NGRAPH)
+ set(__target ngraph::ngraph)
+ set(__msg "YES (${ngraph_VERSION})")
+ get_target_property(_lib ${__target} IMPORTED_LOCATION)
+ get_target_property(_lib_imp_rel ${__target} IMPORTED_IMPLIB_RELEASE)
+ get_target_property(_lib_imp_dbg ${__target} IMPORTED_IMPLIB_DEBUG)
+ get_target_property(_lib_rel ${__target} IMPORTED_LOCATION_RELEASE)
+ get_target_property(_lib_dbg ${__target} IMPORTED_LOCATION_DEBUG)
+ ocv_build_features_string(_lib
+ IF _lib THEN "${_lib}"
+ IF _lib_imp_rel AND _lib_imp_dbg THEN "${_lib_imp_rel} / ${_lib_imp_dbg}"
+ IF _lib_rel AND _lib_dbg THEN "${_lib_rel} / ${_lib_dbg}"
+ IF _lib_rel THEN "${_lib_rel}"
+ IF _lib_dbg THEN "${_lib_dbg}"
+ ELSE "unknown"
+ )
+ get_target_property(_inc ${__target} INTERFACE_INCLUDE_DIRECTORIES)
+ status(" nGraph:" "${__msg}")
+ status(" * libs:" "${_lib}")
+ status(" * includes:" "${_inc}")
+ else()
+ status(" nGraph:" "NO")
+ endif()
+endif()
if(WITH_EIGEN OR HAVE_EIGEN)
status(" Eigen:" HAVE_EIGEN THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO)
endif()
# ========================== java ==========================
-if(BUILD_JAVA OR BUILD_opencv_java)
+if(BUILD_JAVA)
status("")
status(" Java:" BUILD_FAT_JAVA_LIB THEN "export all functions" ELSE "")
status(" ant:" ANT_EXECUTABLE THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})" ELSE NO)
ocv_verify_config()
endif()
+if(HAVE_CUDA AND COMMAND CUDA_BUILD_CLEAN_TARGET)
+ CUDA_BUILD_CLEAN_TARGET()
+endif()
+
ocv_cmake_hook(POST_FINALIZE)
# ----------------------------------------------------------------------------