Merge pull request #3103 from vpisarev:core_imgproc_optim_rearrangements
[profile/ivi/opencv.git] / cmake / OpenCVCRTLinkage.cmake
1 if(NOT MSVC)
2   message(FATAL_ERROR "CRT options are available only for MSVC")
3 endif()
4
5 #INCLUDE (CheckIncludeFiles)
6
7 set(HAVE_WINRT FALSE)
8
9 # search Windows Platform SDK
10 message(STATUS "Checking for Windows Platform SDK")
11 GET_FILENAME_COMPONENT(WINDOWS_SDK_PATH  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v8.0;InstallationFolder]" ABSOLUTE CACHE)
12 if(WINDOWS_SDK_PATH STREQUAL "")
13   set(HAVE_MSPDK FALSE)
14   message(STATUS "Windows Platform SDK 8.0 was not found")
15 else()
16   set(HAVE_MSPDK TRUE)
17 endif()
18
19 #search for Visual Studio 11.0 install directory
20 message(STATUS "Checking for Visual Studio 2012")
21 GET_FILENAME_COMPONENT(VISUAL_STUDIO_PATH [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;ProductDir] REALPATH CACHE)
22 if(VISUAL_STUDIO_PATH STREQUAL "")
23   set(HAVE_MSVC2012 FALSE)
24   message(STATUS "Visual Studio 2012 was not found")
25 else()
26   set(HAVE_MSVC2012 TRUE)
27 endif()
28
29 try_compile(HAVE_WINRT_SDK
30   "${OpenCV_BINARY_DIR}"
31   "${OpenCV_SOURCE_DIR}/cmake/checks/winrttest.cpp")
32
33 if(ENABLE_WINRT_MODE AND HAVE_WINRT_SDK AND HAVE_MSVC2012 AND HAVE_MSPDK)
34   set(HAVE_WINRT TRUE)
35   set(HAVE_WINRT_CX TRUE)
36 elseif(ENABLE_WINRT_MODE_NATIVE AND HAVE_WINRT_SDK AND HAVE_MSVC2012 AND HAVE_MSPDK)
37   set(HAVE_WINRT TRUE)
38   set(HAVE_WINRT_CX FALSE)
39 endif()
40
41 if(HAVE_WINRT)
42   add_definitions(/DWINVER=0x0602 /DNTDDI_VERSION=NTDDI_WIN8 /D_WIN32_WINNT=0x0602)
43   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /appcontainer")
44   set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /appcontainer")
45   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /appcontainer")
46 endif()
47
48 if(NOT BUILD_SHARED_LIBS AND BUILD_WITH_STATIC_CRT)
49   foreach(flag_var
50           CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
51           CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
52           CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
53           CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
54     if(${flag_var} MATCHES "/MD")
55       string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
56     endif()
57     if(${flag_var} MATCHES "/MDd")
58       string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
59     endif()
60   endforeach(flag_var)
61
62   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib")
63   set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libcmt.lib")
64   set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libcmtd.lib")
65 else()
66   foreach(flag_var
67           CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
68           CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
69           CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
70           CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
71     if(${flag_var} MATCHES "/MT")
72       string(REGEX REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}")
73     endif()
74     if(${flag_var} MATCHES "/MTd")
75       string(REGEX REPLACE "/MTd" "/MDd" ${flag_var} "${${flag_var}}")
76     endif()
77   endforeach(flag_var)
78 endif()
79
80 if(NOT ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.8 AND NOT ${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} LESS 8.6)
81   include(ProcessorCount)
82   ProcessorCount(N)
83   if(NOT N EQUAL 0)
84     SET(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   /MP${N} ")
85     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP${N} ")
86   endif()
87 endif()
88
89 if(NOT BUILD_WITH_DEBUG_INFO AND NOT MSVC)
90   string(REPLACE "/debug" "" CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
91   string(REPLACE "/DEBUG" "" CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
92   string(REPLACE "/INCREMENTAL:YES" "/INCREMENTAL:NO" CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
93   string(REPLACE "/INCREMENTAL " "/INCREMENTAL:NO " CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
94
95   string(REPLACE "/debug" "" CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}")
96   string(REPLACE "/DEBUG" "" CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}")
97   string(REPLACE "/INCREMENTAL:YES" "/INCREMENTAL:NO" CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}")
98   string(REPLACE "/INCREMENTAL " "/INCREMENTAL:NO " CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}")
99
100   string(REPLACE "/debug" "" CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
101   string(REPLACE "/DEBUG" "" CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
102   string(REPLACE "/INCREMENTAL:YES" "/INCREMENTAL:NO" CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
103   string(REPLACE "/INCREMENTAL " "/INCREMENTAL:NO " CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
104
105   string(REPLACE "/Zi" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
106   string(REPLACE "/Zi" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
107 endif()