]> begriffs open source - freertos/blob - FreeRTOS-Plus/Source/WolfSSL/m4/ax_harden_compiler_flags.m4
Add the option to specify a stack size in the standard demo MessageBuffer tests.
[freertos] / FreeRTOS-Plus / Source / WolfSSL / m4 / ax_harden_compiler_flags.m4
1 # ===========================================================================
2 #      https://github.com/BrianAker/ddm4/
3 # ===========================================================================
4 #
5 # SYNOPSIS
6 #
7 #   AX_HARDEN_COMPILER_FLAGS()
8 #   AX_HARDEN_LINKER_FLAGS()
9 #   AX_HARDEN_CC_COMPILER_FLAGS()
10 #   AX_HARDEN_CXX_COMPILER_FLAGS()
11 #
12 # DESCRIPTION
13 #
14 #   Any compiler flag that "hardens" or tests code. C99 is assumed.
15 #
16 #   NOTE: Implementation based on AX_APPEND_FLAG.
17 #
18 # LICENSE
19 #
20 #  Copyright (C) 2012 Brian Aker
21 #  All rights reserved.
22 #  
23 #  Redistribution and use in source and binary forms, with or without
24 #  modification, are permitted provided that the following conditions are
25 #  met:
26 #  
27 #      * Redistributions of source code must retain the above copyright
28 #  notice, this list of conditions and the following disclaimer.
29 #  
30 #      * Redistributions in binary form must reproduce the above
31 #  copyright notice, this list of conditions and the following disclaimer
32 #  in the documentation and/or other materials provided with the
33 #  distribution.
34 #  
35 #      * The names of its contributors may not be used to endorse or
36 #  promote products derived from this software without specific prior
37 #  written permission.
38 #  
39 #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
40 #  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
41 #  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
42 #  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
43 #  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 #  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45 #  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
46 #  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
47 #  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
48 #  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
49 #  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50
51 # The Following flags are not checked for
52 # -Wdeclaration-after-statement is counter to C99
53 # AX_APPEND_COMPILE_FLAGS([-std=c++11]) -- Not ready yet
54 # AX_APPEND_COMPILE_FLAGS([-pedantic]) -- ?
55 # AX_APPEND_COMPILE_FLAGS([-Wstack-protector]) -- Issues on 32bit compile
56 # AX_APPEND_COMPILE_FLAGS([-fstack-protector-all]) -- Issues on 32bit compile
57 # AX_APPEND_COMPILE_FLAGS([-Wlong-long]) -- Don't turn on for compatibility issues memcached_stat_st
58 # AX_APPEND_COMPILE_FLAGS([-Wold-style-definition],,[$ax_append_compile_cflags_extra])
59 # AX_APPEND_COMPILE_FLAGS([-std=c99],,[$ax_append_compile_cflags_extra])
60 # AX_APPEND_COMPILE_FLAGS([-Wlogical-op],,[$ax_append_compile_cflags_extra])
61 # AX_APPEND_COMPILE_FLAGS([-fstack-check],,[$ax_append_compile_cflags_extra]) -- problems with fastmath stack size checks
62 # AX_APPEND_COMPILE_FLAGS([-floop-parallelize-all],,[$ax_append_compile_cflags_extra]) -- causes RSA verify problem on x64
63 # AX_APPEND_COMPILE_FLAGS([-Wunreachable-code],,[$ax_append_compile_cflags_extra])  -- older clang and when gcc had it are buggy
64
65 #serial 4.1
66
67   AC_DEFUN([AX_HARDEN_LINKER_FLAGS], [
68       AC_REQUIRE([AX_VCS_CHECKOUT])
69       AC_REQUIRE([AX_DEBUG])
70
71       dnl If we are inside of VCS we append -Werror, otherwise we just use it to test other flags
72       AX_HARDEN_LIB=
73       ax_append_compile_link_flags_extra=
74       AS_IF([test "x$ac_cv_vcs_checkout" = "xyes"],[
75         AX_CHECK_LINK_FLAG([-Werror],[
76           AX_HARDEN_LIB="-Werror $AX_HARDEN_LIB"
77           ])
78         ],[
79         AX_CHECK_LINK_FLAG([-Werror],[
80           ax_append_compile_link_flags_extra='-Werror'
81           ])
82         ])
83
84       AX_CHECK_LINK_FLAG([-z relro -z now],[
85         AX_HARDEN_LIB="-z relro -z now $AX_HARDEN_LIB"
86         ],,[$ax_append_compile_link_flags_extra])
87
88       AX_CHECK_LINK_FLAG([-pie],[
89           AX_HARDEN_LIB="-pie $AX_HARDEN_LIB"
90           ],,[$ax_append_compile_link_flags_extra])
91
92       LIB="$LIB $AX_HARDEN_LIB"
93       ])
94
95   AC_DEFUN([AX_HARDEN_CC_COMPILER_FLAGS], [
96       AC_REQUIRE([AX_HARDEN_LINKER_FLAGS])
97
98       AC_LANG_PUSH([C])
99
100       CFLAGS=
101       ac_cv_warnings_as_errors=no
102       ax_append_compile_cflags_extra=
103       AS_IF([test "$ac_cv_vcs_checkout" = "yes"],[
104         AX_APPEND_COMPILE_FLAGS([-Werror])
105         ac_cv_warnings_as_errors=yes
106         ],[
107         AX_APPEND_COMPILE_FLAGS([-Werror],[ax_append_compile_cflags_extra])
108         ])
109
110       AS_IF([test "$ax_enable_debug" = "yes"], [
111         AX_APPEND_COMPILE_FLAGS([-g])
112         AX_APPEND_COMPILE_FLAGS([-ggdb],,[$ax_append_compile_cflags_extra])
113         AX_APPEND_COMPILE_FLAGS([-O0],,[$ax_append_compile_cflags_extra])
114         ],[])
115
116       AX_APPEND_COMPILE_FLAGS([-Wno-pragmas],,[$ax_append_compile_cflags_extra])
117
118       AX_APPEND_COMPILE_FLAGS([-Wall],,[$ax_append_compile_cflags_extra])
119       AX_APPEND_COMPILE_FLAGS([-Wno-strict-aliasing],,[$ax_append_compile_cflags_extra])
120       AX_APPEND_COMPILE_FLAGS([-Wextra],,[$ax_append_compile_cflags_extra])
121       AX_APPEND_COMPILE_FLAGS([-Wunknown-pragmas],,[$ax_append_compile_cflags_extra])
122       AX_APPEND_COMPILE_FLAGS([-Wthis-test-should-fail],,[$ax_append_compile_cflags_extra])
123       dnl Anything below this comment please keep sorted.
124       AS_IF([test "$CC" = "clang"],[],[
125         AX_APPEND_COMPILE_FLAGS([--param=ssp-buffer-size=1],,[$ax_append_compile_cflags_extra])
126         ])
127       AX_APPEND_COMPILE_FLAGS([-Waddress],,[$ax_append_compile_cflags_extra])
128       AX_APPEND_COMPILE_FLAGS([-Warray-bounds],,[$ax_append_compile_cflags_extra])
129       AX_APPEND_COMPILE_FLAGS([-Wbad-function-cast],,[$ax_append_compile_cflags_extra])
130       dnl Not in use -Wc++-compat
131       AX_APPEND_COMPILE_FLAGS([-Wchar-subscripts],,[$ax_append_compile_cflags_extra])
132       AX_APPEND_COMPILE_FLAGS([-Wcomment],,[$ax_append_compile_cflags_extra])
133       AX_APPEND_COMPILE_FLAGS([-Wfloat-equal],,[$ax_append_compile_cflags_extra])
134       AX_APPEND_COMPILE_FLAGS([-Wformat-security],,[$ax_append_compile_cflags_extra])
135       AX_APPEND_COMPILE_FLAGS([-Wformat=2],,[$ax_append_compile_cflags_extra])
136       AX_APPEND_COMPILE_FLAGS([-Wmaybe-uninitialized],,[$ax_append_compile_cflags_extra])
137       AX_APPEND_COMPILE_FLAGS([-Wmissing-field-initializers],,[$ax_append_compile_cflags_extra])
138       AX_APPEND_COMPILE_FLAGS([-Wmissing-noreturn],,[$ax_append_compile_cflags_extra])
139       AX_APPEND_COMPILE_FLAGS([-Wmissing-prototypes],,[$ax_append_compile_cflags_extra])
140       AX_APPEND_COMPILE_FLAGS([-Wnested-externs],,[$ax_append_compile_cflags_extra])
141       AX_APPEND_COMPILE_FLAGS([-Wnormalized=id],,[$ax_append_compile_cflags_extra])
142       AX_APPEND_COMPILE_FLAGS([-Woverride-init],,[$ax_append_compile_cflags_extra])
143       AX_APPEND_COMPILE_FLAGS([-Wpointer-arith],,[$ax_append_compile_cflags_extra])
144       AX_APPEND_COMPILE_FLAGS([-Wpointer-sign],,[$ax_append_compile_cflags_extra])
145       AX_APPEND_COMPILE_FLAGS([-Wredundant-decls],,[$ax_append_compile_cflags_extra])
146       AX_APPEND_COMPILE_FLAGS([-Wshadow],,[$ax_append_compile_cflags_extra])
147       AX_APPEND_COMPILE_FLAGS([-Wshorten-64-to-32],,[$ax_append_compile_cflags_extra])
148       AX_APPEND_COMPILE_FLAGS([-Wsign-compare],,[$ax_append_compile_cflags_extra])
149       AX_APPEND_COMPILE_FLAGS([-Wstrict-overflow=1],,[$ax_append_compile_cflags_extra])
150       AX_APPEND_COMPILE_FLAGS([-Wstrict-prototypes],,[$ax_append_compile_cflags_extra])
151       AX_APPEND_COMPILE_FLAGS([-Wswitch-enum],,[$ax_append_compile_cflags_extra])
152       AX_APPEND_COMPILE_FLAGS([-Wundef],,[$ax_append_compile_cflags_extra])
153       AX_APPEND_COMPILE_FLAGS([-Wunused],,[$ax_append_compile_cflags_extra])
154       AX_APPEND_COMPILE_FLAGS([-Wunused-result],,[$ax_append_compile_cflags_extra])
155       AX_APPEND_COMPILE_FLAGS([-Wunused-variable],,[$ax_append_compile_cflags_extra])
156       AX_APPEND_COMPILE_FLAGS([-Wwrite-strings],,[$ax_append_compile_cflags_extra])
157       AX_APPEND_COMPILE_FLAGS([-fwrapv],,[$ax_append_compile_cflags_extra])
158       AX_APPEND_COMPILE_FLAGS([-fPIE],,[$ax_append_compile_cflags_extra])
159       AC_LANG_POP
160       ])
161
162   AC_DEFUN([AX_HARDEN_CXX_COMPILER_FLAGS], [
163       AC_REQUIRE([AX_HARDEN_CC_COMPILER_FLAGS])
164       AC_LANG_PUSH([C++])
165
166       ax_append_compile_cxxflags_extra=
167       AS_IF([test "$ac_cv_warnings_as_errors" = "yes"],[
168         AX_APPEND_COMPILE_FLAGS([-Werror])
169         ],[
170         AX_APPEND_COMPILE_FLAGS([-Werror],[ax_append_compile_cxxflags_extra])
171         ])
172
173       AS_IF([test "$ax_enable_debug" = "yes" ], [
174         AX_APPEND_COMPILE_FLAGS([-g],,[$ax_append_compile_cxxflags_extra])
175         AX_APPEND_COMPILE_FLAGS([-O0],,[$ax_append_compile_cxxflags_extra])
176         AX_APPEND_COMPILE_FLAGS([-ggdb],,[$ax_append_compile_cxxflags_extra])
177         ],[
178         AX_APPEND_COMPILE_FLAGS([-D_FORTIFY_SOURCE=2],,[$ax_append_compile_cxxflags_extra])
179         ])
180
181       AS_IF([test "$ac_cv_vcs_checkout" = "yes" ], [
182         AX_APPEND_COMPILE_FLAGS([-Werror],,[$ax_append_compile_cxxflags_extra])
183         ],[
184         AX_APPEND_COMPILE_FLAGS([-Wno-pragmas],,[$ax_append_compile_cxxflags_extra])
185         ])
186
187       AX_APPEND_COMPILE_FLAGS([-Wall],,[$ax_append_compile_cxxflags_extra])
188       AX_APPEND_COMPILE_FLAGS([-Wno-strict-aliasing],,[$ax_append_compile_cxxflags_extra])
189       AX_APPEND_COMPILE_FLAGS([-Wextra],,[$ax_append_compile_cxxflags_extra])
190       AX_APPEND_COMPILE_FLAGS([-Wunknown-pragmas],,[$ax_append_compile_cxxflags_extra])
191       AX_APPEND_COMPILE_FLAGS([-Wthis-test-should-fail],,[$ax_append_compile_cxxflags_extra])
192       dnl Anything below this comment please keep sorted.
193       AX_APPEND_COMPILE_FLAGS([--param=ssp-buffer-size=1],,[$ax_append_compile_cxxflags_extra])
194       AX_APPEND_COMPILE_FLAGS([-Waddress],,[$ax_append_compile_cxxflags_extra])
195       AX_APPEND_COMPILE_FLAGS([-Warray-bounds],,[$ax_append_compile_cxxflags_extra])
196       AX_APPEND_COMPILE_FLAGS([-Wchar-subscripts],,[$ax_append_compile_cxxflags_extra])
197       AX_APPEND_COMPILE_FLAGS([-Wcomment],,[$ax_append_compile_cxxflags_extra])
198       AX_APPEND_COMPILE_FLAGS([-Wctor-dtor-privacy],,[$ax_append_compile_cxxflags_extra])
199       AX_APPEND_COMPILE_FLAGS([-Wfloat-equal],,[$ax_append_compile_cxxflags_extra])
200       AX_APPEND_COMPILE_FLAGS([-Wformat=2],,[$ax_append_compile_cxxflags_extra])
201       AX_APPEND_COMPILE_FLAGS([-Wmaybe-uninitialized],,[$ax_append_compile_cxxflags_extra])
202       AX_APPEND_COMPILE_FLAGS([-Wmissing-field-initializers],,[$ax_append_compile_cxxflags_extra])
203       AX_APPEND_COMPILE_FLAGS([-Wmissing-noreturn],,[$ax_append_compile_cxxflags_extra])
204       AX_APPEND_COMPILE_FLAGS([-Wnon-virtual-dtor],,[$ax_append_compile_cxxflags_extra])
205       AX_APPEND_COMPILE_FLAGS([-Wnormalized=id],,[$ax_append_compile_cxxflags_extra])
206       AX_APPEND_COMPILE_FLAGS([-Woverloaded-virtual],,[$ax_append_compile_cxxflags_extra])
207       AX_APPEND_COMPILE_FLAGS([-Wpointer-arith],,[$ax_append_compile_cxxflags_extra])
208       AX_APPEND_COMPILE_FLAGS([-Wredundant-decls],,[$ax_append_compile_cxxflags_extra])
209       AX_APPEND_COMPILE_FLAGS([-Wshadow],,[$ax_append_compile_cxxflags_extra])
210       AX_APPEND_COMPILE_FLAGS([-Wshorten-64-to-32],,[$ax_append_compile_cxxflags_extra])
211       AX_APPEND_COMPILE_FLAGS([-Wsign-compare],,[$ax_append_compile_cxxflags_extra])
212       AX_APPEND_COMPILE_FLAGS([-Wstrict-overflow=1],,[$ax_append_compile_cxxflags_extra])
213       AX_APPEND_COMPILE_FLAGS([-Wswitch-enum],,[$ax_append_compile_cxxflags_extra])
214       AX_APPEND_COMPILE_FLAGS([-Wundef],,[$ax_append_compile_cxxflags_extra])
215       AX_APPEND_COMPILE_FLAGS([-Wc++11-compat],,[$ax_append_compile_cxxflags_extra])
216       AX_APPEND_COMPILE_FLAGS([-Wunused],,[$ax_append_compile_cxxflags_extra])
217       AX_APPEND_COMPILE_FLAGS([-Wunused-result],,[$ax_append_compile_cxxflags_extra])
218       AX_APPEND_COMPILE_FLAGS([-Wunused-variable],,[$ax_append_compile_cxxflags_extra])
219       AX_APPEND_COMPILE_FLAGS([-Wwrite-strings],,[$ax_append_compile_cxxflags_extra])
220       AX_APPEND_COMPILE_FLAGS([-Wformat-security],,[$ax_append_compile_cxxflags_extra])
221       AX_APPEND_COMPILE_FLAGS([-fwrapv],,[$ax_append_compile_cxxflags_extra])
222       AC_LANG_POP
223   ])
224
225   AC_DEFUN([AX_HARDEN_COMPILER_FLAGS], [
226       AC_REQUIRE([AX_HARDEN_CXX_COMPILER_FLAGS])
227       ])
228
229   AC_DEFUN([AX_CC_OTHER_FLAGS], [
230       AC_REQUIRE([AX_HARDEN_CC_COMPILER_FLAGS])
231
232       AC_LANG_PUSH([C])
233       AX_APPEND_COMPILE_FLAGS([-pipe],,[$ax_append_compile_cflags_extra])
234       AC_LANG_POP
235       ])