]> git.proxmox.com Git - mirror_zfs.git/blame - config/always-compiler-options.m4
linux: implement filesystem-side copy/clone functions for EL7
[mirror_zfs.git] / config / always-compiler-options.m4
CommitLineData
fed90353 1dnl #
9e532d17 2dnl # Enabled -fsanitize=address if supported by $CC.
fed90353
BB
3dnl #
4dnl # LDFLAGS needs -fsanitize=address at all times so libraries compiled with
5dnl # it will be linked successfully. CFLAGS will vary by binary being built.
6dnl #
7dnl # The ASAN_OPTIONS environment variable can be used to further control
8dnl # the behavior of binaries and libraries build with -fsanitize=address.
9dnl #
10AC_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
63652e15 48dnl #
9e532d17 49dnl # Enabled -fsanitize=undefined if supported by cc.
63652e15
DS
50dnl #
51dnl # LDFLAGS needs -fsanitize=undefined at all times so libraries compiled with
52dnl # it will be linked successfully. CFLAGS will vary by binary being built.
53dnl #
54dnl # The UBSAN_OPTIONS environment variable can be used to further control
55dnl # the behavior of binaries and libraries build with -fsanitize=undefined.
56dnl #
57AC_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
fed90353 95dnl #
9e532d17 96dnl # Check if cc supports -Wframe-larger-than=<size> option.
fed90353
BB
97dnl #
98AC_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"
52c487a0 102 CFLAGS="$CFLAGS -Werror -Wframe-larger-than=4096"
fed90353
BB
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
116dnl #
9e532d17 117dnl # Check if cc supports -Wno-format-truncation option.
fed90353
BB
118dnl #
119AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION], [
120 AC_MSG_CHECKING([whether $CC supports -Wno-format-truncation])
121
122 saved_flags="$CFLAGS"
52c487a0 123 CFLAGS="$CFLAGS -Werror -Wno-format-truncation"
fed90353
BB
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
9f0a21e6 137dnl #
9e532d17 138dnl # Check if cc supports -Wno-format-zero-length option.
9f0a21e6
MM
139dnl #
140AC_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
fed90353 158dnl #
9e532d17 159dnl # Check if cc supports -Wno-clobbered option.
fed90353 160dnl #
9e532d17 161dnl # We actually invoke it with the -Wclobbered option
fed90353
BB
162dnl # and infer the 'no-' version does or doesn't exist based upon
163dnl # the results. This is required because when checking any of
164dnl # no- prefixed options gcc always returns success.
165dnl #
72154bd6
AZ
166AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED], [
167 AC_MSG_CHECKING([whether $CC supports -Wno-clobbered])
fed90353
BB
168
169 saved_flags="$CFLAGS"
72154bd6 170 CFLAGS="$CFLAGS -Werror -Wclobbered"
fed90353
BB
171
172 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
72154bd6 173 NO_CLOBBERED=-Wno-clobbered
fed90353
BB
174 AC_MSG_RESULT([yes])
175 ], [
72154bd6 176 NO_CLOBBERED=
fed90353
BB
177 AC_MSG_RESULT([no])
178 ])
179
180 CFLAGS="$saved_flags"
72154bd6 181 AC_SUBST([NO_CLOBBERED])
fed90353 182])
d5d2ef2b 183
6954c22f 184dnl #
9e532d17 185dnl # Check if cc supports -Wimplicit-fallthrough option.
6954c22f
BB
186dnl #
187AC_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
a6e8113f
BB
207dnl #
208dnl # Check if cc supports -Winfinite-recursion option.
209dnl #
210AC_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
3c1e1933
DS
230dnl #
231dnl # Check if kernel cc supports -Winfinite-recursion option.
232dnl #
233AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_INFINITE_RECURSION], [
234 AC_MSG_CHECKING([whether $KERNEL_CC supports -Winfinite-recursion])
235
236 saved_cc="$CC"
237 saved_flags="$CFLAGS"
238 CC="gcc"
239 CFLAGS="$CFLAGS -Werror -Winfinite-recursion"
240
241 AS_IF([ test -n "$KERNEL_CC" ], [
242 CC="$KERNEL_CC"
243 ])
244 AS_IF([ test -n "$KERNEL_LLVM" ], [
245 CC="clang"
246 ])
247
248 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
249 KERNEL_INFINITE_RECURSION=-Winfinite-recursion
250 AC_DEFINE([HAVE_KERNEL_INFINITE_RECURSION], 1,
251 [Define if compiler supports -Winfinite-recursion])
252 AC_MSG_RESULT([yes])
253 ], [
254 KERNEL_INFINITE_RECURSION=
255 AC_MSG_RESULT([no])
256 ])
257
258 CC="$saved_cc"
259 CFLAGS="$saved_flags"
260 AC_SUBST([KERNEL_INFINITE_RECURSION])
261])
262
263dnl #
264dnl # Check if cc supports -Wformat-overflow option.
265dnl #
266AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FORMAT_OVERFLOW], [
267 AC_MSG_CHECKING([whether $CC supports -Wformat-overflow])
268
269 saved_flags="$CFLAGS"
270 CFLAGS="$CFLAGS -Werror -Wformat-overflow"
271
272 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
273 FORMAT_OVERFLOW=-Wformat-overflow
274 AC_DEFINE([HAVE_FORMAT_OVERFLOW], 1,
275 [Define if compiler supports -Wformat-overflow])
276 AC_MSG_RESULT([yes])
277 ], [
278 FORMAT_OVERFLOW=
279 AC_MSG_RESULT([no])
280 ])
281
282 CFLAGS="$saved_flags"
283 AC_SUBST([FORMAT_OVERFLOW])
284])
285
d5d2ef2b 286dnl #
9e532d17 287dnl # Check if cc supports -fno-omit-frame-pointer option.
d5d2ef2b
RE
288dnl #
289AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER], [
290 AC_MSG_CHECKING([whether $CC supports -fno-omit-frame-pointer])
291
292 saved_flags="$CFLAGS"
52c487a0 293 CFLAGS="$CFLAGS -Werror -fno-omit-frame-pointer"
d5d2ef2b
RE
294
295 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
296 NO_OMIT_FRAME_POINTER=-fno-omit-frame-pointer
297 AC_MSG_RESULT([yes])
298 ], [
299 NO_OMIT_FRAME_POINTER=
300 AC_MSG_RESULT([no])
301 ])
302
303 CFLAGS="$saved_flags"
304 AC_SUBST([NO_OMIT_FRAME_POINTER])
305])
5b7e6a36
RM
306
307dnl #
308dnl # Check if cc supports -fno-ipa-sra option.
309dnl #
310AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA], [
311 AC_MSG_CHECKING([whether $CC supports -fno-ipa-sra])
312
313 saved_flags="$CFLAGS"
314 CFLAGS="$CFLAGS -Werror -fno-ipa-sra"
315
316 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
317 NO_IPA_SRA=-fno-ipa-sra
318 AC_MSG_RESULT([yes])
319 ], [
320 NO_IPA_SRA=
321 AC_MSG_RESULT([no])
322 ])
323
324 CFLAGS="$saved_flags"
325 AC_SUBST([NO_IPA_SRA])
326])
fe975048
DS
327
328dnl #
329dnl # Check if kernel cc supports -fno-ipa-sra option.
330dnl #
331AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_NO_IPA_SRA], [
332 AC_MSG_CHECKING([whether $KERNEL_CC supports -fno-ipa-sra])
333
334 saved_cc="$CC"
335 saved_flags="$CFLAGS"
336 CC="gcc"
337 CFLAGS="$CFLAGS -Werror -fno-ipa-sra"
338
339 AS_IF([ test -n "$KERNEL_CC" ], [
340 CC="$KERNEL_CC"
341 ])
342 AS_IF([ test -n "$KERNEL_LLVM" ], [
343 CC="clang"
344 ])
345
346 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
347 KERNEL_NO_IPA_SRA=-fno-ipa-sra
348 AC_MSG_RESULT([yes])
349 ], [
350 KERNEL_NO_IPA_SRA=
351 AC_MSG_RESULT([no])
352 ])
353
354 CC="$saved_cc"
355 CFLAGS="$saved_flags"
356 AC_SUBST([KERNEL_NO_IPA_SRA])
357])