]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - config/always-compiler-options.m4
Vendor import of openzfs master @ 184df27eef0abdc7ab2105b21257f753834b936b
[FreeBSD/FreeBSD.git] / config / always-compiler-options.m4
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"
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 # 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"
55         CFLAGS="$CFLAGS -Werror -Wframe-larger-than=4096"
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"
76         CFLAGS="$CFLAGS -Werror -Wno-format-truncation"
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
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
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"
124         CFLAGS="$CFLAGS -Werror -Wbool-compare"
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"
150         CFLAGS="$CFLAGS -Werror -Wunused-but-set-variable"
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 ])
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"
171         CFLAGS="$CFLAGS -Werror -fno-omit-frame-pointer"
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 ])
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 ])