Skip to content

Commit

Permalink
cmake: update initialization
Browse files Browse the repository at this point in the history
  • Loading branch information
alalek committed Aug 8, 2019
1 parent 32da070 commit 5ef548a
Show file tree
Hide file tree
Showing 18 changed files with 96 additions and 91 deletions.
7 changes: 0 additions & 7 deletions 3rdparty/libjpeg/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,6 @@ else()
ocv_list_filterout(lib_srcs jmemnobs.c)
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:
# ----------------------------------------------------------------------------------
Expand Down
105 changes: 43 additions & 62 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,40 +29,19 @@ else()
cmake_minimum_required(VERSION "${MIN_VER_CMAKE}" FATAL_ERROR)
endif()

option(ENABLE_PIC "Generate position independent code (necessary for shared libraries)" TRUE)
set(CMAKE_POSITION_INDEPENDENT_CODE ${ENABLE_PIC})

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()

#
# Configure CMake policies
#
if(POLICY CMP0026)
cmake_policy(SET CMP0026 NEW)
endif()

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()

if(POLICY CMP0046)
cmake_policy(SET CMP0046 NEW)
cmake_policy(SET CMP0046 NEW) # warn about non-existed dependencies
endif()

if(POLICY CMP0051)
Expand All @@ -74,17 +53,21 @@ if(POLICY CMP0054) # CMake 3.1: Only interpret if() arguments as variables or k
endif()

if(POLICY CMP0056)
cmake_policy(SET CMP0056 NEW)
cmake_policy(SET CMP0056 NEW) # try_compile(): link flags
endif()

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()

if(POLICY CMP0068)
cmake_policy(SET CMP0068 NEW) # CMake 3.9+: `RPATH` settings on macOS do not affect `install_name`.
endif()


#
# Configure OpenCV CMake hooks
#
include(cmake/OpenCVUtils.cmake)
ocv_cmake_reset_hooks()
ocv_check_environment_variables(OPENCV_CMAKE_HOOKS_DIR)
Expand All @@ -97,49 +80,46 @@ endif()

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)
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()

enable_testing()

project(OpenCV CXX C)
option(ENABLE_PIC "Generate position independent code (necessary for shared libraries)" TRUE)
set(CMAKE_POSITION_INDEPENDENT_CODE ${ENABLE_PIC})

if(CMAKE_SYSTEM_NAME MATCHES WindowsPhone OR CMAKE_SYSTEM_NAME MATCHES WindowsStore)
set(WINRT TRUE)
endif()
ocv_cmake_hook(PRE_CMAKE_BOOTSTRAP)

if(WINRT OR WINCE)
add_definitions(-DNO_GETENV)
endif()
# Bootstap CMake system: setup CMAKE_SYSTEM_NAME and other vars
enable_language(CXX C)

if(WINRT)
add_definitions(-DWINRT)
ocv_cmake_hook(POST_CMAKE_BOOTSTRAP)

# Making definitions available to other configurations and
# to filter dependency restrictions at compile time.
if(CMAKE_SYSTEM_NAME MATCHES WindowsPhone)
set(WINRT_PHONE TRUE)
add_definitions(-DWINRT_PHONE)
elseif(CMAKE_SYSTEM_NAME MATCHES WindowsStore)
set(WINRT_STORE TRUE)
add_definitions(-DWINRT_STORE)
if(NOT OPENCV_SKIP_CMAKE_SYSTEM_FILE)
include("cmake/platforms/OpenCV-${CMAKE_SYSTEM_NAME}.cmake" OPTIONAL RESULT_VARIABLE "OPENCV_CMAKE_SYSTEM_FILE")
if(NOT OPENCV_CMAKE_SYSTEM_FILE)
message(STATUS "OpenCV: system-specific configuration file is not found: '${CMAKE_SYSTEM_NAME}'")
endif()
endif()

if(CMAKE_SYSTEM_VERSION MATCHES 10)
set(WINRT_10 TRUE)
add_definitions(-DWINRT_10)
elseif(CMAKE_SYSTEM_VERSION MATCHES 8.1)
set(WINRT_8_1 TRUE)
add_definitions(-DWINRT_8_1)
elseif(CMAKE_SYSTEM_VERSION MATCHES 8.0)
set(WINRT_8_0 TRUE)
add_definitions(-DWINRT_8_0)
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) # https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT.html
if(NOT CMAKE_TOOLCHAIN_FILE)
if(WIN32)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory" FORCE)
else()
set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory" FORCE)
endif()
else()
# any cross-compiling
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory" FORCE)
endif()
endif()

