Skip to content

Commit bedde52

Browse files
committed
Update sanitizer checks to include link options
When checking for the availability of a sanitizer, it now checks the link options as well as the compile options.
1 parent 6a3fcab commit bedde52

File tree

1 file changed

+26
-5
lines changed

1 file changed

+26
-5
lines changed

sanitizers.cmake

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,22 @@ function(append_quoteless value)
9898
endforeach(variable)
9999
endfunction()
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}")
123140
endfunction()
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

Comments
 (0)