xref: /dragonfly/share/mk/sys.mk (revision 36a3d1d6)
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
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}
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