Commit a703b9ed authored by Alexander Alekhin's avatar Alexander Alekhin

Merge pull request #15101 from alalek:cmake_initialization

parents 26551f17 5ef548a9
...@@ -15,13 +15,6 @@ else() ...@@ -15,13 +15,6 @@ else()
ocv_list_filterout(lib_srcs jmemnobs.c) ocv_list_filterout(lib_srcs jmemnobs.c)
endif() endif()
if(WINRT)
add_definitions(-DNO_GETENV)
get_directory_property( DirDefs COMPILE_DEFINITIONS )
message(STATUS "Adding NO_GETENV to compiler definitions for WINRT:")
message(STATUS " COMPILE_DEFINITIONS = ${DirDefs}")
endif()
# ---------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------
# Define the library target: # Define the library target:
# ---------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------
......
...@@ -29,40 +29,19 @@ else() ...@@ -29,40 +29,19 @@ else()
cmake_minimum_required(VERSION "${MIN_VER_CMAKE}" FATAL_ERROR) cmake_minimum_required(VERSION "${MIN_VER_CMAKE}" FATAL_ERROR)
endif() endif()
option(ENABLE_PIC "Generate position independent code (necessary for shared libraries)" TRUE) #
set(CMAKE_POSITION_INDEPENDENT_CODE ${ENABLE_PIC}) # Configure CMake policies
#
set(OPENCV_MATHJAX_RELPATH "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0" CACHE STRING "URI to a MathJax installation")
# Following block can break build in case of cross-compiling
# but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command
# so we will try to detect cross-compiling by the presence of CMAKE_TOOLCHAIN_FILE
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
if(NOT CMAKE_TOOLCHAIN_FILE)
# it _must_ go before project(OpenCV) in order to work
if(WIN32)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
else()
set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory")
endif()
else()
#Android: set output folder to ${CMAKE_BINARY_DIR}
set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "root for library output, set this to change where android libs are compiled to" )
# any cross-compiling
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
endif()
endif()
if(POLICY CMP0026) if(POLICY CMP0026)
cmake_policy(SET CMP0026 NEW) cmake_policy(SET CMP0026 NEW)
endif() endif()
if(POLICY CMP0042) if(POLICY CMP0042)
cmake_policy(SET CMP0042 NEW) cmake_policy(SET CMP0042 NEW) # CMake 3.0+ (2.8.12): MacOS "@rpath" in target's install name
endif() endif()
if(POLICY CMP0046) if(POLICY CMP0046)
cmake_policy(SET CMP0046 NEW) cmake_policy(SET CMP0046 NEW) # warn about non-existed dependencies
endif() endif()
if(POLICY CMP0051) if(POLICY CMP0051)
...@@ -74,17 +53,21 @@ if(POLICY CMP0054) # CMake 3.1: Only interpret if() arguments as variables or k ...@@ -74,17 +53,21 @@ if(POLICY CMP0054) # CMake 3.1: Only interpret if() arguments as variables or k
endif() endif()
if(POLICY CMP0056) if(POLICY CMP0056)
cmake_policy(SET CMP0056 NEW) cmake_policy(SET CMP0056 NEW) # try_compile(): link flags
endif() endif()
if(POLICY CMP0067) if(POLICY CMP0067)
cmake_policy(SET CMP0067 NEW) cmake_policy(SET CMP0067 NEW) # CMake 3.8: try_compile(): honor language standard variables (like C++11)
endif() endif()
if(POLICY CMP0068) if(POLICY CMP0068)
cmake_policy(SET CMP0068 NEW) # CMake 3.9+: `RPATH` settings on macOS do not affect `install_name`. cmake_policy(SET CMP0068 NEW) # CMake 3.9+: `RPATH` settings on macOS do not affect `install_name`.
endif() endif()
#
# Configure OpenCV CMake hooks
#
include(cmake/OpenCVUtils.cmake) include(cmake/OpenCVUtils.cmake)
ocv_cmake_reset_hooks() ocv_cmake_reset_hooks()
ocv_check_environment_variables(OPENCV_CMAKE_HOOKS_DIR) ocv_check_environment_variables(OPENCV_CMAKE_HOOKS_DIR)
...@@ -97,49 +80,46 @@ endif() ...@@ -97,49 +80,46 @@ endif()
ocv_cmake_hook(CMAKE_INIT) ocv_cmake_hook(CMAKE_INIT)
# must go before the project command # must go before the project()/enable_language() commands
ocv_update(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE) ocv_update(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
if(DEFINED CMAKE_BUILD_TYPE) if(DEFINED CMAKE_BUILD_TYPE)
set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} ) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${CMAKE_CONFIGURATION_TYPES}")
endif() endif()
enable_testing() option(ENABLE_PIC "Generate position independent code (necessary for shared libraries)" TRUE)
set(CMAKE_POSITION_INDEPENDENT_CODE ${ENABLE_PIC})
project(OpenCV CXX C)
if(CMAKE_SYSTEM_NAME MATCHES WindowsPhone OR CMAKE_SYSTEM_NAME MATCHES WindowsStore) ocv_cmake_hook(PRE_CMAKE_BOOTSTRAP)
set(WINRT TRUE)
endif()
if(WINRT OR WINCE) # Bootstap CMake system: setup CMAKE_SYSTEM_NAME and other vars
add_definitions(-DNO_GETENV) enable_language(CXX C)
endif()
if(WINRT) ocv_cmake_hook(POST_CMAKE_BOOTSTRAP)
add_definitions(-DWINRT)
# Making definitions available to other configurations and if(NOT OPENCV_SKIP_CMAKE_SYSTEM_FILE)
# to filter dependency restrictions at compile time. include("cmake/platforms/OpenCV-${CMAKE_SYSTEM_NAME}.cmake" OPTIONAL RESULT_VARIABLE "OPENCV_CMAKE_SYSTEM_FILE")
if(CMAKE_SYSTEM_NAME MATCHES WindowsPhone) if(NOT OPENCV_CMAKE_SYSTEM_FILE)
set(WINRT_PHONE TRUE) message(STATUS "OpenCV: system-specific configuration file is not found: '${CMAKE_SYSTEM_NAME}'")
add_definitions(-DWINRT_PHONE)
elseif(CMAKE_SYSTEM_NAME MATCHES WindowsStore)
set(WINRT_STORE TRUE)
add_definitions(-DWINRT_STORE)
endif() endif()
endif()
if(CMAKE_SYSTEM_VERSION MATCHES 10) if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) # https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT.html
set(WINRT_10 TRUE) if(NOT CMAKE_TOOLCHAIN_FILE)
add_definitions(-DWINRT_10) if(WIN32)
elseif(CMAKE_SYSTEM_VERSION MATCHES 8.1) set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory" FORCE)
set(WINRT_8_1 TRUE) else()
add_definitions(-DWINRT_8_1) set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory" FORCE)
elseif(CMAKE_SYSTEM_VERSION MATCHES 8.0) endif()
set(WINRT_8_0 TRUE) else()
add_definitions(-DWINRT_8_0) # any cross-compiling
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory" FORCE)
endif() endif()
endif() endif()
enable_testing()
project(OpenCV CXX C)
if(MSVC) if(MSVC)
set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE) set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
endif() endif()
...@@ -511,6 +491,7 @@ if(ENABLE_IMPL_COLLECTION) ...@@ -511,6 +491,7 @@ if(ENABLE_IMPL_COLLECTION)
add_definitions(-DCV_COLLECT_IMPL_DATA) add_definitions(-DCV_COLLECT_IMPL_DATA)
endif() endif()
set(OPENCV_MATHJAX_RELPATH "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0" CACHE STRING "URI to a MathJax installation")
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# Get actual OpenCV version number from sources # Get actual OpenCV version number from sources
...@@ -665,12 +646,12 @@ endif() ...@@ -665,12 +646,12 @@ endif()
if(WIN32) if(WIN32)
# Postfix of DLLs: # Postfix of DLLs:
set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}") ocv_update(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
set(OPENCV_DEBUG_POSTFIX d) ocv_update(OPENCV_DEBUG_POSTFIX d)
else() else()
# Postfix of so's: # Postfix of so's:
set(OPENCV_DLLVERSION "") ocv_update(OPENCV_DLLVERSION "")
set(OPENCV_DEBUG_POSTFIX "") ocv_update(OPENCV_DEBUG_POSTFIX "")
endif() endif()
if(DEFINED CMAKE_DEBUG_POSTFIX) if(DEFINED CMAKE_DEBUG_POSTFIX)
......
...@@ -4,16 +4,6 @@ if(NOT MSVC) ...@@ -4,16 +4,6 @@ if(NOT MSVC)
message(FATAL_ERROR "CRT options are available only for MSVC") message(FATAL_ERROR "CRT options are available only for MSVC")
endif() endif()
if (WINRT)
if (CMAKE_SYSTEM_VERSION MATCHES 10)
add_definitions(/DWINVER=_WIN32_WINNT_WIN10 /DNTDDI_VERSION=NTDDI_WIN10 /D_WIN32_WINNT=_WIN32_WINNT_WIN10)
elseif(CMAKE_SYSTEM_VERSION MATCHES 8.1)
add_definitions(/DWINVER=_WIN32_WINNT_WINBLUE /DNTDDI_VERSION=NTDDI_WINBLUE /D_WIN32_WINNT=_WIN32_WINNT_WINBLUE)
else()
add_definitions(/DWINVER=_WIN32_WINNT_WIN8 /DNTDDI_VERSION=NTDDI_WIN8 /D_WIN32_WINNT=_WIN32_WINNT_WIN8)
endif()
endif()
# Removing LNK4075 warnings for debug WinRT builds # Removing LNK4075 warnings for debug WinRT builds
# "LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification" # "LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification"
# "LNK4075: ignoring '/INCREMENTAL' due to '/OPT:REF' specification" # "LNK4075: ignoring '/INCREMENTAL' due to '/OPT:REF' specification"
......
...@@ -283,11 +283,6 @@ if(MSVC) ...@@ -283,11 +283,6 @@ if(MSVC)
endif() endif()
endif() endif()
# Adding additional using directory for WindowsPhone 8.0 to get Windows.winmd properly
if(WINRT_PHONE AND WINRT_8_0)
set(OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} /AI\$(WindowsSDK_MetadataPath)")
endif()
include(cmake/OpenCVCompilerOptimizations.cmake) include(cmake/OpenCVCompilerOptimizations.cmake)
if(COMMAND ocv_compiler_optimization_options) if(COMMAND ocv_compiler_optimization_options)
ocv_compiler_optimization_options() ocv_compiler_optimization_options()
......
set(MIN_VER_CMAKE 2.8.12.2) if(NOT DEFINED MIN_VER_CMAKE)
set(MIN_VER_CMAKE 2.8.12.2)
endif()
set(MIN_VER_CUDA 6.5) set(MIN_VER_CUDA 6.5)
set(MIN_VER_PYTHON2 2.7) set(MIN_VER_PYTHON2 2.7)
set(MIN_VER_PYTHON3 3.2) set(MIN_VER_PYTHON3 3.2)
......
...@@ -1193,10 +1193,6 @@ endfunction() ...@@ -1193,10 +1193,6 @@ endfunction()
function(ocv_add_accuracy_tests) function(ocv_add_accuracy_tests)
ocv_debug_message("ocv_add_accuracy_tests(" ${ARGN} ")") ocv_debug_message("ocv_add_accuracy_tests(" ${ARGN} ")")
if(WINRT)
set(OPENCV_DEBUG_POSTFIX "")
endif()
set(test_path "${CMAKE_CURRENT_LIST_DIR}/test") set(test_path "${CMAKE_CURRENT_LIST_DIR}/test")
if(BUILD_TESTS AND EXISTS "${test_path}") if(BUILD_TESTS AND EXISTS "${test_path}")
__ocv_parse_test_sources(TEST ${ARGN}) __ocv_parse_test_sources(TEST ${ARGN})
......
...@@ -16,7 +16,8 @@ function(ocv_cmake_dump_vars) ...@@ -16,7 +16,8 @@ function(ocv_cmake_dump_vars)
string(TOLOWER "${__variableName}" __variableName_lower) string(TOLOWER "${__variableName}" __variableName_lower)
if((__variableName MATCHES "${regex}" OR __variableName_lower MATCHES "${regex_lower}") if((__variableName MATCHES "${regex}" OR __variableName_lower MATCHES "${regex_lower}")
AND NOT __variableName_lower MATCHES "^__") AND NOT __variableName_lower MATCHES "^__")
set(__VARS "${__VARS}${__variableName}=${${__variableName}}\n") get_property(__value VARIABLE PROPERTY "${__variableName}")
set(__VARS "${__VARS}${__variableName}=${__value}\n")
endif() endif()
endforeach() endforeach()
if(DUMP_TOFILE) if(DUMP_TOFILE)
......
set(WINRT TRUE)
add_definitions(-DWINRT -DNO_GETENV)
# Making definitions available to other configurations and
# to filter dependency restrictions at compile time.
if(WINDOWS_PHONE)
set(WINRT_PHONE TRUE)
add_definitions(-DWINRT_PHONE)
elseif(WINDOWS_STORE)
set(WINRT_STORE TRUE)
add_definitions(-DWINRT_STORE)
endif()
if(CMAKE_SYSTEM_VERSION MATCHES 10)
set(WINRT_10 TRUE)
add_definitions(-DWINRT_10)
add_definitions(/DWINVER=_WIN32_WINNT_WIN10 /DNTDDI_VERSION=NTDDI_WIN10 /D_WIN32_WINNT=_WIN32_WINNT_WIN10)
elseif(CMAKE_SYSTEM_VERSION MATCHES 8.1)
set(WINRT_8_1 TRUE)
add_definitions(-DWINRT_8_1)
add_definitions(/DWINVER=_WIN32_WINNT_WINBLUE /DNTDDI_VERSION=NTDDI_WINBLUE /D_WIN32_WINNT=_WIN32_WINNT_WINBLUE)
elseif(CMAKE_SYSTEM_VERSION MATCHES 8.0)
set(WINRT_8_0 TRUE)
add_definitions(-DWINRT_8_0)
add_definitions(/DWINVER=_WIN32_WINNT_WIN8 /DNTDDI_VERSION=NTDDI_WIN8 /D_WIN32_WINNT=_WIN32_WINNT_WIN8)
else()
message(STATUS "Unsupported WINRT version (consider upgrading OpenCV): ${CMAKE_SYSTEM_VERSION}")
endif()
set(OPENCV_DEBUG_POSTFIX "")
add_definitions(-DNO_GETENV)
include("${CMAKE_CURRENT_LIST_DIR}/OpenCV_WinRT.cmake")
# Adding additional using directory for WindowsPhone 8.0 to get Windows.winmd properly
if(WINRT_8_0)
set(OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} /AI\$(WindowsSDK_MetadataPath)")
endif()
include("${CMAKE_CURRENT_LIST_DIR}/OpenCV_WinRT.cmake")
...@@ -23,7 +23,7 @@ ocv_add_module(core ...@@ -23,7 +23,7 @@ ocv_add_module(core
set(extra_libs "") set(extra_libs "")
if(WINRT AND CMAKE_SYSTEM_NAME MATCHES WindowsStore AND CMAKE_SYSTEM_VERSION MATCHES "8.0") if(WINRT AND WINDOWS_STORE AND CMAKE_SYSTEM_VERSION MATCHES "8.0")
list(APPEND extra_libs ole32.lib) list(APPEND extra_libs ole32.lib)
endif() endif()
......
...@@ -1554,6 +1554,9 @@ if( ANDROID_EXPLICIT_CRT_LINK ) ...@@ -1554,6 +1554,9 @@ if( ANDROID_EXPLICIT_CRT_LINK )
endif() endif()
# setup output directories # setup output directories
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 1)
endif()
set( CMAKE_INSTALL_PREFIX "${ANDROID_TOOLCHAIN_ROOT}/user" CACHE STRING "path for installing" ) set( CMAKE_INSTALL_PREFIX "${ANDROID_TOOLCHAIN_ROOT}/user" CACHE STRING "path for installing" )
if( DEFINED LIBRARY_OUTPUT_PATH_ROOT if( DEFINED LIBRARY_OUTPUT_PATH_ROOT
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment