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