@@ -98,11 +98,22 @@ function(append_quoteless value)
98
98
endforeach (variable )
99
99
endfunction ()
100
100
101
- function (test_san_flags RETURN_VAR )
101
+ function (test_san_flags RETURN_VAR LINK_OPTIONS )
102
102
set (QUIET_BACKUP ${CMAKE_REQUIRED_QUIET} )
103
103
set (CMAKE_REQUIRED_QUIET TRUE )
104
104
unset (${RETURN_VAR} CACHE )
105
- set (FLAGS_BACKUP ${CMAKE_REQUIRED_FLAGS} )
105
+
106
+ # backup test flags
107
+ set (OPTION_FLAGS_BACKUP ${CMAKE_REQUIRED_FLAGS} )
108
+ set (LINK_FLAGS_BACKUP ${CMAKE_REQUIRED_LINK_OPTIONS} )
109
+
110
+ # set link options
111
+ unset (CMAKE_REQUIRED_LINK_OPTIONS )
112
+ foreach (ARG ${${LINK_OPTIONS}} )
113
+ set (CMAKE_REQUIRED_LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS} ;${ARG} )
114
+ endforeach ()
115
+
116
+ # set compile options
106
117
unset (CMAKE_REQUIRED_FLAGS )
107
118
unset (test_san_flags_OPTION_TEST CACHE )
108
119
foreach (ARG ${ARGN} )
@@ -115,10 +126,16 @@ function(test_san_flags RETURN_VAR)
115
126
endif ()
116
127
set (CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${ARG} " )
117
128
endforeach ()
129
+
130
+ # actually test if compilation can occur with given compiler/link options
118
131
if (NOT DEFINED test_san_flags_OPTION_TEST OR test_san_flags_OPTION_TEST )
119
132
check_cxx_source_compiles ("int main() { return 0; }" ${RETURN_VAR} )
120
133
endif ()
121
- set (CMAKE_REQUIRED_FLAGS "${FLAGS_BACKUP} " )
134
+
135
+ # reset backed-up flags
136
+ set (CMAKE_REQUIRED_LINK_OPTIONS "${LINK_FLAGS_BACKUP} " )
137
+ set (CMAKE_REQUIRED_FLAGS "${OPTION_FLAGS_BACKUP} " )
138
+
122
139
set (CMAKE_REQUIRED_QUIET "${QUIET_BACKUP} " )
123
140
endfunction ()
124
141
@@ -194,8 +211,11 @@ function(set_sanitizer_options SANITIZER_NAME)
194
211
195
212
# check if the compile option combination can compile
196
213
unset (SANITIZER_${UPPER_SANITIZER_NAME}_AVAILABLE CACHE )
214
+ set (set_sanitizer_options_LINK_OPTIONS
215
+ -fsanitize=${SANITIZER_${UPPER_SANITIZER_NAME}_SANITIZER} )
197
216
test_san_flags (
198
217
SANITIZER_${UPPER_SANITIZER_NAME}_AVAILABLE
218
+ set_sanitizer_options_LINK_OPTIONS
199
219
-fsanitize=${SANITIZER_${UPPER_SANITIZER_NAME}_SANITIZER};${set_sanitizer_options_UNPARSED_ARGUMENTS}
200
220
)
201
221
@@ -295,8 +315,9 @@ function(add_sanitizer_support)
295
315
SANITIZER_COMPILE_OPTIONS_GLOBAL_CACHE )
296
316
# set of flags needs to be tested for compatability
297
317
unset (SANITIZER_SELECTED_OPTIONS_AVAILABLE CACHE )
298
- test_san_flags (SANITIZER_SELECTED_OPTIONS_AVAILABLE
299
- "${SANITIZER_COMPILE_OPTIONS_SELECTED} " )
318
+ test_san_flags (
319
+ SANITIZER_SELECTED_OPTIONS_AVAILABLE SANITIZER_SELECTED_LINK_OPTIONS
320
+ ${SANITIZER_COMPILE_OPTIONS_SELECTED} )
300
321
301
322
# whatever the result, cache it to reduce repeating test
302
323
set (SANITIZER_COMPILE_OPTIONS_GLOBAL_CACHE
0 commit comments