sys.mk revision 145644
1255736Sdavidch#	from: @(#)sys.mk	8.2 (Berkeley) 3/21/94
2255736Sdavidch# $FreeBSD: head/share/mk/sys.mk 145644 2005-04-28 23:29:00Z darrenr $
3255736Sdavidch
4255736Sdavidchunix		?=	We run FreeBSD, not UNIX.
5255736Sdavidch.FreeBSD	?=	true
6255736Sdavidch
7255736Sdavidch# If the special target .POSIX appears (without prerequisites or
8255736Sdavidch# commands) before the first noncomment line in the makefile, make shall
9255736Sdavidch# process the makefile as specified by the Posix 1003.2 specification.
10255736Sdavidch# make(1) sets the special macro %POSIX in this case (to the actual
11255736Sdavidch# value "1003.2", for what it's worth).
12255736Sdavidch#
13255736Sdavidch# The rules below use this macro to distinguish between Posix-compliant
14255736Sdavidch# and default behaviour.
15255736Sdavidch
16255736Sdavidch.if defined(%POSIX)
17255736Sdavidch.SUFFIXES:	.o .c .y .l .a .sh .f
18255736Sdavidch.else
19255736Sdavidch.SUFFIXES:	.out .a .ln .o .c .cc .cpp .cxx .C .m .F .f .e .r .y .l .S .asm .s .cl .p .h .sh
20255736Sdavidch.endif
21255736Sdavidch
22255736SdavidchX11BASE		?=	/usr/X11R6
23255736Sdavidch
24255736SdavidchAR		?=	ar
25255736Sdavidch.if defined(%POSIX)
26255736SdavidchARFLAGS		?=	-rv
27255736Sdavidch.else
28255736SdavidchARFLAGS		?=	rl
29255736Sdavidch.endif
30255736SdavidchRANLIB		?=	ranlib
31255736Sdavidch
32255736SdavidchAS		?=	as
33255736SdavidchAFLAGS		?=
34255736Sdavidch
35255736Sdavidch.if defined(%POSIX)
36255736SdavidchCC		?=	c89
37255736SdavidchCFLAGS		?=	-O
38255736Sdavidch.else
39255736SdavidchCC		?=	cc
40255736SdavidchCFLAGS		?=	-O2 -fno-strict-aliasing -pipe
41255736Sdavidch.endif
42255736Sdavidch
43255736SdavidchCXX		?=	c++
44255736SdavidchCXXFLAGS	?=	${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes}
45255736Sdavidch
46255736SdavidchCPP		?=	cpp
47255736Sdavidch
48255736Sdavidch.if empty(.MAKEFLAGS:M-s)
49255736SdavidchECHO		?=	echo
50255736SdavidchECHODIR		?=	echo
51255736Sdavidch.else
52255736SdavidchECHO		?=	true
53255736Sdavidch.if ${.MAKEFLAGS:M-s} == "-s"
54255736SdavidchECHODIR		?=	echo
55255736Sdavidch.else
56255736SdavidchECHODIR		?=	true
57255736Sdavidch.endif
58255736Sdavidch.endif
59255736Sdavidch
60255736Sdavidch.if !empty(.MAKEFLAGS:M-n) && ${.MAKEFLAGS:M-n} == "-n"
61255736Sdavidch_+_		?=
62255736Sdavidch.else
63255736Sdavidch_+_		?=	+
64255736Sdavidch.endif
65255736Sdavidch
66255736Sdavidch.if defined(%POSIX)
67255736SdavidchFC		?=	fort77
68255736SdavidchFFLAGS		?=	-O 1
69255736Sdavidch.else
70255736SdavidchFC		?=	f77
71255736SdavidchFFLAGS		?=	-O
72255736Sdavidch.endif
73255736SdavidchEFLAGS		?=
74255736Sdavidch
75255736SdavidchINSTALL		?=	install
76255736Sdavidch
77255736SdavidchLEX		?=	lex
78255736SdavidchLFLAGS		?=
79255736Sdavidch
80256319SedavisLD		?=	ld
81256319SedavisLDFLAGS		?=
82256319Sedavis
83256319SedavisLINT		?=	lint
84256319SedavisLINTFLAGS	?=	-cghapbx
85255736SdavidchLINTKERNFLAGS	?=	${LINTFLAGS}
86256319SedavisLINTOBJFLAGS	?=	-cghapbxu -i
87256319SedavisLINTOBJKERNFLAGS?=	${LINTOBJFLAGS}
88255736SdavidchLINTLIBFLAGS	?=	-cghapbxu -C ${LIB}
89255736Sdavidch
90255736SdavidchMAKE		?=	make
91255736Sdavidch
92255736SdavidchOBJC		?=	cc
93255736SdavidchOBJCFLAGS	?=	${OBJCINCLUDES} ${CFLAGS} -Wno-import
94255736Sdavidch
95255736SdavidchPC		?=	pc
96255736SdavidchPFLAGS		?=
97255736Sdavidch
98255736SdavidchRC		?=	f77
99255736SdavidchRFLAGS		?=
100255736Sdavidch
101255736SdavidchSHELL		?=	sh
102255736Sdavidch
103255736SdavidchYACC		?=	yacc
104255736Sdavidch.if defined(%POSIX)
105255736SdavidchYFLAGS		?=
106255736Sdavidch.else
107255736SdavidchYFLAGS		?=	-d
108255736Sdavidch.endif
109255736Sdavidch
110255736Sdavidch# FreeBSD/i386 has traditionally been built with a version of make
111255736Sdavidch# which knows MACHINE, but not MACHINE_ARCH. When building on other
112255736Sdavidch# architectures, assume that the version of make being used has an
113255736Sdavidch# explicit MACHINE_ARCH setting and treat a missing MACHINE_ARCH
114255736Sdavidch# as an i386 architecture.
115255736SdavidchMACHINE_ARCH	?=	i386
116255736Sdavidch
117255736Sdavidch.if defined(%POSIX)
118255736Sdavidch
119255736Sdavidch# Posix 1003.2 mandated rules
120255736Sdavidch#
121255736Sdavidch# Quoted directly from the Posix 1003.2 draft, only the macros
122255736Sdavidch# $@, $< and $* have been replaced by ${.TARGET}, ${.IMPSRC}, and
123255736Sdavidch# ${.PREFIX}, resp.
124255736Sdavidch
125255736Sdavidch# SINGLE SUFFIX RULES
126255736Sdavidch.c:
127255736Sdavidch	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
128255736Sdavidch
129255736Sdavidch.f:
130255736Sdavidch	${FC} ${FFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
131255736Sdavidch
132255736Sdavidch.sh:
133255736Sdavidch	cp ${.IMPSRC} ${.TARGET}
134255736Sdavidch	chmod a+x ${.TARGET}
135255736Sdavidch
136255736Sdavidch# DOUBLE SUFFIX RULES
137255736Sdavidch
138255736Sdavidch.c.o:
139255736Sdavidch	${CC} ${CFLAGS} -c ${.IMPSRC}
140255736Sdavidch
141255736Sdavidch.f.o:
142255736Sdavidch	${FC} ${FFLAGS} -c ${.IMPSRC}
143255736Sdavidch
144255736Sdavidch.y.o:
145255736Sdavidch	${YACC} ${YFLAGS} ${.IMPSRC}
146255736Sdavidch	${CC} ${CFLAGS} -c y.tab.c
147255736Sdavidch	rm -f y.tab.c
148255736Sdavidch	mv y.tab.o ${.TARGET}
149255736Sdavidch
150255736Sdavidch.l.o:
151255736Sdavidch	${LEX} ${LFLAGS} ${.IMPSRC}
152255736Sdavidch	${CC} ${CFLAGS} -c lex.yy.c
153255736Sdavidch	rm -f lex.yy.c
154255736Sdavidch	mv lex.yy.o ${.TARGET}
155255736Sdavidch
156255736Sdavidch.y.c:
157255736Sdavidch	${YACC} ${YFLAGS} ${.IMPSRC}
158255736Sdavidch	mv y.tab.c ${.TARGET}
159255736Sdavidch
160255736Sdavidch.l.c:
161255736Sdavidch	${LEX} ${LFLAGS} ${.IMPSRC}
162255736Sdavidch	mv lex.yy.c ${.TARGET}
163255736Sdavidch
164255736Sdavidch.c.a:
165255736Sdavidch	${CC} ${CFLAGS} -c ${.IMPSRC}
166255736Sdavidch	${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
167255736Sdavidch	rm -f ${.PREFIX}.o
168255736Sdavidch
169255736Sdavidch.f.a:
170255736Sdavidch	${FC} ${FFLAGS} -c ${.IMPSRC}
171255736Sdavidch	${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
172255736Sdavidch	rm -f ${.PREFIX}.o
173255736Sdavidch
174255736Sdavidch.else
175255736Sdavidch
176255736Sdavidch# non-Posix rule set
177255736Sdavidch
178255736Sdavidch.sh:
179255736Sdavidch	cp -p ${.IMPSRC} ${.TARGET}
180255736Sdavidch	chmod a+x ${.TARGET}
181255736Sdavidch
182255736Sdavidch.c.ln:
183255736Sdavidch	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
184255736Sdavidch	    touch ${.TARGET}
185255736Sdavidch
186255736Sdavidch.cc.ln .C.ln .cpp.ln .cxx.ln:
187255736Sdavidch	${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \
188255736Sdavidch	    touch ${.TARGET}
189255736Sdavidch
190255736Sdavidch.c:
191255736Sdavidch	${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
192255736Sdavidch
193255736Sdavidch.c.o:
194255736Sdavidch	${CC} ${CFLAGS} -c ${.IMPSRC}
195255736Sdavidch
196255736Sdavidch.cc .cpp .cxx .C:
197255736Sdavidch	${CXX} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
198255736Sdavidch
199255736Sdavidch.cc.o .cpp.o .cxx.o .C.o:
200255736Sdavidch	${CXX} ${CXXFLAGS} -c ${.IMPSRC}
201255736Sdavidch
202255736Sdavidch.m.o:
203255736Sdavidch	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC}
204255736Sdavidch
205255736Sdavidch.p.o:
206255736Sdavidch	${PC} ${PFLAGS} -c ${.IMPSRC}
207255736Sdavidch
208255736Sdavidch.e .r .F .f:
209255736Sdavidch	${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} \
210255736Sdavidch	    -o ${.TARGET}
211255736Sdavidch
212255736Sdavidch.e.o .r.o .F.o .f.o:
213255736Sdavidch	${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC}
214255736Sdavidch
215255736Sdavidch.S.o:
216255736Sdavidch	${CC} ${CFLAGS} -c ${.IMPSRC}
217255736Sdavidch
218255736Sdavidch.asm.o:
219255736Sdavidch	${CC} -x assembler-with-cpp ${CFLAGS} -c ${.IMPSRC}
220255736Sdavidch
221255736Sdavidch.s.o:
222255736Sdavidch	${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
223255736Sdavidch
224255736Sdavidch# XXX not -j safe
225255736Sdavidch.y.o:
226255736Sdavidch	${YACC} ${YFLAGS} ${.IMPSRC}
227255736Sdavidch	${CC} ${CFLAGS} -c y.tab.c -o ${.TARGET}
228255736Sdavidch	rm -f y.tab.c
229255736Sdavidch
230255736Sdavidch.l.o:
231255736Sdavidch	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
232255736Sdavidch	${CC} ${CFLAGS} -c ${.PREFIX}.tmp.c -o ${.TARGET}
233255736Sdavidch	rm -f ${.PREFIX}.tmp.c
234255736Sdavidch
235255736Sdavidch# XXX not -j safe
236255736Sdavidch.y.c:
237255736Sdavidch	${YACC} ${YFLAGS} ${.IMPSRC}
238255736Sdavidch	mv y.tab.c ${.TARGET}
239255736Sdavidch
240255736Sdavidch.l.c:
241255736Sdavidch	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.TARGET}
242255736Sdavidch
243255736Sdavidch.s.out .c.out .o.out:
244255736Sdavidch	${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
245255736Sdavidch
246255736Sdavidch.f.out .F.out .r.out .e.out:
247255736Sdavidch	${FC} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} \
248255736Sdavidch	    ${LDLIBS} -o ${.TARGET}
249255736Sdavidch	rm -f ${.PREFIX}.o
250255736Sdavidch
251255736Sdavidch# XXX not -j safe
252255736Sdavidch.y.out:
253255736Sdavidch	${YACC} ${YFLAGS} ${.IMPSRC}
254255736Sdavidch	${CC} ${CFLAGS} ${LDFLAGS} y.tab.c ${LDLIBS} -ly -o ${.TARGET}
255255736Sdavidch	rm -f y.tab.c
256255736Sdavidch
257255736Sdavidch.l.out:
258255736Sdavidch	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
259255736Sdavidch	${CC} ${CFLAGS} ${LDFLAGS} ${.PREFIX}.tmp.c ${LDLIBS} -ll -o ${.TARGET}
260255736Sdavidch	rm -f ${.PREFIX}.tmp.c
261255736Sdavidch
262255736Sdavidch# FreeBSD build pollution.  Hide it in the non-POSIX part of the ifdef.
263255736Sdavidch__MAKE_CONF?=/etc/make.conf
264255736Sdavidch.if exists(${__MAKE_CONF})
265255736Sdavidch.include "${__MAKE_CONF}"
266255736Sdavidch.endif
267255736Sdavidch
268255736Sdavidch# Default executable format
269255736Sdavidch# XXX hint for bsd.port.mk
270255736SdavidchOBJFORMAT?=	elf
271255736Sdavidch
272255736Sdavidch.endif
273255736Sdavidch
274255736Sdavidch.include <bsd.compat.mk>
275255736Sdavidch.include <bsd.cpu.mk>
276255736Sdavidch