|
30 | 30 |
|
31 | 31 | include(CheckCXXCompilerFlag) |
32 | 32 |
|
33 | | -if(UNIX) |
| 33 | +if(UNIX OR CMAKE_CXX_COMPILER_ID MATCHES "[cC][lL][aA][nN][gG]") |
34 | 34 | set(CMAKE_REQUIRED_FLAGS -fsanitize=address) |
35 | 35 | check_cxx_compiler_flag(-fsanitize=address HAVE_ASAN) |
36 | 36 |
|
@@ -58,61 +58,75 @@ else() |
58 | 58 | set(CMAKE_REQUIRED_FLAGS /fsanitize=fuzzer) |
59 | 59 | check_cxx_compiler_flag(/fsanitize=fuzzer HAVE_FUZZER) |
60 | 60 | endif() |
| 61 | +unset(CMAKE_REQUIRED_FLAGS) |
61 | 62 |
|
62 | 63 | if(HAVE_ASAN) |
63 | 64 | option(SANITIZER_ADDRESS "Build with address sanitizer" ON) |
64 | 65 | if(SANITIZER_ADDRESS) |
65 | 66 | if(UNIX) |
66 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-scope -fno-optimize-sibling-calls") |
| 67 | + set(SANITIZER_ADDRESS_FLAGS "-fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-scope -fno-optimize-sibling-calls") |
67 | 68 | else() |
68 | | - set(EXTRA_CXX_FLAGS /fsanitize=address) |
69 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXX_FLAGS}") |
| 69 | + set(SANITIZER_ADDRESS_FLAGS /fsanitize=address) |
70 | 70 | endif() |
| 71 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_ADDRESS_FLAGS}") |
| 72 | + set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_ADDRESS_FLAGS}") |
71 | 73 | endif() |
72 | 74 | endif() |
73 | 75 |
|
74 | 76 | if(HAVE_CFI) |
75 | 77 | option(SANITIZER_CFI "Build with control flow integration" OFF) |
76 | 78 | if(SANITIZER_CFI) |
77 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=cfi") |
| 79 | + set(SANITIZER_CFI_FLAGS -fsanitize=cfi) |
| 80 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_CFI_FLAGS}") |
| 81 | + set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_CFI_FLAGS}") |
78 | 82 | endif() |
79 | 83 | endif() |
80 | 84 |
|
81 | 85 | if(HAVE_FUZZER) |
82 | 86 | option(SANITIZER_FUZZER "Build with fuzzer" ON) |
83 | 87 | if(SANITIZER_FUZZER) |
84 | 88 | if(UNIX) |
85 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=fuzzer") |
| 89 | + set(SANITIZER_FUZZER_FLAGS -fsanitize=fuzzer) |
86 | 90 | else() |
87 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=fuzzer") |
| 91 | + set(SANITIZER_FUZZER_FLAGS /fsanitize=fuzzer) |
88 | 92 | endif() |
| 93 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_FUZZER_FLAGS}") |
| 94 | + set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_FUZZER_FLAGS}") |
89 | 95 | endif() |
90 | 96 | endif() |
91 | 97 |
|
92 | 98 | if(HAVE_LSAN) |
93 | 99 | option(SANITIZER_LEAK "Build with leak sanitizer" OFF) |
94 | 100 | if(SANITIZER_LEAK) |
95 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak") |
| 101 | + set(SANITIZER_LEAK_FLAGS -fsanitize=leak) |
| 102 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_LEAK_FLAGS}") |
| 103 | + set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_LEAK_FLAGS}") |
96 | 104 | endif() |
97 | 105 | endif() |
98 | 106 |
|
99 | 107 | if(HAVE_MSAN) |
100 | 108 | option(SANITIZER_MEMORY "Build with memory sanitizer" OFF) |
101 | 109 | if(SANITIZER_MEMORY) |
102 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-optimize-sibling-calls") |
| 110 | + set(SANITIZER_MEMORY_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins -fno-optimize-sibling-calls") |
| 111 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_MEMORY_FLAGS}") |
| 112 | + set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_MEMORY_FLAGS}") |
103 | 113 | endif() |
104 | 114 | endif() |
105 | 115 |
|
106 | 116 | if(HAVE_TSAN) |
107 | 117 | option(SANITIZER_THREAD "Build with thread sanitizer" OFF) |
108 | 118 | if(SANITIZER_THREAD) |
109 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread") |
| 119 | + set(SANITIZER_THREAD_FLAGS -fsanitize=thread) |
| 120 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_THREAD_FLAGS}") |
| 121 | + set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_THREAD_FLAGS}") |
110 | 122 | endif() |
111 | 123 | endif() |
112 | 124 |
|
113 | 125 | if(HAVE_USAN) |
114 | 126 | option(SANITIZER_UNDEFINED "Build with undefined sanitizer" ON) |
115 | 127 | if(SANITIZER_UNDEFINED) |
116 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined") |
| 128 | + set(SANITIZER_UNDEFINED_FLAGS -fsanitize=undefined) |
| 129 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_UNDEFINED_FLAGS}") |
| 130 | + set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_UNDEFINED_FLAGS}") |
117 | 131 | endif() |
118 | 132 | endif() |
0 commit comments