]> git.proxmox.com Git - mirror_zfs.git/blob - config/always-compiler-options.m4
Linux 5.19 compat: asm/fpu/internal.h
[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 -fno-omit-frame-pointer option.
209 dnl #
210 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER], [
211 AC_MSG_CHECKING([whether $CC supports -fno-omit-frame-pointer])
212
213 saved_flags="$CFLAGS"
214 CFLAGS="$CFLAGS -Werror -fno-omit-frame-pointer"
215
216 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
217 NO_OMIT_FRAME_POINTER=-fno-omit-frame-pointer
218 AC_MSG_RESULT([yes])
219 ], [
220 NO_OMIT_FRAME_POINTER=
221 AC_MSG_RESULT([no])
222 ])
223
224 CFLAGS="$saved_flags"
225 AC_SUBST([NO_OMIT_FRAME_POINTER])
226 ])
227
228 dnl #
229 dnl # Check if cc supports -fno-ipa-sra option.
230 dnl #
231 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA], [
232 AC_MSG_CHECKING([whether $CC supports -fno-ipa-sra])
233
234 saved_flags="$CFLAGS"
235 CFLAGS="$CFLAGS -Werror -fno-ipa-sra"
236
237 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
238 NO_IPA_SRA=-fno-ipa-sra
239 AC_MSG_RESULT([yes])
240 ], [
241 NO_IPA_SRA=
242 AC_MSG_RESULT([no])
243 ])
244
245 CFLAGS="$saved_flags"
246 AC_SUBST([NO_IPA_SRA])
247 ])