]>
Commit | Line | Data |
---|---|---|
fed90353 BB |
1 | dnl # |
2 | dnl # Enabled -fsanitize=address if supported by gcc. | |
3 | dnl # | |
4 | dnl # LDFLAGS needs -fsanitize=address at all times so libraries compiled with | |
5 | dnl # it will be linked successfully. CFLAGS will vary by binary being built. | |
6 | dnl # | |
7 | dnl # The ASAN_OPTIONS environment variable can be used to further control | |
8 | dnl # the behavior of binaries and libraries build with -fsanitize=address. | |
9 | dnl # | |
10 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_ASAN], [ | |
11 | AC_MSG_CHECKING([whether to build with -fsanitize=address support]) | |
12 | AC_ARG_ENABLE([asan], | |
13 | [AS_HELP_STRING([--enable-asan], | |
14 | [Enable -fsanitize=address support @<:@default=no@:>@])], | |
15 | [], | |
16 | [enable_asan=no]) | |
17 | ||
18 | AM_CONDITIONAL([ASAN_ENABLED], [test x$enable_asan = xyes]) | |
19 | AC_SUBST([ASAN_ENABLED], [$enable_asan]) | |
20 | AC_MSG_RESULT($enable_asan) | |
21 | ||
22 | AS_IF([ test "$enable_asan" = "yes" ], [ | |
23 | AC_MSG_CHECKING([whether $CC supports -fsanitize=address]) | |
24 | saved_cflags="$CFLAGS" | |
52c487a0 | 25 | CFLAGS="$CFLAGS -Werror -fsanitize=address" |
fed90353 BB |
26 | AC_LINK_IFELSE([ |
27 | AC_LANG_SOURCE([[ int main() { return 0; } ]]) | |
28 | ], [ | |
29 | ASAN_CFLAGS="-fsanitize=address" | |
30 | ASAN_LDFLAGS="-fsanitize=address" | |
31 | ASAN_ZFS="_with_asan" | |
32 | AC_MSG_RESULT([yes]) | |
33 | ], [ | |
34 | AC_MSG_ERROR([$CC does not support -fsanitize=address]) | |
35 | ]) | |
36 | CFLAGS="$saved_cflags" | |
37 | ], [ | |
38 | ASAN_CFLAGS="" | |
39 | ASAN_LDFLAGS="" | |
40 | ASAN_ZFS="_without_asan" | |
41 | ]) | |
42 | ||
43 | AC_SUBST([ASAN_CFLAGS]) | |
44 | AC_SUBST([ASAN_LDFLAGS]) | |
45 | AC_SUBST([ASAN_ZFS]) | |
46 | ]) | |
47 | ||
48 | dnl # | |
49 | dnl # Check if gcc supports -Wframe-larger-than=<size> option. | |
50 | dnl # | |
51 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN], [ | |
52 | AC_MSG_CHECKING([whether $CC supports -Wframe-larger-than=<size>]) | |
53 | ||
54 | saved_flags="$CFLAGS" | |
52c487a0 | 55 | CFLAGS="$CFLAGS -Werror -Wframe-larger-than=4096" |
fed90353 BB |
56 | |
57 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
58 | FRAME_LARGER_THAN="-Wframe-larger-than=4096" | |
59 | AC_MSG_RESULT([yes]) | |
60 | ], [ | |
61 | FRAME_LARGER_THAN="" | |
62 | AC_MSG_RESULT([no]) | |
63 | ]) | |
64 | ||
65 | CFLAGS="$saved_flags" | |
66 | AC_SUBST([FRAME_LARGER_THAN]) | |
67 | ]) | |
68 | ||
69 | dnl # | |
70 | dnl # Check if gcc supports -Wno-format-truncation option. | |
71 | dnl # | |
72 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION], [ | |
73 | AC_MSG_CHECKING([whether $CC supports -Wno-format-truncation]) | |
74 | ||
75 | saved_flags="$CFLAGS" | |
52c487a0 | 76 | CFLAGS="$CFLAGS -Werror -Wno-format-truncation" |
fed90353 BB |
77 | |
78 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
79 | NO_FORMAT_TRUNCATION=-Wno-format-truncation | |
80 | AC_MSG_RESULT([yes]) | |
81 | ], [ | |
82 | NO_FORMAT_TRUNCATION= | |
83 | AC_MSG_RESULT([no]) | |
84 | ]) | |
85 | ||
86 | CFLAGS="$saved_flags" | |
87 | AC_SUBST([NO_FORMAT_TRUNCATION]) | |
88 | ]) | |
89 | ||
9f0a21e6 MM |
90 | dnl # |
91 | dnl # Check if gcc supports -Wno-format-truncation option. | |
92 | dnl # | |
93 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH], [ | |
94 | AC_MSG_CHECKING([whether $CC supports -Wno-format-zero-length]) | |
95 | ||
96 | saved_flags="$CFLAGS" | |
97 | CFLAGS="$CFLAGS -Werror -Wno-format-zero-length" | |
98 | ||
99 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
100 | NO_FORMAT_ZERO_LENGTH=-Wno-format-zero-length | |
101 | AC_MSG_RESULT([yes]) | |
102 | ], [ | |
103 | NO_FORMAT_ZERO_LENGTH= | |
104 | AC_MSG_RESULT([no]) | |
105 | ]) | |
106 | ||
107 | CFLAGS="$saved_flags" | |
108 | AC_SUBST([NO_FORMAT_ZERO_LENGTH]) | |
109 | ]) | |
110 | ||
fed90353 BB |
111 | |
112 | dnl # | |
113 | dnl # Check if gcc supports -Wno-bool-compare option. | |
114 | dnl # | |
115 | dnl # We actually invoke gcc with the -Wbool-compare option | |
116 | dnl # and infer the 'no-' version does or doesn't exist based upon | |
117 | dnl # the results. This is required because when checking any of | |
118 | dnl # no- prefixed options gcc always returns success. | |
119 | dnl # | |
120 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_BOOL_COMPARE], [ | |
121 | AC_MSG_CHECKING([whether $CC supports -Wno-bool-compare]) | |
122 | ||
123 | saved_flags="$CFLAGS" | |
52c487a0 | 124 | CFLAGS="$CFLAGS -Werror -Wbool-compare" |
fed90353 BB |
125 | |
126 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
127 | NO_BOOL_COMPARE=-Wno-bool-compare | |
128 | AC_MSG_RESULT([yes]) | |
129 | ], [ | |
130 | NO_BOOL_COMPARE= | |
131 | AC_MSG_RESULT([no]) | |
132 | ]) | |
133 | ||
134 | CFLAGS="$saved_flags" | |
135 | AC_SUBST([NO_BOOL_COMPARE]) | |
136 | ]) | |
137 | ||
138 | dnl # | |
139 | dnl # Check if gcc supports -Wno-unused-but-set-variable option. | |
140 | dnl # | |
141 | dnl # We actually invoke gcc with the -Wunused-but-set-variable option | |
142 | dnl # and infer the 'no-' version does or doesn't exist based upon | |
143 | dnl # the results. This is required because when checking any of | |
144 | dnl # no- prefixed options gcc always returns success. | |
145 | dnl # | |
146 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_UNUSED_BUT_SET_VARIABLE], [ | |
147 | AC_MSG_CHECKING([whether $CC supports -Wno-unused-but-set-variable]) | |
148 | ||
149 | saved_flags="$CFLAGS" | |
52c487a0 | 150 | CFLAGS="$CFLAGS -Werror -Wunused-but-set-variable" |
fed90353 BB |
151 | |
152 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
153 | NO_UNUSED_BUT_SET_VARIABLE=-Wno-unused-but-set-variable | |
154 | AC_MSG_RESULT([yes]) | |
155 | ], [ | |
156 | NO_UNUSED_BUT_SET_VARIABLE= | |
157 | AC_MSG_RESULT([no]) | |
158 | ]) | |
159 | ||
160 | CFLAGS="$saved_flags" | |
161 | AC_SUBST([NO_UNUSED_BUT_SET_VARIABLE]) | |
162 | ]) | |
d5d2ef2b RE |
163 | |
164 | dnl # | |
165 | dnl # Check if gcc supports -fno-omit-frame-pointer option. | |
166 | dnl # | |
167 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER], [ | |
168 | AC_MSG_CHECKING([whether $CC supports -fno-omit-frame-pointer]) | |
169 | ||
170 | saved_flags="$CFLAGS" | |
52c487a0 | 171 | CFLAGS="$CFLAGS -Werror -fno-omit-frame-pointer" |
d5d2ef2b RE |
172 | |
173 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
174 | NO_OMIT_FRAME_POINTER=-fno-omit-frame-pointer | |
175 | AC_MSG_RESULT([yes]) | |
176 | ], [ | |
177 | NO_OMIT_FRAME_POINTER= | |
178 | AC_MSG_RESULT([no]) | |
179 | ]) | |
180 | ||
181 | CFLAGS="$saved_flags" | |
182 | AC_SUBST([NO_OMIT_FRAME_POINTER]) | |
183 | ]) | |
5b7e6a36 RM |
184 | |
185 | dnl # | |
186 | dnl # Check if cc supports -fno-ipa-sra option. | |
187 | dnl # | |
188 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA], [ | |
189 | AC_MSG_CHECKING([whether $CC supports -fno-ipa-sra]) | |
190 | ||
191 | saved_flags="$CFLAGS" | |
192 | CFLAGS="$CFLAGS -Werror -fno-ipa-sra" | |
193 | ||
194 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
195 | NO_IPA_SRA=-fno-ipa-sra | |
196 | AC_MSG_RESULT([yes]) | |
197 | ], [ | |
198 | NO_IPA_SRA= | |
199 | AC_MSG_RESULT([no]) | |
200 | ]) | |
201 | ||
202 | CFLAGS="$saved_flags" | |
203 | AC_SUBST([NO_IPA_SRA]) | |
204 | ]) |