]> git.proxmox.com Git - mirror_zfs.git/blob - config/always-compiler-options.m4
Revert "Reduce dbuf_find() lock contention"
[mirror_zfs.git] / config / always-compiler-options.m4
1 dnl #
2 dnl # Enabled -fsanitize=address if supported by $CC.
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"
25 CFLAGS="$CFLAGS -Werror -fsanitize=address"
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 # Enabled -fsanitize=undefined if supported by cc.
50 dnl #
51 dnl # LDFLAGS needs -fsanitize=undefined at all times so libraries compiled with
52 dnl # it will be linked successfully. CFLAGS will vary by binary being built.
53 dnl #
54 dnl # The UBSAN_OPTIONS environment variable can be used to further control
55 dnl # the behavior of binaries and libraries build with -fsanitize=undefined.
56 dnl #
57 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_UBSAN], [
58 AC_MSG_CHECKING([whether to build with -fsanitize=undefined support])
59 AC_ARG_ENABLE([ubsan],
60 [AS_HELP_STRING([--enable-ubsan],
61 [Enable -fsanitize=undefined support @<:@default=no@:>@])],
62 [],
63 [enable_ubsan=no])
64
65 AM_CONDITIONAL([UBSAN_ENABLED], [test x$enable_ubsan = xyes])
66 AC_SUBST([UBSAN_ENABLED], [$enable_ubsan])
67 AC_MSG_RESULT($enable_ubsan)
68
69 AS_IF([ test "$enable_ubsan" = "yes" ], [
70 AC_MSG_CHECKING([whether $CC supports -fsanitize=undefined])
71 saved_cflags="$CFLAGS"
72 CFLAGS="$CFLAGS -Werror -fsanitize=undefined"
73 AC_LINK_IFELSE([
74 AC_LANG_SOURCE([[ int main() { return 0; } ]])
75 ], [
76 UBSAN_CFLAGS="-fsanitize=undefined"
77 UBSAN_LDFLAGS="-fsanitize=undefined"
78 UBSAN_ZFS="_with_ubsan"
79 AC_MSG_RESULT([yes])
80 ], [
81 AC_MSG_ERROR([$CC does not support -fsanitize=undefined])
82 ])
83 CFLAGS="$saved_cflags"
84 ], [
85 UBSAN_CFLAGS=""
86 UBSAN_LDFLAGS=""
87 UBSAN_ZFS="_without_ubsan"
88 ])
89
90 AC_SUBST([UBSAN_CFLAGS])
91 AC_SUBST([UBSAN_LDFLAGS])
92 AC_SUBST([UBSAN_ZFS])
93 ])
94
95 dnl #
96 dnl # Check if cc supports -Wframe-larger-than=<size> option.
97 dnl #
98 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN], [
99 AC_MSG_CHECKING([whether $CC supports -Wframe-larger-than=<size>])
100
101 saved_flags="$CFLAGS"
102 CFLAGS="$CFLAGS -Werror -Wframe-larger-than=4096"
103
104 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
105 FRAME_LARGER_THAN="-Wframe-larger-than=4096"
106 AC_MSG_RESULT([yes])
107 ], [
108 FRAME_LARGER_THAN=""
109 AC_MSG_RESULT([no])
110 ])
111
112 CFLAGS="$saved_flags"
113 AC_SUBST([FRAME_LARGER_THAN])
114 ])
115
116 dnl #
117 dnl # Check if cc supports -Wno-format-truncation option.
118 dnl #
119 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION], [
120 AC_MSG_CHECKING([whether $CC supports -Wno-format-truncation])
121
122 saved_flags="$CFLAGS"
123 CFLAGS="$CFLAGS -Werror -Wno-format-truncation"
124
125 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
126 NO_FORMAT_TRUNCATION=-Wno-format-truncation
127 AC_MSG_RESULT([yes])
128 ], [
129 NO_FORMAT_TRUNCATION=
130 AC_MSG_RESULT([no])
131 ])
132
133 CFLAGS="$saved_flags"
134 AC_SUBST([NO_FORMAT_TRUNCATION])
135 ])
136
137 dnl #
138 dnl # Check if cc supports -Wno-format-zero-length option.
139 dnl #
140 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH], [
141 AC_MSG_CHECKING([whether $CC supports -Wno-format-zero-length])
142
143 saved_flags="$CFLAGS"
144 CFLAGS="$CFLAGS -Werror -Wno-format-zero-length"
145
146 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
147 NO_FORMAT_ZERO_LENGTH=-Wno-format-zero-length
148 AC_MSG_RESULT([yes])
149 ], [
150 NO_FORMAT_ZERO_LENGTH=
151 AC_MSG_RESULT([no])
152 ])
153
154 CFLAGS="$saved_flags"
155 AC_SUBST([NO_FORMAT_ZERO_LENGTH])
156 ])
157
158 dnl #
159 dnl # Check if cc supports -Wno-clobbered option.
160 dnl #
161 dnl # We actually invoke it with the -Wclobbered option
162 dnl # and infer the 'no-' version does or doesn't exist based upon
163 dnl # the results. This is required because when checking any of
164 dnl # no- prefixed options gcc always returns success.
165 dnl #
166 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED], [
167 AC_MSG_CHECKING([whether $CC supports -Wno-clobbered])
168
169 saved_flags="$CFLAGS"
170 CFLAGS="$CFLAGS -Werror -Wclobbered"
171
172 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
173 NO_CLOBBERED=-Wno-clobbered
174 AC_MSG_RESULT([yes])
175 ], [
176 NO_CLOBBERED=
177 AC_MSG_RESULT([no])
178 ])
179
180 CFLAGS="$saved_flags"
181 AC_SUBST([NO_CLOBBERED])
182 ])
183
184 dnl #
185 dnl # Check if cc supports -Wimplicit-fallthrough option.
186 dnl #
187 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH], [
188 AC_MSG_CHECKING([whether $CC supports -Wimplicit-fallthrough])
189
190 saved_flags="$CFLAGS"
191 CFLAGS="$CFLAGS -Werror -Wimplicit-fallthrough"
192
193 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
194 IMPLICIT_FALLTHROUGH=-Wimplicit-fallthrough
195 AC_DEFINE([HAVE_IMPLICIT_FALLTHROUGH], 1,
196 [Define if compiler supports -Wimplicit-fallthrough])
197 AC_MSG_RESULT([yes])
198 ], [
199 IMPLICIT_FALLTHROUGH=
200 AC_MSG_RESULT([no])
201 ])
202
203 CFLAGS="$saved_flags"
204 AC_SUBST([IMPLICIT_FALLTHROUGH])
205 ])
206
207 dnl #
208 dnl # Check if cc supports -Winfinite-recursion option.
209 dnl #
210 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_INFINITE_RECURSION], [
211 AC_MSG_CHECKING([whether $CC supports -Winfinite-recursion])
212
213 saved_flags="$CFLAGS"
214 CFLAGS="$CFLAGS -Werror -Winfinite-recursion"
215
216 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
217 INFINITE_RECURSION=-Winfinite-recursion
218 AC_DEFINE([HAVE_INFINITE_RECURSION], 1,
219 [Define if compiler supports -Winfinite-recursion])
220 AC_MSG_RESULT([yes])
221 ], [
222 INFINITE_RECURSION=
223 AC_MSG_RESULT([no])
224 ])
225
226 CFLAGS="$saved_flags"
227 AC_SUBST([INFINITE_RECURSION])
228 ])
229
230 dnl #
231 dnl # Check if cc supports -fno-omit-frame-pointer option.
232 dnl #
233 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER], [
234 AC_MSG_CHECKING([whether $CC supports -fno-omit-frame-pointer])
235
236 saved_flags="$CFLAGS"
237 CFLAGS="$CFLAGS -Werror -fno-omit-frame-pointer"
238
239 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
240 NO_OMIT_FRAME_POINTER=-fno-omit-frame-pointer
241 AC_MSG_RESULT([yes])
242 ], [
243 NO_OMIT_FRAME_POINTER=
244 AC_MSG_RESULT([no])
245 ])
246
247 CFLAGS="$saved_flags"
248 AC_SUBST([NO_OMIT_FRAME_POINTER])
249 ])
250
251 dnl #
252 dnl # Check if cc supports -fno-ipa-sra option.
253 dnl #
254 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA], [
255 AC_MSG_CHECKING([whether $CC supports -fno-ipa-sra])
256
257 saved_flags="$CFLAGS"
258 CFLAGS="$CFLAGS -Werror -fno-ipa-sra"
259
260 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
261 NO_IPA_SRA=-fno-ipa-sra
262 AC_MSG_RESULT([yes])
263 ], [
264 NO_IPA_SRA=
265 AC_MSG_RESULT([no])
266 ])
267
268 CFLAGS="$saved_flags"
269 AC_SUBST([NO_IPA_SRA])
270 ])