sys.mk revision 234575
131567Ssef#	from: @(#)sys.mk	8.2 (Berkeley) 3/21/94
2204977Simp# $FreeBSD: head/share/mk/sys.mk 234575 2012-04-22 17:14:11Z imp $
331899Ssef
431899Ssefunix		?=	We run FreeBSD, not UNIX.
531899Ssef.FreeBSD	?=	true
631899Ssef
731899Ssef.if !defined(%POSIX)
831899Ssef#
931899Ssef# MACHINE_CPUARCH defines a collection of MACHINE_ARCH.  Machines with
1031899Ssef# the same MACHINE_ARCH can run each other's binaries, so it necessarily
1131899Ssef# has word size and endian swizzled in.  However, support files for
1231899Ssef# these machines often are shared amongst all combinations of size
1331899Ssef# and/or endian.  This is called MACHINE_CPU in NetBSD, but that's used
1431899Ssef# for something different in FreeBSD.
1531899Ssef#
1631899SsefMACHINE_CPUARCH=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/}
1731899Ssef.endif
1831899Ssef
1931899Ssef# If the special target .POSIX appears (without prerequisites or
2031899Ssef# commands) before the first noncomment line in the makefile, make shall
2131899Ssef# process the makefile as specified by the Posix 1003.2 specification.
2231899Ssef# make(1) sets the special macro %POSIX in this case (to the actual
2331899Ssef# value "1003.2", for what it's worth).
2431899Ssef#
2531899Ssef# The rules below use this macro to distinguish between Posix-compliant
2631899Ssef# and default behaviour.
2731899Ssef
2831899Ssef.if defined(%POSIX)
2931899Ssef.SUFFIXES:	.o .c .y .l .a .sh .f
3031899Ssef.else
3131899Ssef.SUFFIXES:	.out .a .ln .o .c .cc .cpp .cxx .C .m .F .f .e .r .y .l .S .asm .s .cl .p .h .sh
3232275Scharnier.endif
3332275Scharnier
3450477SpeterAR		?=	ar
3532275Scharnier.if defined(%POSIX)
3632275ScharnierARFLAGS		?=	-rv
3731899Ssef.else
38111176SruARFLAGS		?=	rl
3931567Ssef.endif
4031567SsefRANLIB		?=	ranlib
4131567Ssef
4231567SsefAS		?=	as
4331567SsefAFLAGS		?=
4431567SsefACFLAGS		?=
4585301Sdes
46240005Szont.if defined(%POSIX)
4785301SdesCC		?=	c89
4885301SdesCFLAGS		?=	-O
4985301Sdes.else
5085301SdesCC		?=	cc
5185301Sdes.if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "mips"
5232275ScharnierCFLAGS		?=	-O -pipe
5332275Scharnier.else
5432275ScharnierCFLAGS		?=	-O2 -pipe
5531567Ssef.endif
5631567Ssef.if defined(NO_STRICT_ALIASING)
5731567SsefCFLAGS		+=	-fno-strict-aliasing
58101423Smdodd.endif
5931567Ssef.endif
6031567SsefPO_CFLAGS	?=	${CFLAGS}
61101282Smdodd
6231567Ssef# C Type Format data is required for DTrace
63106713SdwmaloneCTFFLAGS	?=	-L VERSION
6431567Ssef
65179051SjhbCTFCONVERT	?=	ctfconvert
6631567SsefCTFMERGE	?=	ctfmerge
67179051SjhbDTRACE		?=	dtrace
68179051Sjhb.if defined(CFLAGS) && (${CFLAGS:M-g} != "")
6931567SsefCTFFLAGS	+=	-g
7031567Ssef.else
7131567Ssef# XXX: What to do here? Is removing the CFLAGS part completely ok here?
7231567Ssef# For now comment it out to not compile with -g unconditionally.
7331567Ssef#CFLAGS		+=	-g
7431567Ssef.endif
7531567Ssef
7631567SsefCXX		?=	c++
7731567SsefCXXFLAGS	?=	${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes:N-Wno-pointer-sign:N-Wold-style-definition}
7831567SsefPO_CXXFLAGS	?=	${CXXFLAGS}
79240562Szont
8031567SsefCPP		?=	cpp
81106713Sdwmalone
8231567Ssef.if empty(.MAKEFLAGS:M-s)
8331567SsefECHO		?=	echo
84179051SjhbECHODIR		?=	echo
8531567Ssef.else
8631567SsefECHO		?=	true
87240562Szont.if ${.MAKEFLAGS:M-s} == "-s"
8831567SsefECHODIR		?=	echo
89240562Szont.else
90240562SzontECHODIR		?=	true
91240562Szont.endif
92240562Szont.endif
93240562Szont
94240562Szont.if !empty(.MAKEFLAGS:M-n) && ${.MAKEFLAGS:M-n} == "-n"
95240562Szont_+_		?=
9631567Ssef.else
97240562Szont_+_		?=	+
98240562Szont.endif
99240005Szont
100240005Szont.if defined(%POSIX)
101240005SzontFC		?=	fort77
102240562SzontFFLAGS		?=	-O 1
103240562Szont.else
104240562SzontFC		?=	f77
105240562SzontFFLAGS		?=	-O
106240562Szont.endif
107240562SzontEFLAGS		?=
108240005Szont
109240562SzontINSTALL		?=	install
11031567Ssef
11131567SsefLEX		?=	lex
11231567SsefLFLAGS		?=
11331567Ssef
11431567SsefLD		?=	ld
11531567SsefLDFLAGS		?=
11631567Ssef
11731567SsefLINT		?=	lint
11831567SsefLINTFLAGS	?=	-cghapbx
11931567SsefLINTKERNFLAGS	?=	${LINTFLAGS}
120240005SzontLINTOBJFLAGS	?=	-cghapbxu -i
121240005SzontLINTOBJKERNFLAGS?=	${LINTOBJFLAGS}
122240005SzontLINTLIBFLAGS	?=	-cghapbxu -C ${LIB}
123240005Szont
124240562SzontMAKE		?=	make
125240005Szont
126240562Szont.if !defined(%POSIX)
127240005SzontNM		?=	nm
128240005Szont.endif
12931567Ssef
130240562SzontOBJC		?=	cc
13131567SsefOBJCFLAGS	?=	${OBJCINCLUDES} ${CFLAGS} -Wno-import
132240562Szont
133240005SzontPC		?=	pc
134240005SzontPFLAGS		?=
135240005Szont
136240005SzontRC		?=	f77
13731567SsefRFLAGS		?=
138240005Szont
139240005SzontSHELL		?=	sh
140240005Szont
141240005SzontYACC		?=	yacc
142240005Szont.if defined(%POSIX)
143240005SzontYFLAGS		?=
144240005Szont.else
145240005SzontYFLAGS		?=	-d
146240562Szont.endif
147240005Szont
148240005Szont.if defined(%POSIX)
149240005Szont
150240562Szont# Posix 1003.2 mandated rules
151240005Szont#
152240005Szont# Quoted directly from the Posix 1003.2 draft, only the macros
153240005Szont# $@, $< and $* have been replaced by ${.TARGET}, ${.IMPSRC}, and
154101283Smdodd# ${.PREFIX}, resp.
155240562Szont
156240562Szont# SINGLE SUFFIX RULES
157240562Szont.c:
158240562Szont	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
159240562Szont	${CTFCONVERT_CMD}
160240005Szont
161240562Szont.f:
162240005Szont	${FC} ${FFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
163240005Szont	${CTFCONVERT_CMD}
164240005Szont
16531567Ssef.sh:
166240562Szont	cp -f ${.IMPSRC} ${.TARGET}
167240562Szont	chmod a+x ${.TARGET}
168240562Szont
169240562Szont# DOUBLE SUFFIX RULES
170240005Szont
17131567Ssef.c.o:
172240005Szont	${CC} ${CFLAGS} -c ${.IMPSRC}
173240005Szont	${CTFCONVERT_CMD}
174179051Sjhb
175240562Szont.f.o:
176240005Szont	${FC} ${FFLAGS} -c ${.IMPSRC}
177240005Szont	${CTFCONVERT_CMD}
178240562Szont
179240005Szont.y.o:
180240562Szont	${YACC} ${YFLAGS} ${.IMPSRC}
181240005Szont	${CC} ${CFLAGS} -c y.tab.c
182240005Szont	rm -f y.tab.c
183240005Szont	mv y.tab.o ${.TARGET}
184240562Szont	${CTFCONVERT_CMD}
185240005Szont
186240562Szont.l.o:
187240005Szont	${LEX} ${LFLAGS} ${.IMPSRC}
188240005Szont	${CC} ${CFLAGS} -c lex.yy.c
189240562Szont	rm -f lex.yy.c
190240562Szont	mv lex.yy.o ${.TARGET}
191240005Szont	${CTFCONVERT_CMD}
192240562Szont
193240005Szont.y.c:
19431567Ssef	${YACC} ${YFLAGS} ${.IMPSRC}
195240005Szont	mv y.tab.c ${.TARGET}
196240562Szont
19731567Ssef.l.c:
198240562Szont	${LEX} ${LFLAGS} ${.IMPSRC}
199240005Szont	mv lex.yy.c ${.TARGET}
20031567Ssef
201240562Szont.c.a:
202240562Szont	${CC} ${CFLAGS} -c ${.IMPSRC}
20331567Ssef	${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
204240005Szont	rm -f ${.PREFIX}.o
205240005Szont
206240005Szont.f.a:
207240005Szont	${FC} ${FFLAGS} -c ${.IMPSRC}
208240005Szont	${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
209240005Szont	rm -f ${.PREFIX}.o
210240005Szont
21131567Ssef.else
212240562Szont
21331567Ssef# non-Posix rule set
214240562Szont
21531567Ssef.sh:
216240562Szont	cp -fp ${.IMPSRC} ${.TARGET}
21731567Ssef	chmod a+x ${.TARGET}
218240005Szont
219240562Szont.c.ln:
220240562Szont	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
22131567Ssef	    touch ${.TARGET}
222240005Szont
223240562Szont.cc.ln .C.ln .cpp.ln .cxx.ln:
224240562Szont	${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \
225240005Szont	    touch ${.TARGET}
226240005Szont
22731567Ssef.c:
228240005Szont	${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
22931567Ssef	${CTFCONVERT_CMD}
230240005Szont
23131567Ssef.c.o:
23231567Ssef	${CC} ${CFLAGS} -c ${.IMPSRC}
233240005Szont	${CTFCONVERT_CMD}
23431567Ssef
23531567Ssef.cc .cpp .cxx .C:
236240562Szont	${CXX} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
237240562Szont
238240005Szont.cc.o .cpp.o .cxx.o .C.o:
239240005Szont	${CXX} ${CXXFLAGS} -c ${.IMPSRC}
240240005Szont
241240005Szont.m.o:
242240005Szont	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC}
243240562Szont	${CTFCONVERT_CMD}
244240005Szont
245240562Szont.p.o:
246240562Szont	${PC} ${PFLAGS} -c ${.IMPSRC}
247240562Szont	${CTFCONVERT_CMD}
248240005Szont
249240005Szont.e .r .F .f:
250240005Szont	${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} \
251240562Szont	    -o ${.TARGET}
252240562Szont
253240562Szont.e.o .r.o .F.o .f.o:
254240005Szont	${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC}
255240005Szont
256240005Szont.S.o:
257240005Szont	${CC} ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC}
258240562Szont	${CTFCONVERT_CMD}
25931567Ssef
26031567Ssef.asm.o:
26131567Ssef	${CC} -x assembler-with-cpp ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC}
26231567Ssef	${CTFCONVERT_CMD}
26331567Ssef
26431567Ssef.s.o:
265213799Sbcr	${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
26631567Ssef	${CTFCONVERT_CMD}
26731567Ssef
268122348Smarcel# XXX not -j safe
269179051Sjhb.y.o:
270122348Smarcel	${YACC} ${YFLAGS} ${.IMPSRC}
271240005Szont	${CC} ${CFLAGS} -c y.tab.c -o ${.TARGET}
272240562Szont	rm -f y.tab.c
273240005Szont	${CTFCONVERT_CMD}
274240562Szont
275240005Szont.l.o:
276240005Szont	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
27731567Ssef	${CC} ${CFLAGS} -c ${.PREFIX}.tmp.c -o ${.TARGET}
278240562Szont	rm -f ${.PREFIX}.tmp.c
279240005Szont	${CTFCONVERT_CMD}
28031567Ssef
281240562Szont# XXX not -j safe
28231567Ssef.y.c:
283240562Szont	${YACC} ${YFLAGS} ${.IMPSRC}
284240005Szont	mv y.tab.c ${.TARGET}
285240005Szont
286240005Szont.l.c:
28731567Ssef	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.TARGET}
288240005Szont
289240005Szont.s.out .c.out .o.out:
290240005Szont	${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
29131567Ssef	${CTFCONVERT_CMD}
292240005Szont
293240005Szont.f.out .F.out .r.out .e.out:
29431567Ssef	${FC} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} \
29531567Ssef	    ${LDLIBS} -o ${.TARGET}
296240562Szont	rm -f ${.PREFIX}.o
297240562Szont	${CTFCONVERT_CMD}
298240005Szont
299240562Szont# XXX not -j safe
300240562Szont.y.out:
301240005Szont	${YACC} ${YFLAGS} ${.IMPSRC}
302240005Szont	${CC} ${CFLAGS} ${LDFLAGS} y.tab.c ${LDLIBS} -ly -o ${.TARGET}
303240005Szont	rm -f y.tab.c
304240005Szont	${CTFCONVERT_CMD}
305240005Szont
306240005Szont.l.out:
307240005Szont	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
308240005Szont	${CC} ${CFLAGS} ${LDFLAGS} ${.PREFIX}.tmp.c ${LDLIBS} -ll -o ${.TARGET}
309240005Szont	rm -f ${.PREFIX}.tmp.c
310240005Szont	${CTFCONVERT_CMD}
311240005Szont
312240005Szont# FreeBSD build pollution.  Hide it in the non-POSIX part of the ifdef.
313240005Szont__MAKE_CONF?=/etc/make.conf
314240005Szont.if exists(${__MAKE_CONF})
315240562Szont.include "${__MAKE_CONF}"
316240005Szont.endif
317240005Szont
318240562Szont.if defined(__MAKE_SHELL) && !empty(__MAKE_SHELL)
319240005SzontSHELL=	${__MAKE_SHELL}
320240562Szont.SHELL: path=${__MAKE_SHELL}
321240005Szont.endif
322240005Szont
323240005Szont# Default executable format
324171055Sdelphij# XXX hint for bsd.port.mk
325240562SzontOBJFORMAT?=	elf
326240562Szont
327240005Szont# Toggle on warnings
32831567Ssef.WARN: dirsyntax
329240005Szont
330240005Szont.endif
331240005Szont
332240005Szont.include <bsd.compat.mk>
33331567Ssef.include <bsd.cpu.mk>
334240562Szont