bsd.sys.mk revision 233052
176861Skris# $FreeBSD: head/share/mk/bsd.sys.mk 233052 2012-03-16 23:19:45Z dim $ 276861Skris# 376861Skris# This file contains common settings used for building FreeBSD 476861Skris# sources. 576861Skris 676861Skris# Enable various levels of compiler warning checks. These may be 776861Skris# overridden (e.g. if using a non-gcc compiler) by defining NO_WARNS. 876861Skris 9233052Sdim# for GCC: http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/Warning-Options.html 1096316Sobrien 11189801Srdivacky# the default is gnu99 for now 12233052SdimCSTD?= gnu99 13189801Srdivacky 14220863Sdim.if ${CSTD} == "k&r" 15233052SdimCFLAGS+= -traditional 16220863Sdim.elif ${CSTD} == "c89" || ${CSTD} == "c90" 17233052SdimCFLAGS+= -std=iso9899:1990 18220863Sdim.elif ${CSTD} == "c94" || ${CSTD} == "c95" 19233052SdimCFLAGS+= -std=iso9899:199409 20220863Sdim.elif ${CSTD} == "c99" 21233052SdimCFLAGS+= -std=iso9899:1999 22233052Sdim.else # CSTD 23233052SdimCFLAGS+= -std=${CSTD} 24233052Sdim.endif # CSTD 25220863Sdim.if !defined(NO_WARNS) 26161214Sdes# -pedantic is problematic because it also imposes namespace restrictions 27233052Sdim#CFLAGS+= -pedantic 28233052Sdim.if defined(WARNS) 29233052Sdim.if ${WARNS} >= 1 30233052SdimCWARNFLAGS+= -Wsystem-headers 31233052Sdim.if !defined(NO_WERROR) && ((${MK_CLANG_IS_CC} == "no" && \ 32233052Sdim ${CC:T:Mclang} != "clang") || !defined(NO_WERROR.clang)) 33233052SdimCWARNFLAGS+= -Werror 34233052Sdim.endif # !NO_WERROR && (!CLANG || !NO_WERROR.clang) 35233052Sdim.endif # WARNS >= 1 36233052Sdim.if ${WARNS} >= 2 37233052SdimCWARNFLAGS+= -Wall -Wno-format-y2k 38233052Sdim.endif # WARNS >= 2 39233052Sdim.if ${WARNS} >= 3 40233052SdimCWARNFLAGS+= -W -Wno-unused-parameter -Wstrict-prototypes\ 41233052Sdim -Wmissing-prototypes -Wpointer-arith 42233052Sdim.endif # WARNS >= 3 43233052Sdim.if ${WARNS} >= 4 44233052SdimCWARNFLAGS+= -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow\ 45233052Sdim -Wunused-parameter 46233052Sdim.if !defined(NO_WCAST_ALIGN) && ((${MK_CLANG_IS_CC} == "no" && \ 47233052Sdim ${CC:T:Mclang} != "clang") || !defined(NO_WCAST_ALIGN.clang)) 48233052SdimCWARNFLAGS+= -Wcast-align 49233052Sdim.endif # !NO_WCAST_ALIGN && (!CLANG || !NO_WCAST_ALIGN.clang) 50233052Sdim.endif # WARNS >= 4 5194332Sobrien# BDECFLAGS 52233052Sdim.if ${WARNS} >= 6 53233052SdimCWARNFLAGS+= -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls\ 54233052Sdim -Wold-style-definition 55233052Sdim.endif # WARNS >= 6 56233052Sdim.if ${WARNS} >= 2 && ${WARNS} <= 4 5788936Sdwmalone# XXX Delete -Wuninitialized by default for now -- the compiler doesn't 5888936Sdwmalone# XXX always get it right. 59233052SdimCWARNFLAGS+= -Wno-uninitialized 60233052Sdim.endif # WARNS >=2 && WARNS <= 4 61233052SdimCWARNFLAGS+= -Wno-pointer-sign 62228546Sdim# Clang has more warnings enabled by default, and when using -Wall, so if WARNS 63228546Sdim# is set to low values, these have to be disabled explicitly. 64233052Sdim.if ${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang" 65233052Sdim.if ${WARNS} <= 3 66233052SdimCWARNFLAGS+= -Wno-tautological-compare -Wno-unused-value\ 67233052Sdim -Wno-parentheses-equality -Wno-unused-function -Wno-conversion 68233052Sdim.endif # WARNS <= 3 69233052Sdim.if ${WARNS} <= 2 70233052SdimCWARNFLAGS+= -Wno-switch-enum -Wno-empty-body 71233052Sdim.endif # WARNS <= 2 72233052Sdim.if ${WARNS} <= 1 73233052SdimCWARNFLAGS+= -Wno-parentheses 74233052Sdim.endif # WARNS <= 1 75233052Sdim.if defined(NO_WARRAY_BOUNDS) 76233052SdimCWARNFLAGS+= -Wno-array-bounds 77233052Sdim.endif # NO_WARRAY_BOUNDS 78233052Sdim.endif # CLANG 79233052Sdim.endif # WARNS 8076861Skris 81233052Sdim.if defined(FORMAT_AUDIT) 82233052SdimWFORMAT= 1 83233052Sdim.endif # FORMAT_AUDIT 84233052Sdim.if defined(WFORMAT) 85233052Sdim.if ${WFORMAT} > 0 86233052Sdim#CWARNFLAGS+= -Wformat-nonliteral -Wformat-security -Wno-format-extra-args 87233052SdimCWARNFLAGS+= -Wformat=2 -Wno-format-extra-args 88233052Sdim.if !defined(NO_WERROR) && ((${MK_CLANG_IS_CC} == "no" && \ 89233052Sdim ${CC:T:Mclang} != "clang") || !defined(NO_WERROR.clang)) 90233052SdimCWARNFLAGS+= -Werror 91233052Sdim.endif # !NO_WERROR && (!CLANG || !NO_WERROR.clang) 92233052Sdim.endif # WFORMAT > 0 93233052Sdim.endif # WFORMAT 94233052Sdim.if defined(NO_WFORMAT) || ((${MK_CLANG_IS_CC} != "no" || \ 95233052Sdim ${CC:T:Mclang} == "clang") && defined(NO_WFORMAT.clang)) 96233052SdimCWARNFLAGS+= -Wno-format 97233052Sdim.endif # NO_WFORMAT || (CLANG && NO_WFORMAT.clang) 98233052Sdim.endif # !NO_WARNS 9976861Skris 100163971Sjb.if defined(IGNORE_PRAGMA) 101233052SdimCWARNFLAGS+= -Wno-unknown-pragmas 102233052Sdim.endif # IGNORE_PRAGMA 103163971Sjb 104232476Sdim.if ${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang" 105233052SdimCLANG_NO_IAS= -no-integrated-as 106233052SdimCLANG_OPT_SMALL= -mllvm -stack-alignment=8 -mllvm -inline-threshold=3\ 107233052Sdim -mllvm -enable-load-pre=false -mllvm -simplifycfg-dup-ret 108233052Sdim.endif # CLANG 109232263Sdim 110220863Sdim.if ${MK_SSP} != "no" && ${MACHINE_CPUARCH} != "ia64" && \ 111220863Sdim ${MACHINE_CPUARCH} != "arm" && ${MACHINE_CPUARCH} != "mips" 112180012Sru# Don't use -Wstack-protector as it breaks world with -Werror. 113233052SdimSSP_CFLAGS?= -fstack-protector 114233052SdimCFLAGS+= ${SSP_CFLAGS} 115233052Sdim.endif # SSP && !IA64 && !ARM && !MIPS 116180012Sru 11776861Skris# Allow user-specified additional warning flags 118233052SdimCFLAGS+= ${CWARNFLAGS} 119