Skip to content

Commit 7bfa96a

Browse files
committed
[C] Implement --sanitise-build support.
1 parent fefb1f0 commit 7bfa96a

File tree

1 file changed

+36
-9
lines changed

1 file changed

+36
-9
lines changed

CMakeLists.txt

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,13 @@ endif ()
7575

7676
find_package(Threads)
7777

78+
# all UNIX-based platform compiler flags
7879
if (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)
93103
endif ()
94104

105+
# platform specific flags
95106
if (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)
100118
elseif (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+
125152
endif ()
126153

127154
set(LIBPREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}")

0 commit comments

Comments
 (0)