@@ -75,20 +75,12 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
7575 set (CMAKE_COMPILER_IS_CLANGXX "TRUE" )
7676endif ()
7777
78- if (UNIX )
79- check_library_exists(rt clock_gettime "" HAVE_CLOCK_GETTIME)
80- if (HAVE_CLOCK_GETTIME)
81- message (STATUS "Requires clock_gettime." )
82- set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} rt)
83- else ()
84- message (STATUS "Does NOT require clock_gettime." )
85- endif ()
86- endif ()
87-
8878#
8979# Use C++ 17 on all compilers.
9080#
91- set (CMAKE_CXX_STANDARD 17)
81+ set (CMAKE_CXX_STANDARD 17 CACHE STRING "The C++ standard to use" )
82+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
83+ set (CMAKE_CXX_EXTENSIONS OFF )
9284
9385if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX
9486 AND NOT "x${CMAKE_CXX_SIMULATE_ID} " STREQUAL "xMSVC" )
@@ -97,15 +89,18 @@ if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX
9789
9890 if (CMAKE_COMPILER_IS_GNUCXX)
9991 set (warning_flags "${warning_flags} -Wno-maybe-uninitialized" )
100-
101- # Ignore self-assigns as we need this for generated tests.
102- set (warning_flags "${warning_flags} -Wno-self-assign-overloaded " )
10392 endif ()
10493
10594 if (CMAKE_COMPILER_IS_CLANGXX)
10695 # disable mismatched tags as there are STL inconsistencies that
10796 # make it a bit useless.
10897 set (warning_flags "${warning_flags} -Wno-mismatched-tags" )
98+
99+ # Ignore self-assigns as we need this for generated tests.
100+ set (warning_flags "${warning_flags} -Wno-self-assign-overloaded " )
101+
102+ # force DWARF version to 4 in order to keep Valgrind happy.
103+ set (warning_flags "${warning_flags} -gdwarf-4" )
109104 if (CCACHE_PROGRAM)
110105 # CCache and Clang don't seem to play nice when it comes
111106 # to unused arguments.
@@ -129,7 +124,6 @@ if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX
129124 set (warning_flags "${warning_flags} -Wwrite-strings" )
130125
131126 # enable RTTI
132- add_definitions (-D_GLIBCXX_USE_CXX11_ABI=1)
133127 if (APPLE )
134128 set (other_flags "${other_flags} -fvisibility=default" )
135129 else ()
@@ -155,91 +149,13 @@ if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX
155149 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${other_flags} " )
156150 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${profiling_flags} " )
157151
158- # ignore fuzzy link errors
159- if (WIN32 )
160- set (CMAKE_EXE_LINKER_FLAGS
161- "${CMAKE_EXE_LINKER_FLAGS} -Wl,-enable-stdcall-fixup" )
162- set (CMAKE_SHARED_LINKER_FLAGS
163- "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-enable-stdcall-fixup" )
164- endif ()
165-
166- elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC" OR
167- CMAKE_CXX_SIMULATE_ID MATCHES "MSVC" )
168- if (${MSVC_VERSION} GREATER 1399) # 1400+ => VC2005+
169- # cannot use incremental rebuild
170- string (REPLACE "/Gm" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} " )
171- string (REPLACE "/Gm" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} " )
172- string (REPLACE "/Gm" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} " )
173- string (REPLACE "/Gm" "" CMAKE_CXX_FLAGS_RELEASE
174- "${CMAKE_CXX_FLAGS_RELEASE} " )
175-
176- # workaround for C1128: number of sections exceeded object
177- # file format limit.
178- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj" )
179- endif ()
180-
181- # It seems Wall and /W4 are not practical for now as it includes
182- # all of the third party headers.
183- # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
184- set (CMAKE_CXX_FLAGS
185- "${CMAKE_CXX_FLAGS} /D _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING" )
186- set (CMAKE_CXX_FLAGS
187- "${CMAKE_CXX_FLAGS} /D _SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING" )
188- set (CMAKE_CXX_FLAGS
189- "${CMAKE_CXX_FLAGS} /D CRT_SECURE_NO_WARNINGS" )
190-
191- foreach (flag_var CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_RELWITHDEBINFO )
192- string (REGEX REPLACE "/MD" "/MT" ${flag_var} "${flag_var} " )
193- string (REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${flag_var} " )
194- endforeach (flag_var)
195-
196- # Options specific to clang-cl. We suppress a number of warnings
197- # because at present the code is littered with these coming out of
198- # third party libraries like boost.
199- if (CMAKE_COMPILER_IS_CLANGXX)
200- # Ingore the annoying "locally defined symbol imported"
201- # warning we get from boost thread on clang-cl.
202- set (CMAKE_EXE_LINKER_FLAGS
203- "${CMAKE_EXE_LINKER_FLAGS} /IGNORE:4217" )
204-
205- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Xclang -Wno-unknown-pragmas" )
206- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Xclang -Wno-assume" )
207- set (CMAKE_CXX_FLAGS
208- "${CMAKE_CXX_FLAGS} -Xclang -Wno-deprecated-declarations" )
209- set (CMAKE_CXX_FLAGS
210- "${CMAKE_CXX_FLAGS} -Xclang -Wno-delete-non-virtual-dtor" )
211- set (CMAKE_CXX_FLAGS
212- "${CMAKE_CXX_FLAGS} -Xclang -Wno-potentially-evaluated-expression" )
213- endif ()
214-
215- if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
216- # flag not supported by clang-cl
217- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP" )
218-
219- # For some reason CMake seems to be including the debug
220- # version of this library on release builds as well so we
221- # need to ignore it. Not adding this to clang-cl as it
222- # does not seem to recognise it.
223- set (CMAKE_SHARED_LINKER_FLAGS_RELEASE
224- "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libcmtd" )
225- set (CMAKE_EXE_LINKER_FLAGS_RELEASE
226- "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libcmtd" )
227- elseif (UNIX AND NOT APPLE )
152+ if (UNIX AND NOT APPLE )
153+ # use the Gold linker.
228154 set (CMAKE_EXE_LINKER_FLAGS
229155 "${CMAKE_EXE_LINKER_FLAGS} -Wl,-fuse-ld=gold" )
230156 set (CMAKE_SHARED_LINKER_FLAGS
231157 "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-fuse-ld=gold" )
232158 endif ()
233-
234- set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} " CACHE STRING "MSVC C Debug MT flags " FORCE)
235- set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} " CACHE STRING "MSVC CXX Debug MT flags " FORCE)
236- set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} " CACHE STRING "MSVC C Release MT flags " FORCE)
237- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} " CACHE STRING "MSVC CXX Release MT flags " FORCE)
238- set (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} " CACHE STRING "MSVC C Debug MT flags " FORCE)
239- set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} " CACHE STRING "MSVC C Release MT flags " FORCE)
240- set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} " CACHE STRING "MSVC CXX Debug MT flags " FORCE)
241- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} " CACHE STRING "MSVC CXX Release MT flags " FORCE)
242-
243159endif ()
244160
245161# user includes
0 commit comments