@@ -28,26 +28,6 @@ if((CMAKE_COMPILER_IS_CLANGCXX OR CMAKE_COMPILER_IS_CLANGCC OR CMAKE_COMPILER_IS
28
28
set (ENABLE_PRECOMPILED_HEADERS OFF CACHE BOOL "" FORCE)
29
29
endif ()
30
30
31
- if (MSVC )
32
- string (STRIP "${CMAKE_CXX_FLAGS} " CMAKE_CXX_FLAGS )
33
- string (STRIP "${CMAKE_CXX_FLAGS_INIT} " CMAKE_CXX_FLAGS_INIT)
34
- if (CMAKE_CXX_FLAGS STREQUAL CMAKE_CXX_FLAGS_INIT)
35
- # override cmake default exception handling option
36
- string (REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
37
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHa" )
38
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " CACHE STRING "Flags used by the compiler during all build types." FORCE)
39
- endif ()
40
- endif ()
41
-
42
- set (OPENCV_EXTRA_FLAGS "" )
43
- set (OPENCV_EXTRA_C_FLAGS "" )
44
- set (OPENCV_EXTRA_CXX_FLAGS "" )
45
- set (OPENCV_EXTRA_FLAGS_RELEASE "" )
46
- set (OPENCV_EXTRA_FLAGS_DEBUG "" )
47
- set (OPENCV_EXTRA_EXE_LINKER_FLAGS "" )
48
- set (OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "" )
49
- set (OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG "" )
50
-
51
31
macro (add_extra_compiler_option option)
52
32
ocv_check_flag_support(CXX "${option} " _varname "${OPENCV_EXTRA_CXX_FLAGS} ${ARGN} " )
53
33
if (${_varname} )
@@ -78,16 +58,9 @@ macro(add_env_definitions option)
78
58
add_definitions ("-D${option} =\" ${value} \" " )
79
59
endmacro ()
80
60
81
- # OpenCV fails some tests when 'char' is 'unsigned' by default
82
- add_extra_compiler_option(-fsigned-char)
83
-
84
- if (MINGW)
85
- # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40838
86
- # here we are trying to workaround the problem
87
- add_extra_compiler_option(-mstackrealign)
88
- if (NOT HAVE_CXX_MSTACKREALIGN)
89
- add_extra_compiler_option(-mpreferred-stack-boundary=2)
90
- endif ()
61
+ if (NOT MSVC )
62
+ # OpenCV fails some tests when 'char' is 'unsigned' by default
63
+ add_extra_compiler_option(-fsigned-char)
91
64
endif ()
92
65
93
66
if (CV_ICC AND NOT ENABLE_FAST_MATH)
@@ -152,10 +125,6 @@ if(CMAKE_COMPILER_IS_GNUCXX)
152
125
add_extra_compiler_option(-Werror)
153
126
endif ()
154
127
155
- if (X86 AND NOT MINGW64 AND NOT X86_64 AND NOT APPLE )
156
- add_extra_compiler_option(-march=i686)
157
- endif ()
158
-
159
128
if (APPLE )
160
129
add_extra_compiler_option(-Wno-semicolon-before-method-body)
161
130
endif ()
@@ -196,23 +165,30 @@ if(CMAKE_COMPILER_IS_GNUCXX)
196
165
endif ()
197
166
198
167
if (ENABLE_INSTRUMENTATION)
199
- set (OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} --std=c++11" )
168
+ if (NOT HAVE_CXX11)
169
+ message (WARNING "ENABLE_INSTRUMENTATION requires C++11 support" )
170
+ endif ()
200
171
set (WITH_VTK OFF ) # There are issues with VTK 6.0
201
172
endif ()
202
173
203
174
if (ENABLE_LTO)
204
175
add_extra_compiler_option(-flto)
205
176
endif ()
206
-
207
177
if (ENABLE_THIN_LTO)
208
178
add_extra_compiler_option(-flto=thin)
209
179
endif ()
210
180
211
181
set (OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE} -DNDEBUG" )
212
- if (NOT " ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "-O" )
182
+ if (NOT " ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} ${OPENCV_EXTRA_FLAGS_DEBUG} " MATCHES "-O" )
213
183
set (OPENCV_EXTRA_FLAGS_DEBUG "${OPENCV_EXTRA_FLAGS_DEBUG} -O0" )
214
184
endif ()
215
185
set (OPENCV_EXTRA_FLAGS_DEBUG "${OPENCV_EXTRA_FLAGS_DEBUG} -DDEBUG -D_DEBUG" )
186
+
187
+ if (BUILD_WITH_DEBUG_INFO)
188
+ if (NOT " ${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS} " MATCHES " -g" )
189
+ set (OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} -g" )
190
+ endif ()
191
+ endif ()
216
192
endif ()
217
193
218
194
if (MSVC )
@@ -221,11 +197,6 @@ if(MSVC)
221
197
set (OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS" )
222
198
#endif()
223
199
224
- # 64-bit portability warnings, in MSVC80
225
- if (MSVC80 )
226
- set (OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Wp64" )
227
- endif ()
228
-
229
200
if (BUILD_WITH_DEBUG_INFO)
230
201
set (OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE} /debug" )
231
202
endif ()
@@ -248,11 +219,10 @@ if(MSVC)
248
219
set (OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
249
220
endif ()
250
221
251
- endif ()
252
-
253
- if (MSVC12 AND NOT CMAKE_GENERATOR MATCHES "Visual Studio" )
254
- set (OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS} /FS" )
255
- set (OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} /FS" )
222
+ if (NOT MSVC_VERSION LESS 1800 AND NOT CMAKE_GENERATOR MATCHES "Visual Studio" )
223
+ set (OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS} /FS" )
224
+ set (OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} /FS" )
225
+ endif ()
256
226
endif ()
257
227
258
228
# Adding additional using directory for WindowsPhone 8.0 to get Windows.winmd properly
@@ -261,68 +231,55 @@ if(WINRT_PHONE AND WINRT_8_0)
261
231
endif ()
262
232
263
233
include (cmake/OpenCVCompilerOptimizations.cmake)
264
-
265
234
if (COMMAND ocv_compiler_optimization_options)
266
235
ocv_compiler_optimization_options()
267
236
endif ()
268
-
269
237
if (COMMAND ocv_compiler_optimization_options_finalize)
270
238
ocv_compiler_optimization_options_finalize()
271
239
endif ()
272
240
273
- # Add user supplied extra options (optimization, etc...)
274
- # ==========================================================
275
- set (OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} " CACHE INTERNAL "Extra compiler options" )
276
- set (OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS} " CACHE INTERNAL "Extra compiler options for C sources" )
277
- set (OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} " CACHE INTERNAL "Extra compiler options for C++ sources" )
278
- set (OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE} " CACHE INTERNAL "Extra compiler options for Release build" )
279
- set (OPENCV_EXTRA_FLAGS_DEBUG "${OPENCV_EXTRA_FLAGS_DEBUG} " CACHE INTERNAL "Extra compiler options for Debug build" )
280
- set (OPENCV_EXTRA_EXE_LINKER_FLAGS "${OPENCV_EXTRA_EXE_LINKER_FLAGS} " CACHE INTERNAL "Extra linker flags" )
281
- set (OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE} " CACHE INTERNAL "Extra linker flags for Release build" )
282
- set (OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG "${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG} " CACHE INTERNAL "Extra linker flags for Debug build" )
283
-
284
241
# set default visibility to hidden
285
242
if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
286
243
AND NOT OPENCV_SKIP_VISIBILITY_HIDDEN
287
- AND NOT CMAKE_CXX_FLAGS MATCHES "-fvisibility" )
244
+ AND NOT " ${ CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS} " MATCHES " -fvisibility" )
288
245
add_extra_compiler_option(-fvisibility=hidden)
289
246
add_extra_compiler_option(-fvisibility-inlines-hidden)
290
247
endif ()
291
248
292
- #combine all "extra" options
293
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_C_FLAGS} " )
294
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS} " )
295
- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OPENCV_EXTRA_FLAGS_RELEASE} " )
296
- set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${OPENCV_EXTRA_FLAGS_RELEASE} " )
297
- set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OPENCV_EXTRA_FLAGS_DEBUG} " )
298
- set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${OPENCV_EXTRA_FLAGS_DEBUG} " )
299
- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENCV_EXTRA_EXE_LINKER_FLAGS} " )
300
- set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE} " )
301
- set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG} " )
249
+ # combine all "extra" options
250
+ if (NOT OPENCV_SKIP_EXTRA_COMPILER_FLAGS)
251
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_C_FLAGS} " )
252
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS} " )
253
+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OPENCV_EXTRA_FLAGS_RELEASE} " )
254
+ set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${OPENCV_EXTRA_FLAGS_RELEASE} " )
255
+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OPENCV_EXTRA_FLAGS_DEBUG} " )
256
+ set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${OPENCV_EXTRA_FLAGS_DEBUG} " )
257
+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENCV_EXTRA_EXE_LINKER_FLAGS} " )
258
+ set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE} " )
259
+ set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG} " )
260
+ endif ()
302
261
303
262
if (MSVC )
304
- # avoid warnings from MSVC about overriding the /W* option
305
- # we replace /W3 with /W4 only for C++ files,
306
- # since all the 3rd-party libraries OpenCV uses are in C,
307
- # and we do not care about their warnings.
308
- string (REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
309
- string (REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} " )
310
- string (REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} " )
311
-
312
263
if (NOT ENABLE_NOISY_WARNINGS)
313
264
if (MSVC_VERSION EQUAL 1400)
314
265
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4510 /wd4610 /wd4312 /wd4201 /wd4244 /wd4328 /wd4267)
315
266
endif ()
316
267
endif ()
317
268
318
- # allow extern "C" functions throw exceptions
319
269
foreach (flags CMAKE_C_FLAGS CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG )
320
- string (REPLACE "/EHsc-" "/EHs" ${flags} "${${flags} }" )
321
- string (REPLACE "/EHsc" "/EHs" ${flags} "${${flags} }" )
322
-
323
270
string (REPLACE "/Zm1000" "" ${flags} "${${flags} }" )
324
271
endforeach ()
325
272
273
+ # Enable 'extern "C"' and asynchronous (division by zero, access violation) exceptions
274
+ if (NOT OPENCV_SKIP_MSVC_EXCEPTIONS_FLAG)
275
+ foreach (flags CMAKE_C_FLAGS CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG )
276
+ string (REGEX REPLACE " /EH[^ ]* " " " ${flags} " ${${flags} }" )
277
+ endforeach ()
278
+ if (NOT " ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES " /EH" )
279
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHa" )
280
+ endif ()
281
+ endif ()
282
+
326
283
if (NOT ENABLE_NOISY_WARNINGS)
327
284
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4127) # conditional expression is constant
328
285
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4251) # class 'std::XXX' needs to have dll-interface to be used by clients of YYY
@@ -344,7 +301,20 @@ if(APPLE AND NOT CMAKE_CROSSCOMPILING AND NOT DEFINED ENV{LDFLAGS} AND EXISTS "/
344
301
link_directories ("/usr/local/lib" )
345
302
endif ()
346
303
347
-
348
304
if (ENABLE_BUILD_HARDENING)
349
305
include (${CMAKE_CURRENT_LIST_DIR} /OpenCVCompilerDefenses.cmake)
350
306
endif ()
307
+
308
+ if (MSVC )
309
+ include (cmake/OpenCVCRTLinkage.cmake)
310
+ add_definitions (-D_VARIADIC_MAX=10)
311
+ endif ()
312
+
313
+ # Enable compiler options for OpenCV modules/apps/samples only (ignore 3rdparty)
314
+ macro (ocv_add_modules_compiler_options)
315
+ if (MSVC AND NOT OPENCV_SKIP_MSVC_W4_OPTION)
316
+ foreach (flags CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG )
317
+ string (REPLACE "/W3" "/W4" ${flags} "${${flags} }" )
318
+ endforeach ()
319
+ endif ()
320
+ endmacro ()
0 commit comments