xref: /freebsd-src/sys/contrib/openzfs/config/always-compiler-options.m4 (revision bb2d13b686e3ccf6c3ccb36209dfb7dcc108b182)
1eda14cbcSMatt Macydnl #
2c03c5b1cSMartin Matuskadnl # Enabled -fsanitize=address if supported by $CC.
3eda14cbcSMatt Macydnl #
4eda14cbcSMatt Macydnl # LDFLAGS needs -fsanitize=address at all times so libraries compiled with
5eda14cbcSMatt Macydnl # it will be linked successfully. CFLAGS will vary by binary being built.
6eda14cbcSMatt Macydnl #
7eda14cbcSMatt Macydnl # The ASAN_OPTIONS environment variable can be used to further control
8eda14cbcSMatt Macydnl # the behavior of binaries and libraries build with -fsanitize=address.
9eda14cbcSMatt Macydnl #
10eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_ASAN], [
11eda14cbcSMatt Macy	AC_MSG_CHECKING([whether to build with -fsanitize=address support])
12eda14cbcSMatt Macy	AC_ARG_ENABLE([asan],
13eda14cbcSMatt Macy		[AS_HELP_STRING([--enable-asan],
14eda14cbcSMatt Macy		[Enable -fsanitize=address support  @<:@default=no@:>@])],
15eda14cbcSMatt Macy		[],
16eda14cbcSMatt Macy		[enable_asan=no])
17eda14cbcSMatt Macy
18eda14cbcSMatt Macy	AM_CONDITIONAL([ASAN_ENABLED], [test x$enable_asan = xyes])
19eda14cbcSMatt Macy	AC_SUBST([ASAN_ENABLED], [$enable_asan])
20eda14cbcSMatt Macy	AC_MSG_RESULT($enable_asan)
21eda14cbcSMatt Macy
22eda14cbcSMatt Macy	AS_IF([ test "$enable_asan" = "yes" ], [
23eda14cbcSMatt Macy		AC_MSG_CHECKING([whether $CC supports -fsanitize=address])
24eda14cbcSMatt Macy		saved_cflags="$CFLAGS"
25eda14cbcSMatt Macy		CFLAGS="$CFLAGS -Werror -fsanitize=address"
26eda14cbcSMatt Macy		AC_LINK_IFELSE([
27eda14cbcSMatt Macy			AC_LANG_SOURCE([[ int main() { return 0; } ]])
28eda14cbcSMatt Macy		], [
29eda14cbcSMatt Macy			ASAN_CFLAGS="-fsanitize=address"
30eda14cbcSMatt Macy			ASAN_LDFLAGS="-fsanitize=address"
31eda14cbcSMatt Macy			ASAN_ZFS="_with_asan"
32eda14cbcSMatt Macy			AC_MSG_RESULT([yes])
33eda14cbcSMatt Macy		], [
34eda14cbcSMatt Macy			AC_MSG_ERROR([$CC does not support -fsanitize=address])
35eda14cbcSMatt Macy		])
36eda14cbcSMatt Macy		CFLAGS="$saved_cflags"
37eda14cbcSMatt Macy	], [
38eda14cbcSMatt Macy		ASAN_CFLAGS=""
39eda14cbcSMatt Macy		ASAN_LDFLAGS=""
40eda14cbcSMatt Macy		ASAN_ZFS="_without_asan"
41eda14cbcSMatt Macy	])
42eda14cbcSMatt Macy
43eda14cbcSMatt Macy	AC_SUBST([ASAN_CFLAGS])
44eda14cbcSMatt Macy	AC_SUBST([ASAN_LDFLAGS])
45eda14cbcSMatt Macy	AC_SUBST([ASAN_ZFS])
46eda14cbcSMatt Macy])
47eda14cbcSMatt Macy
48eda14cbcSMatt Macydnl #
49c03c5b1cSMartin Matuskadnl # Enabled -fsanitize=undefined if supported by cc.
50c03c5b1cSMartin Matuskadnl #
51c03c5b1cSMartin Matuskadnl # LDFLAGS needs -fsanitize=undefined at all times so libraries compiled with
52c03c5b1cSMartin Matuskadnl # it will be linked successfully. CFLAGS will vary by binary being built.
53c03c5b1cSMartin Matuskadnl #
54c03c5b1cSMartin Matuskadnl # The UBSAN_OPTIONS environment variable can be used to further control
55c03c5b1cSMartin Matuskadnl # the behavior of binaries and libraries build with -fsanitize=undefined.
56c03c5b1cSMartin Matuskadnl #
57c03c5b1cSMartin MatuskaAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_UBSAN], [
58c03c5b1cSMartin Matuska	AC_MSG_CHECKING([whether to build with -fsanitize=undefined support])
59c03c5b1cSMartin Matuska	AC_ARG_ENABLE([ubsan],
60c03c5b1cSMartin Matuska		[AS_HELP_STRING([--enable-ubsan],
61c03c5b1cSMartin Matuska		[Enable -fsanitize=undefined support  @<:@default=no@:>@])],
62c03c5b1cSMartin Matuska		[],
63c03c5b1cSMartin Matuska		[enable_ubsan=no])
64c03c5b1cSMartin Matuska
65c03c5b1cSMartin Matuska	AM_CONDITIONAL([UBSAN_ENABLED], [test x$enable_ubsan = xyes])
66c03c5b1cSMartin Matuska	AC_SUBST([UBSAN_ENABLED], [$enable_ubsan])
67c03c5b1cSMartin Matuska	AC_MSG_RESULT($enable_ubsan)
68c03c5b1cSMartin Matuska
69c03c5b1cSMartin Matuska	AS_IF([ test "$enable_ubsan" = "yes" ], [
70c03c5b1cSMartin Matuska		AC_MSG_CHECKING([whether $CC supports -fsanitize=undefined])
71c03c5b1cSMartin Matuska		saved_cflags="$CFLAGS"
72c03c5b1cSMartin Matuska		CFLAGS="$CFLAGS -Werror -fsanitize=undefined"
73c03c5b1cSMartin Matuska		AC_LINK_IFELSE([
74c03c5b1cSMartin Matuska			AC_LANG_SOURCE([[ int main() { return 0; } ]])
75c03c5b1cSMartin Matuska		], [
76c03c5b1cSMartin Matuska			UBSAN_CFLAGS="-fsanitize=undefined"
77c03c5b1cSMartin Matuska			UBSAN_LDFLAGS="-fsanitize=undefined"
78c03c5b1cSMartin Matuska			UBSAN_ZFS="_with_ubsan"
79c03c5b1cSMartin Matuska			AC_MSG_RESULT([yes])
80c03c5b1cSMartin Matuska		], [
81c03c5b1cSMartin Matuska			AC_MSG_ERROR([$CC does not support -fsanitize=undefined])
82c03c5b1cSMartin Matuska		])
83c03c5b1cSMartin Matuska		CFLAGS="$saved_cflags"
84c03c5b1cSMartin Matuska	], [
85c03c5b1cSMartin Matuska		UBSAN_CFLAGS=""
86c03c5b1cSMartin Matuska		UBSAN_LDFLAGS=""
87c03c5b1cSMartin Matuska		UBSAN_ZFS="_without_ubsan"
88c03c5b1cSMartin Matuska	])
89c03c5b1cSMartin Matuska
90c03c5b1cSMartin Matuska	AC_SUBST([UBSAN_CFLAGS])
91c03c5b1cSMartin Matuska	AC_SUBST([UBSAN_LDFLAGS])
92c03c5b1cSMartin Matuska	AC_SUBST([UBSAN_ZFS])
93c03c5b1cSMartin Matuska])
94c03c5b1cSMartin Matuska
95c03c5b1cSMartin Matuskadnl #
96c03c5b1cSMartin Matuskadnl # Check if cc supports -Wframe-larger-than=<size> option.
97eda14cbcSMatt Macydnl #
98eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN], [
99eda14cbcSMatt Macy	AC_MSG_CHECKING([whether $CC supports -Wframe-larger-than=<size>])
100eda14cbcSMatt Macy
101eda14cbcSMatt Macy	saved_flags="$CFLAGS"
102eda14cbcSMatt Macy	CFLAGS="$CFLAGS -Werror -Wframe-larger-than=4096"
103eda14cbcSMatt Macy
104eda14cbcSMatt Macy	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
105eda14cbcSMatt Macy		FRAME_LARGER_THAN="-Wframe-larger-than=4096"
106eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
107eda14cbcSMatt Macy	], [
108eda14cbcSMatt Macy		FRAME_LARGER_THAN=""
109eda14cbcSMatt Macy		AC_MSG_RESULT([no])
110eda14cbcSMatt Macy	])
111eda14cbcSMatt Macy
112eda14cbcSMatt Macy	CFLAGS="$saved_flags"
113eda14cbcSMatt Macy	AC_SUBST([FRAME_LARGER_THAN])
114eda14cbcSMatt Macy])
115eda14cbcSMatt Macy
116eda14cbcSMatt Macydnl #
117c03c5b1cSMartin Matuskadnl # Check if cc supports -Wno-format-truncation option.
118eda14cbcSMatt Macydnl #
119eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION], [
120eda14cbcSMatt Macy	AC_MSG_CHECKING([whether $CC supports -Wno-format-truncation])
121eda14cbcSMatt Macy
122eda14cbcSMatt Macy	saved_flags="$CFLAGS"
123eda14cbcSMatt Macy	CFLAGS="$CFLAGS -Werror -Wno-format-truncation"
124eda14cbcSMatt Macy
125eda14cbcSMatt Macy	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
126eda14cbcSMatt Macy		NO_FORMAT_TRUNCATION=-Wno-format-truncation
127eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
128eda14cbcSMatt Macy	], [
129eda14cbcSMatt Macy		NO_FORMAT_TRUNCATION=
130eda14cbcSMatt Macy		AC_MSG_RESULT([no])
131eda14cbcSMatt Macy	])
132eda14cbcSMatt Macy
133eda14cbcSMatt Macy	CFLAGS="$saved_flags"
134eda14cbcSMatt Macy	AC_SUBST([NO_FORMAT_TRUNCATION])
135eda14cbcSMatt Macy])
136eda14cbcSMatt Macy
137eda14cbcSMatt Macydnl #
138c03c5b1cSMartin Matuskadnl # Check if cc supports -Wno-format-zero-length option.
139eda14cbcSMatt Macydnl #
140eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH], [
141eda14cbcSMatt Macy	AC_MSG_CHECKING([whether $CC supports -Wno-format-zero-length])
142eda14cbcSMatt Macy
143eda14cbcSMatt Macy	saved_flags="$CFLAGS"
144eda14cbcSMatt Macy	CFLAGS="$CFLAGS -Werror -Wno-format-zero-length"
145eda14cbcSMatt Macy
146eda14cbcSMatt Macy	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
147eda14cbcSMatt Macy		NO_FORMAT_ZERO_LENGTH=-Wno-format-zero-length
148eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
149eda14cbcSMatt Macy	], [
150eda14cbcSMatt Macy		NO_FORMAT_ZERO_LENGTH=
151eda14cbcSMatt Macy		AC_MSG_RESULT([no])
152eda14cbcSMatt Macy	])
153eda14cbcSMatt Macy
154eda14cbcSMatt Macy	CFLAGS="$saved_flags"
155eda14cbcSMatt Macy	AC_SUBST([NO_FORMAT_ZERO_LENGTH])
156eda14cbcSMatt Macy])
157eda14cbcSMatt Macy
158eda14cbcSMatt Macydnl #
159c03c5b1cSMartin Matuskadnl # Check if cc supports -Wno-clobbered option.
160eda14cbcSMatt Macydnl #
161c03c5b1cSMartin Matuskadnl # We actually invoke it with the -Wclobbered option
162eda14cbcSMatt Macydnl # and infer the 'no-' version does or doesn't exist based upon
163eda14cbcSMatt Macydnl # the results.  This is required because when checking any of
164eda14cbcSMatt Macydnl # no- prefixed options gcc always returns success.
165eda14cbcSMatt Macydnl #
166c03c5b1cSMartin MatuskaAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED], [
167c03c5b1cSMartin Matuska	AC_MSG_CHECKING([whether $CC supports -Wno-clobbered])
168eda14cbcSMatt Macy
169eda14cbcSMatt Macy	saved_flags="$CFLAGS"
170c03c5b1cSMartin Matuska	CFLAGS="$CFLAGS -Werror -Wclobbered"
171eda14cbcSMatt Macy
172eda14cbcSMatt Macy	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
173c03c5b1cSMartin Matuska		NO_CLOBBERED=-Wno-clobbered
174eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
175eda14cbcSMatt Macy	], [
176c03c5b1cSMartin Matuska		NO_CLOBBERED=
177eda14cbcSMatt Macy		AC_MSG_RESULT([no])
178eda14cbcSMatt Macy	])
179eda14cbcSMatt Macy
180eda14cbcSMatt Macy	CFLAGS="$saved_flags"
181c03c5b1cSMartin Matuska	AC_SUBST([NO_CLOBBERED])
182eda14cbcSMatt Macy])
183eda14cbcSMatt Macy
184eda14cbcSMatt Macydnl #
185c03c5b1cSMartin Matuskadnl # Check if cc supports -Wimplicit-fallthrough option.
18653b70c86SMartin Matuskadnl #
18753b70c86SMartin MatuskaAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH], [
18853b70c86SMartin Matuska	AC_MSG_CHECKING([whether $CC supports -Wimplicit-fallthrough])
18953b70c86SMartin Matuska
19053b70c86SMartin Matuska	saved_flags="$CFLAGS"
19153b70c86SMartin Matuska	CFLAGS="$CFLAGS -Werror -Wimplicit-fallthrough"
19253b70c86SMartin Matuska
19353b70c86SMartin Matuska	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
19453b70c86SMartin Matuska		IMPLICIT_FALLTHROUGH=-Wimplicit-fallthrough
19553b70c86SMartin Matuska		AC_DEFINE([HAVE_IMPLICIT_FALLTHROUGH], 1,
19653b70c86SMartin Matuska			[Define if compiler supports -Wimplicit-fallthrough])
19753b70c86SMartin Matuska		AC_MSG_RESULT([yes])
19853b70c86SMartin Matuska	], [
19953b70c86SMartin Matuska		IMPLICIT_FALLTHROUGH=
20053b70c86SMartin Matuska		AC_MSG_RESULT([no])
20153b70c86SMartin Matuska	])
20253b70c86SMartin Matuska
20353b70c86SMartin Matuska	CFLAGS="$saved_flags"
20453b70c86SMartin Matuska	AC_SUBST([IMPLICIT_FALLTHROUGH])
20553b70c86SMartin Matuska])
20653b70c86SMartin Matuska
20753b70c86SMartin Matuskadnl #
208a0b956f5SMartin Matuskadnl # Check if cc supports -Winfinite-recursion option.
209a0b956f5SMartin Matuskadnl #
210a0b956f5SMartin MatuskaAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_INFINITE_RECURSION], [
211a0b956f5SMartin Matuska	AC_MSG_CHECKING([whether $CC supports -Winfinite-recursion])
212a0b956f5SMartin Matuska
213a0b956f5SMartin Matuska	saved_flags="$CFLAGS"
214a0b956f5SMartin Matuska	CFLAGS="$CFLAGS -Werror -Winfinite-recursion"
215a0b956f5SMartin Matuska
216a0b956f5SMartin Matuska	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
217a0b956f5SMartin Matuska		INFINITE_RECURSION=-Winfinite-recursion
218a0b956f5SMartin Matuska		AC_DEFINE([HAVE_INFINITE_RECURSION], 1,
219a0b956f5SMartin Matuska			[Define if compiler supports -Winfinite-recursion])
220a0b956f5SMartin Matuska		AC_MSG_RESULT([yes])
221a0b956f5SMartin Matuska	], [
222a0b956f5SMartin Matuska		INFINITE_RECURSION=
223a0b956f5SMartin Matuska		AC_MSG_RESULT([no])
224a0b956f5SMartin Matuska	])
225a0b956f5SMartin Matuska
226a0b956f5SMartin Matuska	CFLAGS="$saved_flags"
227a0b956f5SMartin Matuska	AC_SUBST([INFINITE_RECURSION])
228a0b956f5SMartin Matuska])
229a0b956f5SMartin Matuska
230a0b956f5SMartin Matuskadnl #
231*bb2d13b6SMartin Matuskadnl # Check if kernel cc supports -Winfinite-recursion option.
232*bb2d13b6SMartin Matuskadnl #
233*bb2d13b6SMartin MatuskaAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_INFINITE_RECURSION], [
234*bb2d13b6SMartin Matuska	AC_MSG_CHECKING([whether $KERNEL_CC supports -Winfinite-recursion])
235*bb2d13b6SMartin Matuska
236*bb2d13b6SMartin Matuska	saved_cc="$CC"
237*bb2d13b6SMartin Matuska	saved_flags="$CFLAGS"
238*bb2d13b6SMartin Matuska	CC="gcc"
239*bb2d13b6SMartin Matuska	CFLAGS="$CFLAGS -Werror -Winfinite-recursion"
240*bb2d13b6SMartin Matuska
241*bb2d13b6SMartin Matuska	AS_IF([ test -n "$KERNEL_CC" ], [
242*bb2d13b6SMartin Matuska		CC="$KERNEL_CC"
243*bb2d13b6SMartin Matuska	])
244*bb2d13b6SMartin Matuska	AS_IF([ test -n "$KERNEL_LLVM" ], [
245*bb2d13b6SMartin Matuska		CC="clang"
246*bb2d13b6SMartin Matuska	])
247*bb2d13b6SMartin Matuska
248*bb2d13b6SMartin Matuska	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
249*bb2d13b6SMartin Matuska		KERNEL_INFINITE_RECURSION=-Winfinite-recursion
250*bb2d13b6SMartin Matuska		AC_DEFINE([HAVE_KERNEL_INFINITE_RECURSION], 1,
251*bb2d13b6SMartin Matuska			[Define if compiler supports -Winfinite-recursion])
252*bb2d13b6SMartin Matuska		AC_MSG_RESULT([yes])
253*bb2d13b6SMartin Matuska	], [
254*bb2d13b6SMartin Matuska		KERNEL_INFINITE_RECURSION=
255*bb2d13b6SMartin Matuska		AC_MSG_RESULT([no])
256*bb2d13b6SMartin Matuska	])
257*bb2d13b6SMartin Matuska
258*bb2d13b6SMartin Matuska	CC="$saved_cc"
259*bb2d13b6SMartin Matuska	CFLAGS="$saved_flags"
260*bb2d13b6SMartin Matuska	AC_SUBST([KERNEL_INFINITE_RECURSION])
261*bb2d13b6SMartin Matuska])
262*bb2d13b6SMartin Matuska
263*bb2d13b6SMartin Matuskadnl #
264*bb2d13b6SMartin Matuskadnl # Check if cc supports -Wformat-overflow option.
265*bb2d13b6SMartin Matuskadnl #
266*bb2d13b6SMartin MatuskaAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FORMAT_OVERFLOW], [
267*bb2d13b6SMartin Matuska	AC_MSG_CHECKING([whether $CC supports -Wformat-overflow])
268*bb2d13b6SMartin Matuska
269*bb2d13b6SMartin Matuska	saved_flags="$CFLAGS"
270*bb2d13b6SMartin Matuska	CFLAGS="$CFLAGS -Werror -Wformat-overflow"
271*bb2d13b6SMartin Matuska
272*bb2d13b6SMartin Matuska	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
273*bb2d13b6SMartin Matuska		FORMAT_OVERFLOW=-Wformat-overflow
274*bb2d13b6SMartin Matuska		AC_DEFINE([HAVE_FORMAT_OVERFLOW], 1,
275*bb2d13b6SMartin Matuska			[Define if compiler supports -Wformat-overflow])
276*bb2d13b6SMartin Matuska		AC_MSG_RESULT([yes])
277*bb2d13b6SMartin Matuska	], [
278*bb2d13b6SMartin Matuska		FORMAT_OVERFLOW=
279*bb2d13b6SMartin Matuska		AC_MSG_RESULT([no])
280*bb2d13b6SMartin Matuska	])
281*bb2d13b6SMartin Matuska
282*bb2d13b6SMartin Matuska	CFLAGS="$saved_flags"
283*bb2d13b6SMartin Matuska	AC_SUBST([FORMAT_OVERFLOW])
284*bb2d13b6SMartin Matuska])
285*bb2d13b6SMartin Matuska
286*bb2d13b6SMartin Matuskadnl #
287c03c5b1cSMartin Matuskadnl # Check if cc supports -fno-omit-frame-pointer option.
288eda14cbcSMatt Macydnl #
289eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER], [
290eda14cbcSMatt Macy	AC_MSG_CHECKING([whether $CC supports -fno-omit-frame-pointer])
291eda14cbcSMatt Macy
292eda14cbcSMatt Macy	saved_flags="$CFLAGS"
293eda14cbcSMatt Macy	CFLAGS="$CFLAGS -Werror -fno-omit-frame-pointer"
294eda14cbcSMatt Macy
295eda14cbcSMatt Macy	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
296eda14cbcSMatt Macy		NO_OMIT_FRAME_POINTER=-fno-omit-frame-pointer
297eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
298eda14cbcSMatt Macy	], [
299eda14cbcSMatt Macy		NO_OMIT_FRAME_POINTER=
300eda14cbcSMatt Macy		AC_MSG_RESULT([no])
301eda14cbcSMatt Macy	])
302eda14cbcSMatt Macy
303eda14cbcSMatt Macy	CFLAGS="$saved_flags"
304eda14cbcSMatt Macy	AC_SUBST([NO_OMIT_FRAME_POINTER])
305eda14cbcSMatt Macy])
306eda14cbcSMatt Macy
307eda14cbcSMatt Macydnl #
308eda14cbcSMatt Macydnl # Check if cc supports -fno-ipa-sra option.
309eda14cbcSMatt Macydnl #
310eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA], [
311eda14cbcSMatt Macy	AC_MSG_CHECKING([whether $CC supports -fno-ipa-sra])
312eda14cbcSMatt Macy
313eda14cbcSMatt Macy	saved_flags="$CFLAGS"
314eda14cbcSMatt Macy	CFLAGS="$CFLAGS -Werror -fno-ipa-sra"
315eda14cbcSMatt Macy
316eda14cbcSMatt Macy	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
317eda14cbcSMatt Macy		NO_IPA_SRA=-fno-ipa-sra
318eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
319eda14cbcSMatt Macy	], [
320eda14cbcSMatt Macy		NO_IPA_SRA=
321eda14cbcSMatt Macy		AC_MSG_RESULT([no])
322eda14cbcSMatt Macy	])
323eda14cbcSMatt Macy
324eda14cbcSMatt Macy	CFLAGS="$saved_flags"
325eda14cbcSMatt Macy	AC_SUBST([NO_IPA_SRA])
326eda14cbcSMatt Macy])
327*bb2d13b6SMartin Matuska
328*bb2d13b6SMartin Matuskadnl #
329*bb2d13b6SMartin Matuskadnl # Check if kernel cc supports -fno-ipa-sra option.
330*bb2d13b6SMartin Matuskadnl #
331*bb2d13b6SMartin MatuskaAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_NO_IPA_SRA], [
332*bb2d13b6SMartin Matuska	AC_MSG_CHECKING([whether $KERNEL_CC supports -fno-ipa-sra])
333*bb2d13b6SMartin Matuska
334*bb2d13b6SMartin Matuska	saved_cc="$CC"
335*bb2d13b6SMartin Matuska	saved_flags="$CFLAGS"
336*bb2d13b6SMartin Matuska	CC="gcc"
337*bb2d13b6SMartin Matuska	CFLAGS="$CFLAGS -Werror -fno-ipa-sra"
338*bb2d13b6SMartin Matuska
339*bb2d13b6SMartin Matuska	AS_IF([ test -n "$KERNEL_CC" ], [
340*bb2d13b6SMartin Matuska		CC="$KERNEL_CC"
341*bb2d13b6SMartin Matuska	])
342*bb2d13b6SMartin Matuska	AS_IF([ test -n "$KERNEL_LLVM" ], [
343*bb2d13b6SMartin Matuska		CC="clang"
344*bb2d13b6SMartin Matuska	])
345*bb2d13b6SMartin Matuska
346*bb2d13b6SMartin Matuska	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
347*bb2d13b6SMartin Matuska		KERNEL_NO_IPA_SRA=-fno-ipa-sra
348*bb2d13b6SMartin Matuska		AC_MSG_RESULT([yes])
349*bb2d13b6SMartin Matuska	], [
350*bb2d13b6SMartin Matuska		KERNEL_NO_IPA_SRA=
351*bb2d13b6SMartin Matuska		AC_MSG_RESULT([no])
352*bb2d13b6SMartin Matuska	])
353*bb2d13b6SMartin Matuska
354*bb2d13b6SMartin Matuska	CC="$saved_cc"
355*bb2d13b6SMartin Matuska	CFLAGS="$saved_flags"
356*bb2d13b6SMartin Matuska	AC_SUBST([KERNEL_NO_IPA_SRA])
357*bb2d13b6SMartin Matuska])
358