1# from: @(#)sys.mk 8.2 (Berkeley) 3/21/94 2# $FreeBSD: src/share/mk/sys.mk,v 1.45.2.6 2002/12/23 16:33:37 ru Exp $ 3# $DragonFly: src/share/mk/sys.mk,v 1.21 2008/05/19 10:26:02 corecode Exp $ 4 5unix ?= We run FreeBSD, not UNIX. 6 7# If the special target .POSIX appears (without prerequisites or 8# commands) before the first noncomment line in the makefile, make shall 9# process the makefile as specified by the Posix 1003.2 specification. 10# make(1) sets the special macro %POSIX in this case (to the actual 11# value "1003.2", for what it's worth). 12# 13# The rules below use this macro to distinguish between Posix-compliant 14# and default behaviour. 15 16.if defined(%POSIX) 17.SUFFIXES: .o .c .y .l .a .sh .f 18.else 19.SUFFIXES: .out .a .ln .o .c .cc .cpp .cxx .C .m .F .f .e .r .y .l .S .s .cl .p .h .sh .no .nx 20.endif 21 22.LIBS: .a 23 24X11BASE ?= /usr/pkg 25 26AR ?= ar 27NXAR ?= ${NXENV} ${AR} 28.if defined(%POSIX) 29ARFLAGS ?= -rv 30.else 31ARFLAGS ?= rl 32.endif 33RANLIB ?= ranlib 34NXRANLIB ?= ${NXENV} ${RANLIB} 35 36AS ?= as 37AFLAGS ?= 38 39AWK ?= awk 40 41.if defined(%POSIX) 42CC ?= c89 43.else 44CC ?= cc 45.endif 46CC_LINK ?= ${CC} 47# The system cc frontend is not subject to the path, e.g. when buildworld 48# is doing cross compiles it may still need the native compiler for things. 49# 50NXENV ?= CCVER=${HOST_CCVER} BINUTILSVER=${HOST_BINUTILSVER} OBJFORMAT_PATH=/ PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/pkg/bin 51NXCC ?= ${NXENV} ${CC} 52NXCC_LINK ?= ${NXENV} ${CC_LINK} 53CFLAGS ?= -O -pipe 54 55CXX ?= c++ 56CXX_LINK ?= ${CXX} 57NXCXX ?= ${NXENV} ${CXX} 58NXCXX_LINK ?= ${NXENV} ${CXX_LINK} 59CXXFLAGS ?= ${CXXINCLUDES} ${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes:N-Wno-pointer-sign:N-Wold-style-definition} 60 61CPP ?= cpp 62 63.if ${.MAKEFLAGS:M-s} == "" 64ECHO ?= echo 65ECHODIR ?= echo 66.else 67ECHO ?= true 68.if ${.MAKEFLAGS:M-s} == "-s" 69ECHODIR ?= echo 70.else 71ECHODIR ?= true 72.endif 73.endif 74 75.if defined(%POSIX) 76FC ?= fort77 77FFLAGS ?= -O 1 78.else 79FC ?= f77 80FFLAGS ?= -O 81.endif 82EFLAGS ?= 83 84INSTALL ?= install 85LN ?= ln 86 87LEX ?= lex 88LFLAGS ?= 89 90LD ?= ld 91NXLD ?= ${NXENV} ${LD} 92LDFLAGS ?= 93NXCFLAGS ?= ${CFLAGS:N-mtune*:N-mcpu*:N-march*} 94NXCXXFLAGS ?= ${CFLAGS:N-mtune*:N-mcpu*:N-march*} 95NXLDLIBS ?= ${LDLIBS} 96NXLDFLAGS ?= -static ${LDFLAGS} 97 98LINT ?= lint 99LINTFLAGS ?= -chapbx 100 101MAKE ?= make 102 103OBJC ?= cc 104OBJCFLAGS ?= ${OBJCINCLUDES} ${CFLAGS} -Wno-import 105 106PC ?= pc 107PFLAGS ?= 108 109RC ?= f77 110RFLAGS ?= 111 112SHELL ?= sh 113 114YACC ?= yacc 115.if defined(%POSIX) 116YFLAGS ?= 117.else 118YFLAGS ?= -d 119.endif 120 121# The 'make' program is expected to define the following. 122# 123# MACHINE_PLATFORM platform architecture (vkernel, pc32) 124# MACHINE machine architecture (i386, etc..) 125# MACHINE_ARCH cpu architecture (i386, x86_64, etc) 126# 127.if !defined(MACHINE) 128.error "MACHINE was not defined by make" 129.endif 130.if !defined(MACHINE_ARCH) 131.error "MACHINE_ARCH was not defined by make" 132.endif 133 134# Backwards compatibility. There was a time during 1.7 development 135# where we tried to rename MACHINE. This failed and was reverted, 136# and MACHINE_PLATFORM was added to make the distinction. These shims 137# prevent buildworld from breaking. 138# 139.if !defined(MACHINE_PLATFORM) 140MACHINE_PLATFORM=pc32 141.endif 142.if ${MACHINE} == "pc32" 143MACHINE=i386 144.endif 145 146.if defined(%POSIX) 147# Posix 1003.2 mandated rules 148# 149# Quoted directly from the Posix 1003.2 draft, only the macros 150# $@, $< and $* have been replaced by ${.TARGET}, ${.IMPSRC}, and 151# ${.PREFIX}, resp. 152 153# SINGLE SUFFIX RULES 154.c: 155 ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC} 156 157.f: 158 ${FC} ${FFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC} 159 160.sh: 161 cp ${.IMPSRC} ${.TARGET} 162 chmod a+x ${.TARGET} 163 164# DOUBLE SUFFIX RULES 165 166.c.o: 167 ${CC} ${CFLAGS} -c ${.IMPSRC} 168 169.f.o: 170 ${FC} ${FFLAGS} -c ${.IMPSRC} 171 172.y.o: 173 ${YACC} ${YFLAGS} ${.IMPSRC} 174 ${CC} ${CFLAGS} -c y.tab.c 175 rm -f y.tab.c 176 mv y.tab.o ${.TARGET} 177 178.l.o: 179 ${LEX} ${LFLAGS} ${.IMPSRC} 180 ${CC} ${CFLAGS} -c lex.yy.c 181 rm -f lex.yy.c 182 mv lex.yy.o ${.TARGET} 183 184.y.c: 185 ${YACC} ${YFLAGS} ${.IMPSRC} 186 mv y.tab.c ${.TARGET} 187 188.l.c: 189 ${LEX} ${LFLAGS} ${.IMPSRC} 190 mv lex.yy.c ${.TARGET} 191 192.c.a: 193 ${CC} ${CFLAGS} -c ${.IMPSRC} 194 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o 195 rm -f ${.PREFIX}.o 196 197.f.a: 198 ${FC} ${FFLAGS} -c ${.IMPSRC} 199 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o 200 rm -f ${.PREFIX}.o 201 202.else 203 204# non-Posix rule set 205 206.sh: 207 cp -p ${.IMPSRC} ${.TARGET} 208 chmod a+x ${.TARGET} 209 210.c: 211 ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET} 212 213.c.o: 214 ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC} 215 216.cc .cpp .cxx .C: 217 ${CXX} ${_${.IMPSRC:T}_FLAGS} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET} 218 219.cc.o .cpp.o .cxx.o .C.o: 220 ${CXX} ${_${.IMPSRC:T}_FLAGS} ${CXXFLAGS} -c ${.IMPSRC} 221 222.m.o: 223 ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} -c ${.IMPSRC} 224 225.p.o: 226 ${PC} ${_${.IMPSRC:T}_FLAGS} ${PFLAGS} -c ${.IMPSRC} 227 228.e .r .F .f: 229 ${FC} ${_${.IMPSRC:T}_FLAGS} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} \ 230 ${.IMPSRC} ${LDLIBS} -o ${.TARGET} 231 232.e.o .r.o .F.o .f.o: 233 ${FC} ${_${.IMPSRC:T}_FLAGS} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC} 234 235.S.o: 236 ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC} 237 238.s.o: 239 ${AS} ${_${.IMPSRC:T}_FLAGS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC} 240 241# XXX not -j safe 242.y.o: 243 ${YACC} ${YFLAGS} ${.IMPSRC} 244 ${CC} ${CFLAGS} -c y.tab.c -o ${.TARGET} 245 rm -f y.tab.c 246 247.l.o: 248 ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c 249 ${CC} ${CFLAGS} -c ${.PREFIX}.tmp.c -o ${.TARGET} 250 rm -f ${.PREFIX}.tmp.c 251 252# .no == native object file, for helper code when cross building. 253# 254.c.no: 255 ${NXCC} ${_${.IMPSRC:T}_FLAGS} ${NXCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 256 257.y.no: 258 ${YACC} ${YFLAGS} ${.IMPSRC} 259 ${NXCC} ${NXCFLAGS} -c y.tab.c -o ${.TARGET} 260 rm -f y.tab.c 261 262.l.no: 263 ${LEX} ${LFLAGS} -o${.TARGET}.c ${.IMPSRC} 264 ${NXCC} ${NXCFLAGS} -c ${.TARGET}.c -o ${.TARGET} 265 rm -f ${.TARGET}.c 266 267.no.nx .c.nx: 268 ${NXCC} ${_${.IMPSRC:T}_FLAGS} ${NXCFLAGS} ${NXLDFLAGS} ${.IMPSRC} \ 269 ${NXLDLIBS} -o ${.TARGET} 270 271# XXX not -j safe 272.y.c: 273 ${YACC} ${YFLAGS} ${.IMPSRC} 274 mv y.tab.c ${.TARGET} 275 276.l.c: 277 ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.TARGET} 278 279.s.out .c.out .o.out: 280 ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET} 281 282.f.out .F.out .r.out .e.out: 283 ${FC} ${_${.IMPSRC:T}_FLAGS} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} \ 284 ${.IMPSRC} ${LDLIBS} -o ${.TARGET} 285 rm -f ${.PREFIX}.o 286 287# XXX not -j safe 288.y.out: 289 ${YACC} ${YFLAGS} ${.IMPSRC} 290 ${CC} ${CFLAGS} ${LDFLAGS} y.tab.c ${LDLIBS} -ly -o ${.TARGET} 291 rm -f y.tab.c 292 293.l.out: 294 ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c 295 ${CC} ${CFLAGS} ${LDFLAGS} ${.PREFIX}.tmp.c ${LDLIBS} -ll -o ${.TARGET} 296 rm -f ${.PREFIX}.tmp.c 297 298.endif 299 300.if exists(/etc/defaults/make.conf) 301.include </etc/defaults/make.conf> 302.endif 303 304__MAKE_CONF?=/etc/make.conf 305.if exists(${__MAKE_CONF}) 306.include "${__MAKE_CONF}" 307.endif 308 309.include <bsd.cpu.mk> 310 311.if exists(/etc/make.conf.local) 312.error Error, original /etc/make.conf should be moved to the /etc/defaults/ directory and /etc/make.conf.local should be renamed to /etc/make.conf. 313.include </etc/make.conf.local> 314.endif 315 316# Default executable format 317# XXX hint for bsd.port.mk 318OBJFORMAT?= elf 319 320