1# $NetBSD: bsd.sys.mk,v 1.180 2009/02/12 22:49:05 lukem Exp $ 2# 3# Build definitions used for NetBSD source tree builds. 4 5.if !defined(_BSD_SYS_MK_) 6_BSD_SYS_MK_=1 7 8.if defined(WARNS) 9.if ${WARNS} > 0 10CFLAGS+= -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith 11#CFLAGS+= -Wmissing-declarations -Wredundant-decls -Wnested-externs 12# Add -Wno-sign-compare. -Wsign-compare is included in -Wall as of GCC 3.3, 13# but our sources aren't up for it yet. Also, add -Wno-traditional because 14# gcc includes #elif in the warnings, which is 'this code will not compile 15# in a traditional environment' warning, as opposed to 'this code behaves 16# differently in traditional and ansi environments' which is the warning 17# we wanted, and now we don't get anymore. 18CFLAGS+= -Wno-sign-compare -Wno-traditional 19.if !defined(NOGCCERROR) 20# Set assembler warnings to be fatal 21CFLAGS+= -Wa,--fatal-warnings 22.endif 23# Set linker warnings to be fatal 24# XXX no proper way to avoid "FOO is a patented algorithm" warnings 25# XXX on linking static libs 26.if (!defined(MKPIC) || ${MKPIC} != "no") && \ 27 (!defined(LDSTATIC) || ${LDSTATIC} != "-static") 28LDFLAGS+= -Wl,--fatal-warnings 29.endif 30.endif 31.if ${WARNS} > 1 32CFLAGS+= -Wreturn-type -Wswitch -Wshadow 33.endif 34.if ${WARNS} > 2 35CFLAGS+= -Wcast-qual -Wwrite-strings 36CFLAGS+= -Wextra -Wno-unused-parameter 37CXXFLAGS+= -Wabi 38CXXFLAGS+= -Wold-style-cast 39CXXFLAGS+= -Wctor-dtor-privacy -Wnon-virtual-dtor -Wreorder \ 40 -Wno-deprecated -Wno-non-template-friend \ 41 -Woverloaded-virtual -Wno-pmf-conversions -Wsign-promo -Wsynth 42.endif 43.if ${WARNS} > 3 && defined(HAVE_GCC) && ${HAVE_GCC} >= 3 44CFLAGS+= -Wsign-compare 45CFLAGS+= -std=gnu99 46.endif 47.endif 48 49CPPFLAGS+= ${AUDIT:D-D__AUDIT__} 50CFLAGS+= ${CWARNFLAGS} ${NOGCCERROR:D:U-Werror} 51LINTFLAGS+= ${DESTDIR:D-d ${DESTDIR}/usr/include} 52 53.if (${MACHINE_ARCH} == "alpha") || (${MACHINE_ARCH} == "hppa") || \ 54 (${MACHINE_ARCH} == "mipsel") || (${MACHINE_ARCH} == "mipseb") 55HAS_SSP= no 56.else 57HAS_SSP= yes 58.endif 59 60.if defined(USE_FORT) && (${USE_FORT} != "no") 61USE_SSP?= yes 62.if !defined(KERNSRCDIR) && !defined(KERN) # not for kernels nor kern modules 63CPPFLAGS+= -D_FORTIFY_SOURCE=2 64.endif 65.endif 66 67.if defined(USE_SSP) && (${USE_SSP} != "no") && (${BINDIR:Ux} != "/usr/mdec") 68.if ${HAS_SSP} == "yes" 69COPTS+= -fstack-protector -Wstack-protector --param ssp-buffer-size=1 70.endif 71.endif 72 73.if defined(MKSOFTFLOAT) && (${MKSOFTFLOAT} != "no") 74COPTS+= -msoft-float 75FOPTS+= -msoft-float 76.endif 77 78.if defined(MKIEEEFP) && (${MKIEEEFP} != "no") 79.if ${MACHINE_ARCH} == "alpha" 80CFLAGS+= -mieee 81FFLAGS+= -mieee 82.endif 83.endif 84 85.if ${MACHINE} == "sparc64" && ${MACHINE_ARCH} == "sparc" 86CFLAGS+= -Wa,-Av8plus 87.endif 88 89CFLAGS+= ${CPUFLAGS} 90AFLAGS+= ${CPUFLAGS} 91 92# Position Independent Executable flags 93PIE_CFLAGS?= -fPIC -DPIC 94PIE_LDFLAGS?= -Wl,-pie -shared-libgcc 95PIE_AFLAGS?= -fPIC -DPIC 96 97# Helpers for cross-compiling 98HOST_CC?= cc 99HOST_CFLAGS?= -O 100HOST_COMPILE.c?=${HOST_CC} ${HOST_CFLAGS} ${HOST_CPPFLAGS} -c 101HOST_COMPILE.cc?= ${HOST_CXX} ${HOST_CXXFLAGS} ${HOST_CPPFLAGS} -c 102.if defined(HOSTPROG_CXX) 103HOST_LINK.c?= ${HOST_CXX} ${HOST_CXXFLAGS} ${HOST_CPPFLAGS} ${HOST_LDFLAGS} 104.else 105HOST_LINK.c?= ${HOST_CC} ${HOST_CFLAGS} ${HOST_CPPFLAGS} ${HOST_LDFLAGS} 106.endif 107 108HOST_CXX?= c++ 109HOST_CXXFLAGS?= -O 110 111HOST_CPP?= cpp 112HOST_CPPFLAGS?= 113 114HOST_LD?= ld 115HOST_LDFLAGS?= 116 117HOST_AR?= ar 118HOST_RANLIB?= ranlib 119 120HOST_LN?= ln 121 122# HOST_SH must be an absolute path 123HOST_SH?= /bin/sh 124 125ELF2ECOFF?= elf2ecoff 126MKDEP?= mkdep 127OBJCOPY?= objcopy 128OBJDUMP?= objdump 129PAXCTL?= paxctl 130STRIP?= strip 131 132# TOOL_* variables are defined in bsd.own.mk 133 134.SUFFIXES: .o .ln .lo .c .cc .cpp .cxx .C .m ${YHEADER:D.h} 135 136# C 137.c.o: 138 ${_MKTARGET_COMPILE} 139 ${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} 140 141.c.ln: 142 ${_MKTARGET_COMPILE} 143 ${LINT} ${LINTFLAGS} \ 144 ${CPPFLAGS:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} \ 145 ${CPPFLAGS.${.IMPSRC:T}:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} \ 146 -i ${.IMPSRC} 147 148# C++ 149.cc.o .cpp.o .cxx.o .C.o: 150 ${_MKTARGET_COMPILE} 151 ${COMPILE.cc} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} 152 153# Objective C 154# (Defined here rather than in <sys.mk> because `.m' is not just 155# used for Objective C source) 156.m.o: 157 ${_MKTARGET_COMPILE} 158 ${COMPILE.m} ${OBJCOPTS} ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} 159 160# Host-compiled C objects 161# The intermediate step is necessary for Sun CC, which objects to calling 162# object files anything but *.o 163.c.lo: 164 ${_MKTARGET_COMPILE} 165 ${HOST_COMPILE.c} -o ${.TARGET}.o ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} 166 mv ${.TARGET}.o ${.TARGET} 167 168# C++ 169.cc.lo .cpp.lo .cxx.lo .C.lo: 170 ${_MKTARGET_COMPILE} 171 ${HOST_COMPILE.cc} -o ${.TARGET}.o ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} 172 mv ${.TARGET}.o ${.TARGET} 173 174# Assembly 175.s.o: 176 ${_MKTARGET_COMPILE} 177 ${COMPILE.s} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} 178 179.S.o: 180 ${_MKTARGET_COMPILE} 181 ${COMPILE.S} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} 182 183# Lex 184LFLAGS+= ${LPREFIX.${.IMPSRC:T}:D-P${LPREFIX.${.IMPSRC:T}}} 185LFLAGS+= ${LPREFIX:D-P${LPREFIX}} 186 187.l.c: 188 ${_MKTARGET_LEX} 189 ${LEX.l} -o${.TARGET} ${.IMPSRC} 190 191# Yacc 192YFLAGS+= ${YPREFIX.${.IMPSRC:T}:D-p${YPREFIX.${.IMPSRC:T}}} ${YHEADER.${.IMPSRC:T}:D-d} 193YFLAGS+= ${YPREFIX:D-p${YPREFIX}} ${YHEADER:D-d} 194 195.y.c: 196 ${_MKTARGET_YACC} 197 ${YACC.y} -o ${.TARGET} ${.IMPSRC} 198 199.ifdef YHEADER 200.y.h: ${.TARGET:.h=.c} 201.endif 202 203.endif # !defined(_BSD_SYS_MK_) 204