@@ -98,11 +98,22 @@ function(append_quoteless value)
9898 endforeach (variable )
9999endfunction ()
100100
101- function (test_san_flags RETURN_VAR)
101+ function (test_san_flags RETURN_VAR LINK_OPTIONS )
102102 set (QUIET_BACKUP ${CMAKE_REQUIRED_QUIET} )
103103 set (CMAKE_REQUIRED_QUIET TRUE )
104104 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
106117 unset (CMAKE_REQUIRED_FLAGS)
107118 unset (test_san_flags_OPTION_TEST CACHE )
108119 foreach (ARG ${ARGN} )
@@ -115,10 +126,16 @@ function(test_san_flags RETURN_VAR)
115126 endif ()
116127 set (CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${ARG} " )
117128 endforeach ()
129+
130+ # actually test if compilation can occur with given compiler/link options
118131 if (NOT DEFINED test_san_flags_OPTION_TEST OR test_san_flags_OPTION_TEST)
119132 check_cxx_source_compiles("int main() { return 0; }" ${RETURN_VAR} )
120133 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+
122139 set (CMAKE_REQUIRED_QUIET "${QUIET_BACKUP} " )
123140endfunction ()
124141
@@ -194,8 +211,11 @@ function(set_sanitizer_options SANITIZER_NAME)
194211
195212 # check if the compile option combination can compile
196213 unset (SANITIZER_${UPPER_SANITIZER_NAME} _AVAILABLE CACHE )
214+ set (set_sanitizer_options_LINK_OPTIONS
215+ -fsanitize=${SANITIZER_${UPPER_SANITIZER_NAME} _SANITIZER})
197216 test_san_flags(
198217 SANITIZER_${UPPER_SANITIZER_NAME} _AVAILABLE
218+ set_sanitizer_options_LINK_OPTIONS
199219 -fsanitize=${SANITIZER_${UPPER_SANITIZER_NAME} _SANITIZER};${set_sanitizer_options_UNPARSED_ARGUMENTS}
200220 )
201221
@@ -295,8 +315,9 @@ function(add_sanitizer_support)
295315 SANITIZER_COMPILE_OPTIONS_GLOBAL_CACHE)
296316 # set of flags needs to be tested for compatability
297317 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} )
300321
301322 # whatever the result, cache it to reduce repeating test
302323 set (SANITIZER_COMPILE_OPTIONS_GLOBAL_CACHE
0 commit comments