xref: /dflybsd-src/share/mk/bsd.sys.mk (revision 6a8dae245892a6597947ffc791aac71bc217acb4)
1984263bcSMatthew Dillon# $FreeBSD: src/share/mk/bsd.sys.mk,v 1.3.2.5 2002/07/03 16:59:14 des Exp $
2984263bcSMatthew Dillon#
3114580acSSascha Wildner# This file contains common settings used for building DragonFly
4984263bcSMatthew Dillon# sources.
5984263bcSMatthew Dillon
602ad80c7Szrj# Support handling -W flags for both host cc and target cc.
702ad80c7Szrj.if defined(__USE_HOST_CCVER)
802ad80c7Szrj_WCCVER=	${HOST_CCVER}
902ad80c7Szrj.else
1002ad80c7Szrj_WCCVER=	${CCVER}
1102ad80c7Szrj.endif
1202ad80c7Szrj
13*6a8dae24SSascha WildnerCSTD?=	gnu11
1472819462SSascha Wildner
156dd73847SPeter Avalos.if ${CSTD} == "k&r"
166dd73847SPeter AvalosCFLAGS		+= -traditional
176dd73847SPeter Avalos.elif ${CSTD} == "c89" || ${CSTD} == "c90"
186dd73847SPeter AvalosCFLAGS		+= -std=iso9899:1990
196dd73847SPeter Avalos.elif ${CSTD} == "c94" || ${CSTD} == "c95"
206dd73847SPeter AvalosCFLAGS		+= -std=iso9899:199409
216dd73847SPeter Avalos.elif ${CSTD} == "c99"
226dd73847SPeter AvalosCFLAGS		+= -std=iso9899:1999
236dd73847SPeter Avalos.else
246dd73847SPeter AvalosCFLAGS		+= -std=${CSTD}
256dd73847SPeter Avalos.endif
26c222c6d2SSascha Wildner
27c3c55883Szrj# Explicitly clear _cnowarnflags (should not be used in Makefiles).
28c3c55883Szrj_cnowarnflags=
29c3c55883Szrj
30c222c6d2SSascha Wildner# Enable various levels of compiler warning checks.  These may be
31c222c6d2SSascha Wildner# overridden (e.g. if using a non-gcc compiler) by defining NO_WARNS.
32c222c6d2SSascha Wildner
33c222c6d2SSascha Wildner.if !defined(NO_WARNS)
34984263bcSMatthew Dillon. if defined(WARNS)
3538842275SPeter Avalos.  if ${WARNS} >= 1
360752fcb2SSascha WildnerCWARNFLAGS	+=	-Wmissing-include-dirs -Wsystem-headers
3743392796SSascha Wildner.   if !defined(NO_WERROR) && (${_WCCVER} == "gcc47" || ${_WCCVER} == "gcc80")
38dcdd01caSSascha WildnerCWARNFLAGS	+=	-Werror
39dcdd01caSSascha Wildner.   endif
40984263bcSMatthew Dillon.  endif
4138842275SPeter Avalos.  if ${WARNS} >= 2
42c3c55883SzrjCWARNFLAGS	+=	-Wall -Wformat-security -Winit-self
43c8960d50SJeroen Ruigrok/asmodai.  endif
4438842275SPeter Avalos.  if ${WARNS} >= 3
45c3c55883SzrjCWARNFLAGS	+=	-Wextra -Wstrict-prototypes\
46e7302aa0SSascha Wildner			-Wmissing-prototypes -Wpointer-arith\
47e7302aa0SSascha Wildner			-Wold-style-definition
48c8960d50SJeroen Ruigrok/asmodai.  endif
4938842275SPeter Avalos.  if ${WARNS} >= 4
506dd73847SPeter AvalosCWARNFLAGS	+=	-Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch\
516dd73847SPeter Avalos			-Wshadow -Wcast-align -Wunused-parameter
52c8960d50SJeroen Ruigrok/asmodai.  endif
5338842275SPeter Avalos.  if ${WARNS} >= 6
5400be51d6SSascha WildnerCWARNFLAGS	+=	-Wchar-subscripts -Winline -Wnested-externs\
5500be51d6SSascha Wildner			-Wredundant-decls
566dd73847SPeter Avalos.  endif
5717e53fceSzrj.  if ${WARNS} >= 2 && ${WARNS} <= 6
5817e53fceSzrj# Delete -Wno-pointer-sign from -Wall by default (C only).
5917e53fceSzrj_cnowarnflags	+=	-Wno-pointer-sign
6017e53fceSzrj.  endif
616dd73847SPeter Avalos.  if ${WARNS} >= 2 && ${WARNS} <= 4
62dbf753c5SSascha Wildner# XXX Delete -Wmaybe-uninitialized by default for now -- the compiler doesn't
636dd73847SPeter Avalos# XXX always get it right.
6402ad80c7Szrj.   if ${_WCCVER:Mgcc*}
65c3c55883Szrj_cnowarnflags	+=	-Wno-maybe-uninitialized
66381fa6daSSascha Wildner.   else
67c3c55883Szrj_cnowarnflags	+=	-Wno-uninitialized
68381fa6daSSascha Wildner.   endif
69984263bcSMatthew Dillon.  endif
7017e53fceSzrj.  if ${WARNS} == 3
7117e53fceSzrj# Delete -Wno-unused-parameter from -Wextra by default only if WARNS < 4.
7217e53fceSzrj_cnowarnflags	+=	-Wno-unused-parameter
7317e53fceSzrj.  endif
7478da3f72Szrj# Delete -Wformat-* family that give little benefits, same for stringop.
7578da3f72Szrj.  if ${WARNS} >= 2 && ${WARNS} <= 6 && ${_WCCVER:Mgcc8*}
7678da3f72Szrj_cnowarnflags	+=	-Wno-format-overflow -Wno-format-truncation
7778da3f72Szrj_cnowarnflags	+=	-Wno-stringop-truncation
7878da3f72Szrj.  endif
7978da3f72Szrj.  if ${WARNS} >= 1 && ${WARNS} <= 6 && ${_WCCVER:Mgcc8*}
8078da3f72Szrj_cnowarnflags	+=	-Wno-stringop-overflow
8178da3f72Szrj.  endif
82c0b7aaebSSascha Wildner# Activate gcc47's -Wunused-but-set-variable (which is in -Wall) and
83c0b7aaebSSascha Wildner# -Wunused-but-set-parameter (which is in -Wextra) only at WARNS >= 4
84c0b7aaebSSascha Wildner# (which is the level when also -Wunused-parameter comes into play).
8502ad80c7Szrj.  if ${WARNS} >= 2 && ${WARNS} <= 3 && ${_WCCVER:Mgcc*}
86c3c55883Szrj_cnowarnflags	+=	-Wno-unused-but-set-variable
87c0b7aaebSSascha Wildner.  endif
8802ad80c7Szrj.  if ${WARNS} == 3 && ${_WCCVER:Mgcc*}
89c3c55883Szrj_cnowarnflags	+=	-Wno-unused-but-set-parameter
90c0b7aaebSSascha Wildner.  endif
9102ad80c7Szrj.  if ${WARNS} == 3 && (${_WCCVER:Mgcc49} || ${_WCCVER:Mgcc[5-]*})
92c3c55883Szrj_cnowarnflags	+=	-Wno-unused-value
93b6e6d219SJohn Marino.  endif
9478da3f72Szrj.  if ${WARNS} == 3 && ${_WCCVER:Mgcc8*}
9578da3f72Szrj_cnowarnflags	+=	-Wno-implicit-fallthrough
9678da3f72Szrj.  endif
9702ad80c7Szrj.  if ${WARNS} >= 2 && ${_WCCVER:Mgcc4[789]}
98c3c55883Szrj_cnowarnflags	+=	-Wno-error=maybe-uninitialized\
99f357dbd4Szrj			-Wno-error=uninitialized\
100f357dbd4Szrj			-Wno-error=shadow
101f357dbd4Szrj.  endif
102abb5c9c2Szrj.  if ${WARNS} >= 3 && ${_WCCVER:Mgcc4[789]}
103abb5c9c2Szrj_cnowarnflags	+=	-Wno-error=missing-field-initializers
104abb5c9c2Szrj.  endif
10582a792caSzrj# Disable -Werror selectively for -Os and -Og compilations.  Both -Winline and
10682a792caSzrj# -Wmaybe-uninitialized are noisy and should be caught by standard -O and -O2.
10782a792caSzrj# These are still useful diagnostics while investigating compilation issues.
10882a792caSzrj.  if defined(WORLD_CCOPTLEVEL) && (${WORLD_CCOPTLEVEL:Mg} || ${WORLD_CCOPTLEVEL:Ms})
10982a792caSzrj.   if ${WARNS} >= 6
11082a792caSzrjCWARNFLAGS	+=	-Wno-error=inline
11182a792caSzrj.   endif
11202ad80c7Szrj.   if ${WARNS} >= 5 && ${_WCCVER:Mgcc*}
11382a792caSzrjCWARNFLAGS	+=	-Wno-error=maybe-uninitialized
11482a792caSzrj.   endif
11582a792caSzrj.  endif
116984263bcSMatthew Dillon. endif
117984263bcSMatthew Dillon
118984263bcSMatthew Dillon. if defined(FORMAT_AUDIT)
119984263bcSMatthew DillonWFORMAT		=	1
120984263bcSMatthew Dillon. endif
121984263bcSMatthew Dillon. if defined(WFORMAT)
122984263bcSMatthew Dillon.  if ${WFORMAT} > 0
123c3c55883SzrjCWARNFLAGS	+=	-Wformat=2
12443392796SSascha Wildner.   if !defined(NO_WERROR) && (${_WCCVER} == "gcc47" || ${_WCCVER} == "gcc80")
125dcdd01caSSascha WildnerCWARNFLAGS	+=	-Werror
126dcdd01caSSascha Wildner.   endif
127984263bcSMatthew Dillon.  endif
128984263bcSMatthew Dillon. endif
129984263bcSMatthew Dillon.endif
130984263bcSMatthew Dillon
1318649048eSSascha Wildner# Build world with -fno-common. This will be default with GCC 10.
1328649048eSSascha Wildner#
1338649048eSSascha Wildner.if ${_WCCVER:Ngcc1[0-9][0-9]}
1348649048eSSascha WildnerCFLAGS		+=	-fno-common
1358649048eSSascha Wildner.endif
1368649048eSSascha Wildner
13702ad80c7Szrj.if defined(NO_WCAST_FUNCTION_TYPE) && ${WARNS} >= 3 && ${_WCCVER:Mgcc8*}
138d4e390fcSzrj_cnowarnflags	+=      -Wno-cast-function-type
139d4e390fcSzrj.endif
14033d7ed01SMatthew Dillon.if defined(NO_WARRAY_BOUNDS)
141c3c55883Szrj_cnowarnflags	+=      -Wno-array-bounds
14233d7ed01SMatthew Dillon.endif
14333d7ed01SMatthew Dillon.if defined(NO_STRICT_OVERFLOW)
14433d7ed01SMatthew DillonCFLAGS		+=	-fno-strict-overflow
14533d7ed01SMatthew Dillon.endif
14633d7ed01SMatthew Dillon.if defined(NO_STRICT_ALIASING)
14733d7ed01SMatthew DillonCFLAGS		+=      -fno-strict-aliasing
14833d7ed01SMatthew Dillon.endif
14933d7ed01SMatthew Dillon
15033d7ed01SMatthew Dillon
151c3c55883Szrj# Add -Wno-foo flags last
152c3c55883Szrj.if !defined(WARNS_AUDIT)
153c3c55883SzrjCWARNFLAGS	+=	${_cnowarnflags}
154c3c55883Szrj.endif
155c3c55883Szrj
156984263bcSMatthew Dillon# Allow user-specified additional warning flags
157984263bcSMatthew DillonCFLAGS		+=	${CWARNFLAGS}
1583da8e88fSJohn Marino
1593da8e88fSJohn Marino# Tell bmake not to mistake standard targets for things to be searched for
1603da8e88fSJohn Marino# or expect to ever be up-to-date
1613da8e88fSJohn MarinoPHONY_NOTMAIN = afterdepend afterinstall all beforedepend beforeinstall \
1623da8e88fSJohn Marino	beforelinking build build-tools buildfiles buildincludes \
1633da8e88fSJohn Marino	checkdpadd clean cleandepend cleandir cleanobj configure \
1643da8e88fSJohn Marino	depend dependall distclean distribute exe extract fetch \
1653da8e88fSJohn Marino	html includes install installfiles installincludes lint \
1663da8e88fSJohn Marino	obj objlink objs objwarn patch realall realdepend \
1673da8e88fSJohn Marino	realinstall regress subdir-all subdir-depend subdir-install \
1683da8e88fSJohn Marino	tags whereobj
1693da8e88fSJohn Marino
170874f7ebeSzrj# if given PROG matches anything in the PHONY list, exclude it.
171874f7ebeSzrj.PHONY: ${PHONY_NOTMAIN:N${PROG:U}}
1723da8e88fSJohn Marino.NOTMAIN: ${PHONY_NOTMAIN}
173