@@ -75,10 +75,13 @@ endif ()
7575
7676find_package (Threads)
7777
78+ # all UNIX-based platform compiler flags
7879if (UNIX )
79- add_compile_options (-Wall -Wpedantic -Wextra -Wno-unused-parameter)
80+ add_compile_options (-fstrict-aliasing - Wall -Wpedantic -Wextra -Wno-unused-parameter -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer )
8081
81- if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "21.0" )
82+ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "11.0" )
83+ add_compile_options (-Wno-error=maybe-uninitialized)
84+ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "21.0" )
8285 # See gtest: https://github.com/google/googletest/issues/4762
8386 add_compile_options (-Wno-error=character-conversion)
8487 endif ()
@@ -90,13 +93,28 @@ if (UNIX)
9093 if (CXX_WARNINGS_AS_ERRORS)
9194 add_compile_options ($<$<COMPILE_LANGUAGE:CXX>:-Werror>)
9295 endif (CXX_WARNINGS_AS_ERRORS)
96+
97+ if (SANITISE_BUILD)
98+ if (NOT DEFINED APPLE )
99+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=leak -fsanitize=undefined" )
100+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=leak -fsanitize=undefined" )
101+ endif ()
102+ endif (SANITISE_BUILD)
93103endif ()
94104
105+ # platform specific flags
95106if (APPLE )
96- # -Wall doesn't enable everything we want to see
97107 add_compile_options (-Wsign-compare)
98108 add_definitions (-DDarwin)
99109 add_compile_options (-Wno-deprecated-register)
110+
111+ if (SANITISE_BUILD)
112+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=undefined" )
113+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=undefined" )
114+ endif (SANITISE_BUILD)
115+ elseif (CYGWIN )
116+ add_definitions (-DWIN32)
117+ set (CMAKE_CXX_EXTENSIONS ON )
100118elseif (MSVC )
101119 add_definitions (-DWIN32)
102120 add_definitions (-D_CRT_SECURE_NO_WARNINGS)
@@ -108,10 +126,15 @@ elseif (MSVC)
108126 add_definitions (-D_ENABLE_EXTENDED_ALIGNED_STORAGE)
109127 endif ()
110128
111- set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd /Od /Zi /MP" )
112- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /MP" )
113- set (CMAKE_C_FLAGS_DEBUG "/MTd" )
114- set (CMAKE_C_FLAGS_RELEASE "/MT" )
129+ add_compile_options (/Oy-)
130+ add_compile_options ($<$<AND :$<COMPILE_LANGUAGE:C>,$<CONFIG:RELEASE>>:/MD >)
131+ add_compile_options ($<$<AND :$<COMPILE_LANGUAGE:C>,$<CONFIG:DEBUG>>:/MDd>)
132+ add_compile_options ($<$<COMPILE_LANGUAGE:CXX>:/MP>)
133+ add_compile_options ($<$<COMPILE_LANGUAGE:CXX>:/wd4251>)
134+ add_compile_options ($<$<AND :$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:/MD >)
135+ add_compile_options ($<$<AND :$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:/MDd>)
136+ add_compile_options ($<$<AND :$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:/Od>)
137+ add_compile_options ($<$<AND :$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:/Zi>)
115138
116139 if (C_WARNINGS_AS_ERRORS)
117140 add_compile_options ($<$<COMPILE_LANGUAGE:C>:/WX>)
@@ -120,8 +143,12 @@ elseif (MSVC)
120143 if (CXX_WARNINGS_AS_ERRORS)
121144 add_compile_options ($<$<COMPILE_LANGUAGE:CXX>:/WX>)
122145 endif (CXX_WARNINGS_AS_ERRORS)
123- else ()
124- add_definitions (-D_GNU_SOURCE)
146+
147+ if (SANITISE_BUILD)
148+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address /Zi" )
149+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address /Zi" )
150+ endif (SANITISE_BUILD)
151+
125152endif ()
126153
127154set (LIBPREFIX "${CMAKE_STATIC_LIBRARY_PREFIX} " )
0 commit comments