de8e98b1bc605a0b97cc0bb9505879494c756a2c
[dragonfly.git] / share / mk / sys.mk
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
5 unix            ?=      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
24 X11BASE         ?=      /usr/pkg
25
26 AR              ?=      ar
27 NXAR            ?=      ${NXENV} ${AR}
28 .if defined(%POSIX)
29 ARFLAGS         ?=      -rv
30 .else
31 ARFLAGS         ?=      rl
32 .endif
33 RANLIB          ?=      ranlib
34 NXRANLIB        ?=      ${NXENV} ${RANLIB}
35
36 AS              ?=      as
37 AFLAGS          ?=
38
39 AWK             ?=      awk
40
41 .if defined(%POSIX)
42 CC              ?=      c89
43 .else
44 CC              ?=      cc
45 .endif
46 CC_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 #
50 NXENV           ?=      CCVER=${HOST_CCVER} BINUTILSVER=${HOST_BINUTILSVER} OBJFORMAT_PATH=/ PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/pkg/bin
51 NXCC            ?=      ${NXENV} ${CC}
52 NXCC_LINK       ?=      ${NXENV} ${CC_LINK}
53 CFLAGS          ?=      -O -pipe
54
55 CXX             ?=      c++
56 CXX_LINK        ?=      ${CXX}
57 NXCXX           ?=      ${NXENV} ${CXX}
58 NXCXX_LINK      ?=      ${NXENV} ${CXX_LINK}
59 CXXFLAGS        ?=      ${CXXINCLUDES} ${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes:N-Wno-pointer-sign:N-Wold-style-definition}
60
61 CPP             ?=      cpp
62
63 .if ${.MAKEFLAGS:M-s} == ""
64 ECHO            ?=      echo
65 ECHODIR         ?=      echo
66 .else
67 ECHO            ?=      true
68 .if ${.MAKEFLAGS:M-s} == "-s"
69 ECHODIR         ?=      echo
70 .else
71 ECHODIR         ?=      true
72 .endif
73 .endif
74
75 .if defined(%POSIX)
76 FC              ?=      fort77
77 FFLAGS          ?=      -O 1
78 .else
79 FC              ?=      f77
80 FFLAGS          ?=      -O
81 .endif
82 EFLAGS          ?=
83
84 INSTALL         ?=      install
85 LN              ?=      ln
86
87 LEX             ?=      lex
88 LFLAGS          ?=
89
90 LD              ?=      ld
91 NXLD            ?=      ${NXENV} ${LD}
92 LDFLAGS         ?=
93 NXCFLAGS        ?=      ${CFLAGS:N-mtune*:N-mcpu*:N-march*}
94 NXCXXFLAGS      ?=      ${CFLAGS:N-mtune*:N-mcpu*:N-march*}
95 NXLDLIBS        ?=      ${LDLIBS}
96 NXLDFLAGS       ?=      -static ${LDFLAGS}
97
98 LINT            ?=      lint
99 LINTFLAGS       ?=      -chapbx
100
101 MAKE            ?=      make
102
103 OBJC            ?=      cc
104 OBJCFLAGS       ?=      ${OBJCINCLUDES} ${CFLAGS} -Wno-import
105
106 PC              ?=      pc
107 PFLAGS          ?=
108
109 RC              ?=      f77
110 RFLAGS          ?=
111
112 SHELL           ?=      sh
113
114 YACC            ?=      yacc
115 .if defined(%POSIX)
116 YFLAGS          ?=
117 .else
118 YFLAGS          ?=      -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)
140 MACHINE_PLATFORM=pc32
141 .endif
142 .if ${MACHINE} == "pc32"
143 MACHINE=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
318 OBJFORMAT?=     elf
319