@@ -31,14 +31,14 @@ function(append value)
31
31
endfunction ()
32
32
33
33
function (test_san_flags return_var flags )
34
- set (QUIET_BACKUP ${CMAKE_REQUIRED_QUIET} )
35
- set (CMAKE_REQUIRED_QUIET TRUE )
36
- unset (${return_var} CACHE )
37
- set (FLAGS_BACKUP ${CMAKE_REQUIRED_FLAGS} )
38
- set (CMAKE_REQUIRED_FLAGS "${flags} " )
39
- check_cxx_source_compiles("int main() { return 0; }" ${return_var} )
40
- set (CMAKE_REQUIRED_FLAGS "${FLAGS_BACKUP} " )
41
- set (CMAKE_REQUIRED_QUIET "${QUIET_BACKUP} " )
34
+ set (QUIET_BACKUP ${CMAKE_REQUIRED_QUIET} )
35
+ set (CMAKE_REQUIRED_QUIET TRUE )
36
+ unset (${return_var} CACHE )
37
+ set (FLAGS_BACKUP ${CMAKE_REQUIRED_FLAGS} )
38
+ set (CMAKE_REQUIRED_FLAGS "${flags} " )
39
+ check_cxx_source_compiles("int main() { return 0; }" ${return_var} )
40
+ set (CMAKE_REQUIRED_FLAGS "${FLAGS_BACKUP} " )
41
+ set (CMAKE_REQUIRED_QUIET "${QUIET_BACKUP} " )
42
42
endfunction ()
43
43
44
44
if (USE_SANITIZER)
@@ -57,11 +57,13 @@ if(USE_SANITIZER)
57
57
message (STATUS "Testing with Address sanitizer" )
58
58
set (SANITIZER_ADDR_FLAG "-fsanitize=address" )
59
59
test_san_flags(SANITIZER_ADDR_AVAILABLE ${SANITIZER_ADDR_FLAG} )
60
- if (SANITIZER_ADDR_AVAILABLE)
60
+ if (SANITIZER_ADDR_AVAILABLE)
61
61
message (STATUS " Building with Address sanitizer" )
62
62
append ("${SANITIZER_ADDR_FLAG} " SANITIZER_SELECTED_FLAGS)
63
63
else ()
64
- message (FATAL_ERROR "Address sanitizer not available for ${CMAKE_CXX_COMPILER} " )
64
+ message (
65
+ FATAL_ERROR
66
+ "Address sanitizer not available for ${CMAKE_CXX_COMPILER} " )
65
67
endif ()
66
68
endif ()
67
69
@@ -75,15 +77,18 @@ if(USE_SANITIZER)
75
77
message (STATUS "Testing with Memory sanitizer" )
76
78
endif ()
77
79
test_san_flags(SANITIZER_MEM_AVAILABLE ${SANITIZER_MEM_FLAG} )
78
- if (SANITIZER_MEM_AVAILABLE)
80
+ if (SANITIZER_MEM_AVAILABLE)
79
81
if (USE_SANITIZER MATCHES "([Mm]emory[Ww]ith[Oo]rigins)" )
80
- message (STATUS " Building with MemoryWithOrigins sanitizer" )
82
+ message (STATUS " Building with MemoryWithOrigins sanitizer" )
81
83
else ()
82
- message (STATUS " Building with Memory sanitizer" )
84
+ message (STATUS " Building with Memory sanitizer" )
83
85
endif ()
84
86
append ("${SANITIZER_MEM_FLAG} " SANITIZER_SELECTED_FLAGS)
85
87
else ()
86
- message (FATAL_ERROR "Memory [With Origins] sanitizer not available for ${CMAKE_CXX_COMPILER} " )
88
+ message (
89
+ FATAL_ERROR
90
+ "Memory [With Origins] sanitizer not available for ${CMAKE_CXX_COMPILER} "
91
+ )
87
92
endif ()
88
93
endif ()
89
94
@@ -94,57 +99,69 @@ if(USE_SANITIZER)
94
99
append ("-fsanitize-blacklist=${BLACKLIST_FILE} " SANITIZER_UB_FLAG)
95
100
endif ()
96
101
test_san_flags(SANITIZER_UB_AVAILABLE ${SANITIZER_UB_FLAG} )
97
- if (SANITIZER_UB_AVAILABLE)
102
+ if (SANITIZER_UB_AVAILABLE)
98
103
message (STATUS " Building with Undefined Behaviour sanitizer" )
99
104
append ("${SANITIZER_UB_FLAG} " SANITIZER_SELECTED_FLAGS)
100
105
else ()
101
- message (FATAL_ERROR "Undefined Behaviour sanitizer not available for ${CMAKE_CXX_COMPILER} " )
106
+ message (
107
+ FATAL_ERROR
108
+ "Undefined Behaviour sanitizer not available for ${CMAKE_CXX_COMPILER} "
109
+ )
102
110
endif ()
103
111
endif ()
104
112
105
113
if (USE_SANITIZER MATCHES "([Tt]hread)" )
106
114
message (STATUS "Testing with Thread sanitizer" )
107
115
set (SANITIZER_THREAD_FLAG "-fsanitize=thread" )
108
116
test_san_flags(SANITIZER_THREAD_AVAILABLE ${SANITIZER_THREAD_FLAG} )
109
- if (SANITIZER_THREAD_AVAILABLE)
117
+ if (SANITIZER_THREAD_AVAILABLE)
110
118
message (STATUS " Building with Thread sanitizer" )
111
119
append ("${SANITIZER_THREAD_FLAG} " SANITIZER_SELECTED_FLAGS)
112
120
else ()
113
- message (FATAL_ERROR "Thread sanitizer not available for ${CMAKE_CXX_COMPILER} " )
121
+ message (
122
+ FATAL_ERROR "Thread sanitizer not available for ${CMAKE_CXX_COMPILER} "
123
+ )
114
124
endif ()
115
125
endif ()
116
126
117
127
if (USE_SANITIZER MATCHES "([Ll]eak)" )
118
128
message (STATUS "Testing with Leak sanitizer" )
119
129
set (SANITIZER_LEAK_FLAG "-fsanitize=leak" )
120
130
test_san_flags(SANITIZER_LEAK_AVAILABLE ${SANITIZER_LEAK_FLAG} )
121
- if (SANITIZER_LEAK_AVAILABLE)
131
+ if (SANITIZER_LEAK_AVAILABLE)
122
132
message (STATUS " Building with Leak sanitizer" )
123
133
append ("${SANITIZER_LEAK_FLAG} " SANITIZER_SELECTED_FLAGS)
124
134
else ()
125
- message (FATAL_ERROR "Thread sanitizer not available for ${CMAKE_CXX_COMPILER} " )
135
+ message (
136
+ FATAL_ERROR "Thread sanitizer not available for ${CMAKE_CXX_COMPILER} "
137
+ )
126
138
endif ()
127
139
endif ()
128
140
129
141
if (USE_SANITIZER MATCHES "([Cc][Ff][Ii])" )
130
142
message (STATUS "Testing with Control Flow Integrity(CFI) sanitizer" )
131
143
set (SANITIZER_CFI_FLAG "-fsanitize=cfi" )
132
144
test_san_flags(SANITIZER_CFI_AVAILABLE ${SANITIZER_CFI_FLAG} )
133
- if (SANITIZER_CFI_AVAILABLE)
145
+ if (SANITIZER_CFI_AVAILABLE)
134
146
message (STATUS " Building with Control Flow Integrity(CFI) sanitizer" )
135
147
append ("${SANITIZER_LEAK_FLAG} " SANITIZER_SELECTED_FLAGS)
136
148
else ()
137
- message (FATAL_ERROR "Control Flow Integrity(CFI) sanitizer not available for ${CMAKE_CXX_COMPILER} " )
149
+ message (
150
+ FATAL_ERROR
151
+ "Control Flow Integrity(CFI) sanitizer not available for ${CMAKE_CXX_COMPILER} "
152
+ )
138
153
endif ()
139
154
endif ()
140
155
141
156
message (STATUS "Sanitizer flags: ${SANITIZER_SELECTED_FLAGS} " )
142
157
test_san_flags(SANITIZER_SELECTED_COMPATIBLE ${SANITIZER_SELECTED_FLAGS} )
143
- if (SANITIZER_SELECTED_COMPATIBLE)
158
+ if (SANITIZER_SELECTED_COMPATIBLE)
144
159
message (STATUS " Building with ${SANITIZER_SELECTED_FLAGS} " )
145
160
append ("${SANITIZER_SELECTED_FLAGS} " CMAKE_C_FLAGS CMAKE_CXX_FLAGS )
146
161
else ()
147
- message (FATAL_ERROR " Sanitizer flags ${SANITIZER_SELECTED_FLAGS} are not compatible." )
162
+ message (
163
+ FATAL_ERROR
164
+ " Sanitizer flags ${SANITIZER_SELECTED_FLAGS} are not compatible." )
148
165
endif ()
149
166
elseif (MSVC )
150
167
if (USE_SANITIZER MATCHES "([Aa]ddress)" )
0 commit comments