sys.mk revision 206082
16059Samurai#	from: @(#)sys.mk	8.2 (Berkeley) 3/21/94
26059Samurai# $FreeBSD: head/share/mk/sys.mk 206082 2010-04-02 06:55:31Z netchild $
36059Samurai
46059Samuraiunix		?=	We run FreeBSD, not UNIX.
56059Samurai.FreeBSD	?=	true
66059Samurai
76059Samurai# If the special target .POSIX appears (without prerequisites or
86059Samurai# commands) before the first noncomment line in the makefile, make shall
96059Samurai# process the makefile as specified by the Posix 1003.2 specification.
106059Samurai# make(1) sets the special macro %POSIX in this case (to the actual
116059Samurai# value "1003.2", for what it's worth).
126059Samurai#
136059Samurai# The rules below use this macro to distinguish between Posix-compliant
146059Samurai# and default behaviour.
156059Samurai
166059Samurai.if defined(%POSIX)
176059Samurai.SUFFIXES:	.o .c .y .l .a .sh .f
186059Samurai.else
196059Samurai.SUFFIXES:	.out .a .ln .o .c .cc .cpp .cxx .C .m .F .f .e .r .y .l .S .asm .s .cl .p .h .sh
2030913Sbrian.endif
218857Srgrimes
226059SamuraiAR		?=	ar
236059Samurai.if defined(%POSIX)
246059SamuraiARFLAGS		?=	-rv
256059Samurai.else
2630715SbrianARFLAGS		?=	rl
2730715Sbrian.endif
2830715SbrianRANLIB		?=	ranlib
2930715Sbrian
3030715SbrianAS		?=	as
3130715SbrianAFLAGS		?=
3230715Sbrian
3330715Sbrian.if defined(%POSIX)
3430715SbrianCC		?=	c89
356059SamuraiCFLAGS		?=	-O
3611336Samurai.else
3730715SbrianCC		?=	cc
3830715Sbrian.if ${MACHINE_ARCH} == "arm" || ${MACHINE_ARCH} == "mips"
3930715SbrianCFLAGS		?=	-O -pipe
4030715Sbrian.else
416059SamuraiCFLAGS		?=	-O2 -pipe
4230715Sbrian.endif
4330715Sbrian.if defined(NO_STRICT_ALIASING)
446059SamuraiCFLAGS		+=	-fno-strict-aliasing
4518786Sjkh.endif
4630715Sbrian.endif
4730715SbrianPO_CFLAGS	?=	${CFLAGS}
4830715Sbrian
4930715Sbrian# Turn CTF conversion off by default for now. This default could be
5030715Sbrian# changed later if DTrace becomes popular.
5130715Sbrian.if !defined(WITH_CTF)
526059SamuraiNO_CTF		=	1
536059Samurai.endif
546059Samurai
5513389Sphk# C Type Format data is required for DTrace
566059SamuraiCTFFLAGS	?=	-L VERSION
576059Samurai
5826142SbrianCTFCONVERT	?=	ctfconvert
5930715SbrianCTFMERGE	?=	ctfmerge
606059Samurai.if defined(CFLAGS) && (${CFLAGS:M-g} != "")
616735SamuraiCTFFLAGS	+=	-g
627001Samurai.else
6313389Sphk# XXX: What to do here? Is removing the CFLAGS part completely ok here?
6413389Sphk# For now comment it out to not compile with -g unconditionally.
6523840Sbrian#CFLAGS		+=	-g
6626940Sbrian.endif
6728536Sbrian
6830715SbrianCXX		?=	c++
6930715SbrianCXXFLAGS	?=	${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes:N-Wno-pointer-sign:N-Wold-style-definition}
7030715SbrianPO_CXXFLAGS	?=	${CXXFLAGS}
716059Samurai
726735SamuraiCPP		?=	cpp
736735Samurai
746735Samurai.if empty(.MAKEFLAGS:M-s)
756735SamuraiECHO		?=	echo
766735SamuraiECHODIR		?=	echo
776735Samurai.else
7830715SbrianECHO		?=	true
7930715Sbrian.if ${.MAKEFLAGS:M-s} == "-s"
806059SamuraiECHODIR		?=	echo
8128679Sbrian.else
8228679SbrianECHODIR		?=	true
8320813Sjkh.endif
8425634Sbrian.endif
8525634Sbrian
8627061Sbrian.if !empty(.MAKEFLAGS:M-n) && ${.MAKEFLAGS:M-n} == "-n"
876059Samurai_+_		?=
8830715Sbrian.else
8930715Sbrian_+_		?=	+
9030715Sbrian.endif
9130715Sbrian
926059Samurai.if defined(%POSIX)
9326858SbrianFC		?=	fort77
946059SamuraiFFLAGS		?=	-O 1
956059Samurai.else
966059SamuraiFC		?=	f77
976059SamuraiFFLAGS		?=	-O
986059Samurai.endif
9925630SbrianEFLAGS		?=
10028679Sbrian
10128679SbrianINSTALL		?=	install
10225630Sbrian
1036059SamuraiLEX		?=	lex
10428679SbrianLFLAGS		?=
1056059Samurai
1066059SamuraiLD		?=	ld
1076059SamuraiLDFLAGS		?=
10826858Sbrian
10926858SbrianLINT		?=	lint
1106059SamuraiLINTFLAGS	?=	-cghapbx
1116059SamuraiLINTKERNFLAGS	?=	${LINTFLAGS}
1126059SamuraiLINTOBJFLAGS	?=	-cghapbxu -i
1136735SamuraiLINTOBJKERNFLAGS?=	${LINTOBJFLAGS}
1146059SamuraiLINTLIBFLAGS	?=	-cghapbxu -C ${LIB}
1156059Samurai
1166059SamuraiMAKE		?=	make
1176059Samurai
1186059SamuraiOBJC		?=	cc
1196059SamuraiOBJCFLAGS	?=	${OBJCINCLUDES} ${CFLAGS} -Wno-import
12010528Samurai
12128679SbrianPC		?=	pc
1226059SamuraiPFLAGS		?=
1236059Samurai
1246059SamuraiRC		?=	f77
1256059SamuraiRFLAGS		?=
1266059Samurai
1276059SamuraiSHELL		?=	sh
1286735Samurai
12928679SbrianYACC		?=	yacc
1306059Samurai.if defined(%POSIX)
1316059SamuraiYFLAGS		?=
1326735Samurai.else
1336059SamuraiYFLAGS		?=	-d
13425630Sbrian.endif
13528679Sbrian
13628679Sbrian.if defined(%POSIX)
13725630Sbrian
1386059Samurai# Posix 1003.2 mandated rules
13928679Sbrian#
14028679Sbrian# Quoted directly from the Posix 1003.2 draft, only the macros
1416059Samurai# $@, $< and $* have been replaced by ${.TARGET}, ${.IMPSRC}, and
1426059Samurai# ${.PREFIX}, resp.
1436059Samurai
1446059Samurai# SINGLE SUFFIX RULES
1456059Samurai.c:
1466059Samurai	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
1476059Samurai	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
1486059Samurai
1496059Samurai.f:
1506059Samurai	${FC} ${FFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
1516735Samurai	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
1526059Samurai
15325630Sbrian.sh:
15428679Sbrian	cp ${.IMPSRC} ${.TARGET}
15528679Sbrian	chmod a+x ${.TARGET}
15625630Sbrian
1576059Samurai# DOUBLE SUFFIX RULES
1586059Samurai
1596059Samurai.c.o:
1606059Samurai	${CC} ${CFLAGS} -c ${.IMPSRC}
16110528Samurai	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
1626059Samurai
1636059Samurai.f.o:
1646059Samurai	${FC} ${FFLAGS} -c ${.IMPSRC}
1656059Samurai	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
16625630Sbrian
16728679Sbrian.y.o:
16828679Sbrian	${YACC} ${YFLAGS} ${.IMPSRC}
16925630Sbrian	${CC} ${CFLAGS} -c y.tab.c
1706735Samurai	rm -f y.tab.c
17110528Samurai	mv y.tab.o ${.TARGET}
17210528Samurai	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
17310528Samurai
17428679Sbrian.l.o:
17510528Samurai	${LEX} ${LFLAGS} ${.IMPSRC}
17630825Sbrian	${CC} ${CFLAGS} -c lex.yy.c
17730825Sbrian	rm -f lex.yy.c
17830697Sbrian	mv lex.yy.o ${.TARGET}
17925908Sbrian	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
1806059Samurai
18128679Sbrian.y.c:
18228679Sbrian	${YACC} ${YFLAGS} ${.IMPSRC}
18323863Sbrian	mv y.tab.c ${.TARGET}
18423863Sbrian
18528679Sbrian.l.c:
18628679Sbrian	${LEX} ${LFLAGS} ${.IMPSRC}
18728679Sbrian	mv lex.yy.c ${.TARGET}
18823863Sbrian
18928679Sbrian.c.a:
19023863Sbrian	${CC} ${CFLAGS} -c ${.IMPSRC}
19123863Sbrian	${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
19228679Sbrian	rm -f ${.PREFIX}.o
1936059Samurai
19426940Sbrian.f.a:
19510528Samurai	${FC} ${FFLAGS} -c ${.IMPSRC}
1966059Samurai	${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
1976059Samurai	rm -f ${.PREFIX}.o
1986059Samurai
1996059Samurai.else
2006059Samurai
20128679Sbrian# non-Posix rule set
2026059Samurai
20326858Sbrian.sh:
20427157Sbrian	cp -p ${.IMPSRC} ${.TARGET}
20528679Sbrian	chmod a+x ${.TARGET}
20628684Sbrian
20728684Sbrian.c.ln:
20830715Sbrian	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
2096059Samurai	    touch ${.TARGET}
2106059Samurai
2116059Samurai.cc.ln .C.ln .cpp.ln .cxx.ln:
21228679Sbrian	${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \
2136059Samurai	    touch ${.TARGET}
21428679Sbrian
21528679Sbrian.c:
21628679Sbrian	${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
21728679Sbrian	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
21828679Sbrian
21928679Sbrian.c.o:
22028679Sbrian	${CC} ${CFLAGS} -c ${.IMPSRC}
22128679Sbrian	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
2226059Samurai
2236059Samurai.cc .cpp .cxx .C:
22410528Samurai	${CXX} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
22510528Samurai
22610528Samurai.cc.o .cpp.o .cxx.o .C.o:
22723840Sbrian	${CXX} ${CXXFLAGS} -c ${.IMPSRC}
22823840Sbrian
22910528Samurai.m.o:
23010528Samurai	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC}
23110528Samurai	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
23210528Samurai
23328679Sbrian.p.o:
23410528Samurai	${PC} ${PFLAGS} -c ${.IMPSRC}
23523840Sbrian	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
23610528Samurai
23723840Sbrian.e .r .F .f:
23810528Samurai	${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} \
23910528Samurai	    -o ${.TARGET}
24010528Samurai
24126940Sbrian.e.o .r.o .F.o .f.o:
24228679Sbrian	${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC}
24326940Sbrian
24426940Sbrian.S.o:
24528679Sbrian	${CC} ${CFLAGS} -c ${.IMPSRC}
24628679Sbrian	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
24729083Sbrian
24829083Sbrian.asm.o:
24926940Sbrian	${CC} -x assembler-with-cpp ${CFLAGS} -c ${.IMPSRC}
25026940Sbrian	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
25125908Sbrian
25225908Sbrian.s.o:
25325908Sbrian	${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
25425908Sbrian	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
25528679Sbrian
25625908Sbrian# XXX not -j safe
25728679Sbrian.y.o:
25810528Samurai	${YACC} ${YFLAGS} ${.IMPSRC}
25928679Sbrian	${CC} ${CFLAGS} -c y.tab.c -o ${.TARGET}
26025908Sbrian	rm -f y.tab.c
26125908Sbrian	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
26225908Sbrian
26325908Sbrian.l.o:
26425908Sbrian	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
26530715Sbrian	${CC} ${CFLAGS} -c ${.PREFIX}.tmp.c -o ${.TARGET}
2666059Samurai	rm -f ${.PREFIX}.tmp.c
2676059Samurai	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
26820120Snate
26928679Sbrian# XXX not -j safe
2706059Samurai.y.c:
2716059Samurai	${YACC} ${YFLAGS} ${.IMPSRC}
2726059Samurai	mv y.tab.c ${.TARGET}
27330715Sbrian
2746059Samurai.l.c:
2756059Samurai	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.TARGET}
2766059Samurai
2776059Samurai.s.out .c.out .o.out:
2786059Samurai	${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
2796059Samurai	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
2806059Samurai
2816059Samurai.f.out .F.out .r.out .e.out:
2826059Samurai	${FC} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} \
2836059Samurai	    ${LDLIBS} -o ${.TARGET}
28420813Sjkh	rm -f ${.PREFIX}.o
28528679Sbrian	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
2866059Samurai
2876059Samurai# XXX not -j safe
2886059Samurai.y.out:
2896059Samurai	${YACC} ${YFLAGS} ${.IMPSRC}
29020120Snate	${CC} ${CFLAGS} ${LDFLAGS} y.tab.c ${LDLIBS} -ly -o ${.TARGET}
29128679Sbrian	rm -f y.tab.c
29220365Sjkh	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
29326142Sbrian
29428679Sbrian.l.out:
29526142Sbrian	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
29628679Sbrian	${CC} ${CFLAGS} ${LDFLAGS} ${.PREFIX}.tmp.c ${LDLIBS} -ll -o ${.TARGET}
29728679Sbrian	rm -f ${.PREFIX}.tmp.c
29828679Sbrian	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
2996059Samurai
3006059Samurai# FreeBSD build pollution.  Hide it in the non-POSIX part of the ifdef.
30128679Sbrian__MAKE_CONF?=/etc/make.conf
30228679Sbrian.if exists(${__MAKE_CONF})
3036059Samurai.include "${__MAKE_CONF}"
3046059Samurai.endif
3056059Samurai
3066059Samurai.if defined(__MAKE_SHELL) && !empty(__MAKE_SHELL)
3076059SamuraiSHELL=	${__MAKE_SHELL}
30828679Sbrian.SHELL: path=${__MAKE_SHELL}
30928679Sbrian.endif
3106059Samurai
3116059Samurai# Default executable format
3126059Samurai# XXX hint for bsd.port.mk
3136059SamuraiOBJFORMAT?=	elf
3146059Samurai
3156059Samurai# Toggle on warnings
3166059Samurai.WARN: dirsyntax
3176059Samurai
3186059Samurai.endif
3196059Samurai
32026516Sbrian.include <bsd.compat.mk>
32126516Sbrian.include <bsd.cpu.mk>
32226516Sbrian