@@ -141,28 +141,45 @@ include (${WAMR_ROOT_DIR}/build-scripts/package.cmake)
141
141
142
142
if (NOT DEFINED WAMR_BUILD_SANITIZER )
143
143
set (WAMR_BUILD_SANITIZER $ENV{WAMR_BUILD_SANITIZER} )
144
- endif ()
144
+ endif ()
145
145
146
- if (NOT DEFINED WAMR_BUILD_SANITIZER )
147
- set (WAMR_BUILD_SANITIZER "" )
148
- elseif (WAMR_BUILD_SANITIZER STREQUAL "ubsan" )
149
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=all -fno-sanitize=alignment" )
150
- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined" )
151
- elseif (WAMR_BUILD_SANITIZER STREQUAL "asan" )
152
- if (NOT WAMR_BUILD_JIT EQUAL 1 )
153
- set (ASAN_OPTIONS "verbosity=2 debug=true " )
154
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=address -fno-sanitize-recover=all" )
155
- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address" )
146
+ if (NOT WAMR_BUILD_SANITIZER STREQUAL "" )
147
+ set (SUPPORTED_SANITIZERS "ubsan;asan;tsan;posan" )
148
+ string (REPLACE "," ";" SANITIZER_LIST "${WAMR_BUILD_SANITIZER} " )
149
+
150
+ # Check uncompabile sanitizers
151
+ if ("tsan" IN_LIST SANITIZER_LIST AND "asan" IN_LIST SANITIZER_LIST )
152
+ message (FATAL_ERROR "ThreadSanitizer (tsan) and AddressSanitizer (asan) cannot be used together!" )
156
153
endif ()
157
- elseif (WAMR_BUILD_SANITIZER STREQUAL "tsan" )
158
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=thread -fno-sanitize-recover=all" )
159
- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread" )
160
- elseif (WAMR_BUILD_SANITIZER STREQUAL "posan" )
161
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=pointer-overflow -fno-sanitize-recover=all" )
162
- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=pointer-overflow" )
163
- elseif (NOT (WAMR_BUILD_SANITIZER STREQUAL "" ) )
164
- message (SEND_ERROR "Unsupported sanitizer: ${WAMR_BUILD_SANITIZER} " )
165
- endif ()
154
+
155
+ # Check every sanitizer in the list
156
+ set (INVALID_SANITIZERS "" )
157
+ foreach (sanitizer ${SANITIZER_LIST} )
158
+ string (STRIP "${sanitizer} " sanitizer )
159
+ if (NOT sanitizer IN_LIST SUPPORTED_SANITIZERS )
160
+ list (APPEND INVALID_SANITIZERS "${sanitizer} " )
161
+ elseif (sanitizer STREQUAL "ubsan" )
162
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=all -fno-sanitize=alignment" )
163
+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined" )
164
+ elseif (sanitizer STREQUAL "asan" )
165
+ if (NOT WAMR_BUILD_JIT EQUAL 1 )
166
+ set (ASAN_OPTIONS "verbosity=2 debug=true" )
167
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=address -fno-sanitize-recover=all" )
168
+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address" )
169
+ endif ()
170
+ elseif (sanitizer STREQUAL "tsan" )
171
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=thread -fno-sanitize-recover=all" )
172
+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread" )
173
+ elseif (sanitizer STREQUAL "posan" )
174
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=pointer-overflow -fno-sanitize-recover=all" )
175
+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=pointer-overflow" )
176
+ endif ()
177
+ endforeach ()
178
+
179
+ if (INVALID_SANITIZERS )
180
+ message (FATAL_ERROR "Unsupported sanitizers: ${INVALID_SANITIZERS} " )
181
+ endif ()
182
+ endif ()
166
183
167
184
if (WAMR_BUILD_LINUX_PERF EQUAL 1 )
168
185
if (NOT WAMR_BUILD_JIT AND NOT WAMR_BUILD_AOT )
0 commit comments