enable_testing()

project(OpenCV CXX C)

if(MSVC)
set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
endif()
Expand Down Expand Up @@ -511,6 +491,7 @@ if(ENABLE_IMPL_COLLECTION)
add_definitions(-DCV_COLLECT_IMPL_DATA)
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
Expand Down Expand Up @@ -665,12 +646,12 @@ endif()

if(WIN32)
# Postfix of DLLs:
set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
set(OPENCV_DEBUG_POSTFIX d)
ocv_update(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
ocv_update(OPENCV_DEBUG_POSTFIX d)
else()
# Postfix of so's:
set(OPENCV_DLLVERSION "")
set(OPENCV_DEBUG_POSTFIX "")
ocv_update(OPENCV_DLLVERSION "")
ocv_update(OPENCV_DEBUG_POSTFIX "")
endif()

if(DEFINED CMAKE_DEBUG_POSTFIX)
Expand Down
10 changes: 0 additions & 10 deletions cmake/OpenCVCRTLinkage.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,6 @@ if(NOT MSVC)
message(FATAL_ERROR "CRT options are available only for MSVC")
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
# "LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification"
# "LNK4075: ignoring '/INCREMENTAL' due to '/OPT:REF' specification"
Expand Down
5 changes: 0 additions & 5 deletions cmake/OpenCVCompilerOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -280,11 +280,6 @@ if(MSVC)
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)
if(COMMAND ocv_compiler_optimization_options)
ocv_compiler_optimization_options()
Expand Down
4 changes: 3 additions & 1 deletion cmake/OpenCVMinDepVersions.cmake
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
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_PYTHON2 2.7)
set(MIN_VER_PYTHON3 3.2)
Expand Down
4 changes: 0 additions & 4 deletions cmake/OpenCVModule.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -1193,10 +1193,6 @@ endfunction()
function(ocv_add_accuracy_tests)
ocv_debug_message("ocv_add_accuracy_tests(" ${ARGN} ")")

if(WINRT)
set(OPENCV_DEBUG_POSTFIX "")
endif()

set(test_path "${CMAKE_CURRENT_LIST_DIR}/test")
if(BUILD_TESTS AND EXISTS "${test_path}")
__ocv_parse_test_sources(TEST ${ARGN})
Expand Down
3 changes: 2 additions & 1 deletion cmake/OpenCVUtils.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ function(ocv_cmake_dump_vars)
string(TOLOWER "${__variableName}" __variableName_lower)
if((__variableName MATCHES "${regex}" OR __variableName_lower MATCHES "${regex_lower}")
AND NOT __variableName_lower MATCHES "^__")
set(__VARS "${__VARS}${__variableName}=${${__variableName}}\n")
get_property(__value VARIABLE PROPERTY "${__variableName}")
set(__VARS "${__VARS}${__variableName}=${__value}\n")
endif()
endforeach()
if(DUMP_TOFILE)
Expand Down
1 change: 1 addition & 0 deletions cmake/platforms/OpenCV-Android.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# empty
1 change: 1 addition & 0 deletions cmake/platforms/OpenCV-Darwin.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# empty
1 change: 1 addition & 0 deletions cmake/platforms/OpenCV-Linux.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# empty
31 changes: 31 additions & 0 deletions cmake/platforms/OpenCV-WinRT.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
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 "")
1 change: 1 addition & 0 deletions cmake/platforms/OpenCV-Windows.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# empty
1 change: 1 addition & 0 deletions cmake/platforms/OpenCV-WindowsCE.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
add_definitions(-DNO_GETENV)
6 changes: 6 additions & 0 deletions cmake/platforms/OpenCV-WindowsPhone.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
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()
1 change: 1 addition & 0 deletions cmake/platforms/OpenCV-WindowsStore.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
include("${CMAKE_CURRENT_LIST_DIR}/OpenCV_WinRT.cmake")
1 change: 1 addition & 0 deletions cmake/platforms/OpenCV-iOS.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# empty
2 changes: 1 addition & 1 deletion modules/core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ ocv_add_module(core

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)
endif()

Expand Down
3 changes: 3 additions & 0 deletions platforms/android/android.toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -1554,6 +1554,9 @@ if( ANDROID_EXPLICIT_CRT_LINK )
endif()

# 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" )

if( DEFINED LIBRARY_OUTPUT_PATH_ROOT
Expand Down

0 comments on commit 5ef548a

Please sign in to comment.