]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/blob - share/mk/bsd.sys.mk
MFC r234353:
[FreeBSD/stable/9.git] / share / mk / bsd.sys.mk
1 # $FreeBSD$
2 #
3 # This file contains common settings used for building FreeBSD
4 # sources.
5
6 # Enable various levels of compiler warning checks.  These may be
7 # overridden (e.g. if using a non-gcc compiler) by defining NO_WARNS.
8
9 # for GCC:   http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/Warning-Options.html
10
11 # the default is gnu99 for now
12 CSTD?=          gnu99
13
14 .if ${CSTD} == "k&r"
15 CFLAGS+=        -traditional
16 .elif ${CSTD} == "c89" || ${CSTD} == "c90"
17 CFLAGS+=        -std=iso9899:1990
18 .elif ${CSTD} == "c94" || ${CSTD} == "c95"
19 CFLAGS+=        -std=iso9899:199409
20 .elif ${CSTD} == "c99"
21 CFLAGS+=        -std=iso9899:1999
22 .else # CSTD
23 CFLAGS+=        -std=${CSTD}
24 .endif # CSTD
25 .if !defined(NO_WARNS)
26 # -pedantic is problematic because it also imposes namespace restrictions
27 #CFLAGS+=       -pedantic
28 .if defined(WARNS)
29 .if ${WARNS} >= 1
30 CWARNFLAGS+=    -Wsystem-headers
31 .if !defined(NO_WERROR) && ((${MK_CLANG_IS_CC} == "no" && \
32     ${CC:T:Mclang} != "clang") || !defined(NO_WERROR.clang))
33 CWARNFLAGS+=    -Werror
34 .endif # !NO_WERROR && (!CLANG || !NO_WERROR.clang)
35 .endif # WARNS >= 1
36 .if ${WARNS} >= 2
37 CWARNFLAGS+=    -Wall -Wno-format-y2k
38 .endif # WARNS >= 2
39 .if ${WARNS} >= 3
40 CWARNFLAGS+=    -W -Wno-unused-parameter -Wstrict-prototypes\
41                 -Wmissing-prototypes -Wpointer-arith
42 .endif # WARNS >= 3
43 .if ${WARNS} >= 4
44 CWARNFLAGS+=    -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow\
45                 -Wunused-parameter
46 .if !defined(NO_WCAST_ALIGN) && ((${MK_CLANG_IS_CC} == "no" && \
47     ${CC:T:Mclang} != "clang") || !defined(NO_WCAST_ALIGN.clang))
48 CWARNFLAGS+=    -Wcast-align
49 .endif # !NO_WCAST_ALIGN && (!CLANG || !NO_WCAST_ALIGN.clang)
50 .endif # WARNS >= 4
51 # BDECFLAGS
52 .if ${WARNS} >= 6
53 CWARNFLAGS+=    -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls\
54                 -Wold-style-definition
55 .endif # WARNS >= 6
56 .if ${WARNS} >= 2 && ${WARNS} <= 4
57 # XXX Delete -Wuninitialized by default for now -- the compiler doesn't
58 # XXX always get it right.
59 CWARNFLAGS+=    -Wno-uninitialized
60 .endif # WARNS >=2 && WARNS <= 4
61 CWARNFLAGS+=    -Wno-pointer-sign
62 # Clang has more warnings enabled by default, and when using -Wall, so if WARNS
63 # is set to low values, these have to be disabled explicitly.
64 .if ${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang"
65 .if ${WARNS} <= 6
66 CWARNFLAGS+=    -Wno-empty-body -Wno-string-plus-int
67 .endif # WARNS <= 6
68 .if ${WARNS} <= 3
69 CWARNFLAGS+=    -Wno-tautological-compare -Wno-unused-value\
70                 -Wno-parentheses-equality -Wno-unused-function -Wno-conversion
71 .endif # WARNS <= 3
72 .if ${WARNS} <= 2
73 CWARNFLAGS+=    -Wno-switch -Wno-switch-enum
74 .endif # WARNS <= 2
75 .if ${WARNS} <= 1
76 CWARNFLAGS+=    -Wno-parentheses
77 .endif # WARNS <= 1
78 .if defined(NO_WARRAY_BOUNDS)
79 CWARNFLAGS+=    -Wno-array-bounds
80 .endif # NO_WARRAY_BOUNDS
81 .endif # CLANG
82 .endif # WARNS
83
84 .if defined(FORMAT_AUDIT)
85 WFORMAT=        1
86 .endif # FORMAT_AUDIT
87 .if defined(WFORMAT)
88 .if ${WFORMAT} > 0
89 #CWARNFLAGS+=   -Wformat-nonliteral -Wformat-security -Wno-format-extra-args
90 CWARNFLAGS+=    -Wformat=2 -Wno-format-extra-args
91 .if ${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang"
92 .if ${WARNS} <= 3
93 CWARNFLAGS+=    -Wno-format-nonliteral
94 .endif # WARNS <= 3
95 .endif # CLANG
96 .if !defined(NO_WERROR) && ((${MK_CLANG_IS_CC} == "no" && \
97     ${CC:T:Mclang} != "clang") || !defined(NO_WERROR.clang))
98 CWARNFLAGS+=    -Werror
99 .endif # !NO_WERROR && (!CLANG || !NO_WERROR.clang)
100 .endif # WFORMAT > 0
101 .endif # WFORMAT
102 .if defined(NO_WFORMAT) || ((${MK_CLANG_IS_CC} != "no" || \
103     ${CC:T:Mclang} == "clang") && defined(NO_WFORMAT.clang))
104 CWARNFLAGS+=    -Wno-format
105 .endif # NO_WFORMAT || (CLANG && NO_WFORMAT.clang)
106 .endif # !NO_WARNS
107
108 .if defined(IGNORE_PRAGMA)
109 CWARNFLAGS+=    -Wno-unknown-pragmas
110 .endif # IGNORE_PRAGMA
111
112 .if ${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang"
113 CLANG_NO_IAS=    -no-integrated-as
114 CLANG_OPT_SMALL= -mstack-alignment=8 -mllvm -inline-threshold=3\
115                  -mllvm -enable-load-pre=false -mllvm -simplifycfg-dup-ret
116 CFLAGS+=         -Qunused-arguments
117 .endif # CLANG
118
119 .if ${MK_SSP} != "no" && ${MACHINE_CPUARCH} != "ia64" && \
120     ${MACHINE_CPUARCH} != "arm" && ${MACHINE_CPUARCH} != "mips"
121 # Don't use -Wstack-protector as it breaks world with -Werror.
122 SSP_CFLAGS?=    -fstack-protector
123 CFLAGS+=        ${SSP_CFLAGS}
124 .endif # SSP && !IA64 && !ARM && !MIPS
125
126 # Allow user-specified additional warning flags
127 CFLAGS+=        ${CWARNFLAGS}