xref: /dragonfly/share/mk/sys.mk (revision 1bf4b486)
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.14 2005/07/07 11:49:56 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/X11R6
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
39.if defined(%POSIX)
40CC		?=	c89
41.else
42CC		?=	cc
43.endif
44# The system cc frontend is not subject to the path, e.g. when buildworld
45# is doing cross compiles it may still need the native compiler for things.
46#
47NXENV		?=	CCVER=${HOST_CCVER} OBJFORMAT_PATH=/ PATH=/usr/bin:/bin:/usr/sbin:/sbin
48NXCC		?=	${NXENV} ${CC}
49CFLAGS		?=	-O -pipe
50
51CXX		?=	c++
52NXCXX		?=	${NXENV} ${CXX}
53CXXFLAGS	?=	${CXXINCLUDES} ${CFLAGS}
54
55CPP		?=	cpp
56
57.if ${.MAKEFLAGS:M-s} == ""
58ECHO		?=	echo
59ECHODIR		?=	echo
60.else
61ECHO		?=	true
62.if ${.MAKEFLAGS:M-s} == "-s"
63ECHODIR		?=	echo
64.else
65ECHODIR		?=	true
66.endif
67.endif
68
69.if defined(%POSIX)
70FC		?=	fort77
71FFLAGS		?=	-O 1
72.else
73FC		?=	f77
74FFLAGS		?=	-O
75.endif
76EFLAGS		?=
77
78INSTALL		?=	install
79LN		?=	ln
80
81LEX		?=	lex
82LFLAGS		?=
83
84LD		?=	ld
85NXLD		?=	${NXENV} ${LD}
86LDFLAGS		?=
87NXCFLAGS	?=	${CFLAGS:N-mtune*:N-mcpu*:N-march*}
88NXCXXFLAGS	?=	${CFLAGS:N-mtune*:N-mcpu*:N-march*}
89NXLDLIBS	?=	${LDLIBS}
90NXLDFLAGS	?=	-static ${LDFLAGS}
91
92LINT		?=	lint
93LINTFLAGS	?=	-chapbx
94
95MAKE		?=	make
96
97OBJC		?=	cc
98OBJCFLAGS	?=	${OBJCINCLUDES} ${CFLAGS} -Wno-import
99
100PC		?=	pc
101PFLAGS		?=
102
103RC		?=	f77
104RFLAGS		?=
105
106SHELL		?=	sh
107
108YACC		?=	yacc
109.if defined(%POSIX)
110YFLAGS		?=
111.else
112YFLAGS		?=	-d
113.endif
114
115# FreeBSD/i386 has traditionally been built with a version of make
116# which knows MACHINE, but not MACHINE_ARCH. When building on other
117# architectures, assume that the version of make being used has an
118# explicit MACHINE_ARCH setting and treat a missing MACHINE_ARCH
119# as an i386 architecture.
120MACHINE_ARCH	?=	i386
121
122.if defined(%POSIX)
123# Posix 1003.2 mandated rules
124#
125# Quoted directly from the Posix 1003.2 draft, only the macros
126# $@, $< and $* have been replaced by ${.TARGET}, ${.IMPSRC}, and
127# ${.PREFIX}, resp.
128
129# SINGLE SUFFIX RULES
130.c:
131	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
132
133.f:
134	${FC} ${FFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
135
136.sh:
137	cp ${.IMPSRC} ${.TARGET}
138	chmod a+x ${.TARGET}
139
140# DOUBLE SUFFIX RULES
141
142.c.o:
143	${CC} ${CFLAGS} -c ${.IMPSRC}
144
145.f.o:
146	${FC} ${FFLAGS} -c ${.IMPSRC}
147
148.y.o:
149	${YACC} ${YFLAGS} ${.IMPSRC}
150	${CC} ${CFLAGS} -c y.tab.c
151	rm -f y.tab.c
152	mv y.tab.o ${.TARGET}
153
154.l.o:
155	${LEX} ${LFLAGS} ${.IMPSRC}
156	${CC} ${CFLAGS} -c lex.yy.c
157	rm -f lex.yy.c
158	mv lex.yy.o ${.TARGET}
159
160.y.c:
161	${YACC} ${YFLAGS} ${.IMPSRC}
162	mv y.tab.c ${.TARGET}
163
164.l.c:
165	${LEX} ${LFLAGS} ${.IMPSRC}
166	mv lex.yy.c ${.TARGET}
167
168.c.a:
169	${CC} ${CFLAGS} -c ${.IMPSRC}
170	${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
171	rm -f ${.PREFIX}.o
172
173.f.a:
174	${FC} ${FFLAGS} -c ${.IMPSRC}
175	${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
176	rm -f ${.PREFIX}.o
177
178.else
179
180# non-Posix rule set
181
182.sh:
183	cp -p ${.IMPSRC} ${.TARGET}
184	chmod a+x ${.TARGET}
185
186.c:
187	${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
188
189.c.o:
190	${CC} ${CFLAGS} -c ${.IMPSRC}
191
192.cc .cpp .cxx .C:
193	${CXX} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
194
195.cc.o .cpp.o .cxx.o .C.o:
196	${CXX} ${CXXFLAGS} -c ${.IMPSRC}
197
198.m.o:
199	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC}
200
201.p.o:
202	${PC} ${PFLAGS} -c ${.IMPSRC}
203
204.e .r .F .f:
205	${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} \
206	    -o ${.TARGET}
207
208.e.o .r.o .F.o .f.o:
209	${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC}
210
211.S.o:
212	${CC} ${CFLAGS} -c ${.IMPSRC}
213
214.s.o:
215	${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
216
217# XXX not -j safe
218.y.o:
219	${YACC} ${YFLAGS} ${.IMPSRC}
220	${CC} ${CFLAGS} -c y.tab.c -o ${.TARGET}
221	rm -f y.tab.c
222
223.l.o:
224	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
225	${CC} ${CFLAGS} -c ${.PREFIX}.tmp.c -o ${.TARGET}
226	rm -f ${.PREFIX}.tmp.c
227
228# .no == native object file, for helper code when cross building.
229#
230.c.no:
231	${NXCC} ${NXCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
232
233.y.no:
234	${YACC} ${YFLAGS} ${.IMPSRC}
235	${NXCC} ${NXCFLAGS} -c y.tab.c -o ${.TARGET}
236	rm -f y.tab.c
237
238.l.no:
239	${LEX} ${LFLAGS} -o${.TARGET}.c ${.IMPSRC}
240	${NXCC} ${NXCFLAGS} -c ${.TARGET}.c -o ${.TARGET}
241	rm -f ${.TARGET}.c
242
243.no.nx .c.nx:
244	${NXCC} ${NXCFLAGS} ${NXLDFLAGS} ${.IMPSRC} ${NXLDLIBS} -o ${.TARGET}
245
246# XXX not -j safe
247.y.c:
248	${YACC} ${YFLAGS} ${.IMPSRC}
249	mv y.tab.c ${.TARGET}
250
251.l.c:
252	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.TARGET}
253
254.s.out .c.out .o.out:
255	${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
256
257.f.out .F.out .r.out .e.out:
258	${FC} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} \
259	    ${LDLIBS} -o ${.TARGET}
260	rm -f ${.PREFIX}.o
261
262# XXX not -j safe
263.y.out:
264	${YACC} ${YFLAGS} ${.IMPSRC}
265	${CC} ${CFLAGS} ${LDFLAGS} y.tab.c ${LDLIBS} -ly -o ${.TARGET}
266	rm -f y.tab.c
267
268.l.out:
269	${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
270	${CC} ${CFLAGS} ${LDFLAGS} ${.PREFIX}.tmp.c ${LDLIBS} -ll -o ${.TARGET}
271	rm -f ${.PREFIX}.tmp.c
272
273.endif
274
275.if exists(/etc/defaults/make.conf)
276.include </etc/defaults/make.conf>
277.endif
278
279__MAKE_CONF?=/etc/make.conf
280.if exists(${__MAKE_CONF})
281.include "${__MAKE_CONF}"
282.endif
283
284.include <bsd.cpu.mk>
285
286.if exists(/etc/make.conf.local)
287.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.
288.include </etc/make.conf.local>
289.endif
290
291# Default executable format
292# XXX hint for bsd.port.mk
293OBJFORMAT?=	elf
294
295