]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/mk/sys.mk
Add META_MODE support.
[FreeBSD/FreeBSD.git] / share / mk / sys.mk
1 #       from: @(#)sys.mk        8.2 (Berkeley) 3/21/94
2 # $FreeBSD$
3
4 unix            ?=      We run FreeBSD, not UNIX.
5 .FreeBSD        ?=      true
6
7 .if !defined(%POSIX)
8 #
9 # MACHINE_CPUARCH defines a collection of MACHINE_ARCH.  Machines with
10 # the same MACHINE_ARCH can run each other's binaries, so it necessarily
11 # has word size and endian swizzled in.  However, support files for
12 # these machines often are shared amongst all combinations of size
13 # and/or endian.  This is called MACHINE_CPU in NetBSD, but that's used
14 # for something different in FreeBSD.
15 #
16 MACHINE_CPUARCH=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc64/powerpc/}
17 .endif
18
19
20 # Some options we need now
21 __DEFAULT_NO_OPTIONS= \
22         DIRDEPS_CACHE \
23         META_MODE \
24         META_FILES \
25
26
27 __DEFAULT_DEPENDENT_OPTIONS= \
28         AUTO_OBJ/META_MODE \
29         STAGING/META_MODE \
30         SYSROOT/META_MODE
31
32 .include <bsd.mkopt.mk>
33
34 # Pull in global settings.
35 __MAKE_CONF?=/etc/make.conf
36 .if exists(${__MAKE_CONF})
37 .include "${__MAKE_CONF}"
38 .endif
39
40 # Set any local definitions first. Place this early, but it needs
41 # MACHINE_CPUARCH to be defined.
42 .-include <local.sys.mk>
43
44 .if ${MK_META_MODE} == "yes"
45 .-include <meta.sys.mk>
46 .elif ${MK_META_FILES} == "yes" && ${.MAKEFLAGS:U:M-B} == ""
47 .MAKE.MODE= meta verbose
48 .endif
49 .if ${MK_AUTO_OBJ} == "yes"
50 # This needs to be done early - before .PATH is computed
51 .-include <auto.obj.mk>
52 .endif
53
54 # If the special target .POSIX appears (without prerequisites or
55 # commands) before the first noncomment line in the makefile, make shall
56 # process the makefile as specified by the Posix 1003.2 specification.
57 # make(1) sets the special macro %POSIX in this case (to the actual
58 # value "1003.2", for what it's worth).
59 #
60 # The rules below use this macro to distinguish between Posix-compliant
61 # and default behaviour.
62
63 .if defined(%POSIX)
64 .SUFFIXES:      .o .c .y .l .a .sh .f
65 .else
66 .SUFFIXES:      .out .a .ln .o .c .cc .cpp .cxx .C .m .F .f .e .r .y .l .S .asm .s .cl .p .h .sh
67 .endif
68
69 AR              ?=      ar
70 .if defined(%POSIX)
71 ARFLAGS         ?=      -rv
72 .else
73 ARFLAGS         ?=      -crD
74 .endif
75 RANLIB          ?=      ranlib
76 .if !defined(%POSIX)
77 RANLIBFLAGS     ?=      -D
78 .endif
79
80 AS              ?=      as
81 AFLAGS          ?=
82 ACFLAGS         ?=
83
84 .if defined(%POSIX)
85 CC              ?=      c89
86 CFLAGS          ?=      -O
87 .else
88 CC              ?=      cc
89 .if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "mips"
90 CFLAGS          ?=      -O -pipe
91 .else
92 CFLAGS          ?=      -O2 -pipe
93 .endif
94 .if defined(NO_STRICT_ALIASING)
95 CFLAGS          +=      -fno-strict-aliasing
96 .endif
97 .endif
98 PO_CFLAGS       ?=      ${CFLAGS}
99
100 # cp(1) is used to copy source files to ${.OBJDIR}, make sure it can handle
101 # read-only files as non-root by passing -f.
102 CP              ?=      cp -f
103
104 CPP             ?=      cpp
105
106 # C Type Format data is required for DTrace
107 CTFFLAGS        ?=      -L VERSION
108
109 CTFCONVERT      ?=      ctfconvert
110 CTFMERGE        ?=      ctfmerge
111
112 .if defined(CFLAGS) && (${CFLAGS:M-g} != "")
113 CTFFLAGS        +=      -g
114 .endif
115
116 CXX             ?=      c++
117 CXXFLAGS        ?=      ${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes:N-Wno-pointer-sign:N-Wold-style-definition}
118 PO_CXXFLAGS     ?=      ${CXXFLAGS}
119
120 DTRACE          ?=      dtrace
121 DTRACEFLAGS     ?=      -C -x nolibs
122
123 .if empty(.MAKEFLAGS:M-s)
124 ECHO            ?=      echo
125 ECHODIR         ?=      echo
126 .else
127 ECHO            ?=      true
128 .if ${.MAKEFLAGS:M-s} == "-s"
129 ECHODIR         ?=      echo
130 .else
131 ECHODIR         ?=      true
132 .endif
133 .endif
134
135 .if defined(.PARSEDIR)
136 # _+_ appears to be a workaround for the special src .MAKE not working.
137 # setting it to + interferes with -N
138 _+_             ?=
139 .elif !empty(.MAKEFLAGS:M-n) && ${.MAKEFLAGS:M-n} == "-n"
140 # the check above matches only a single -n, so -n -n will result
141 # in _+_ = +
142 _+_             ?=
143 .else
144 _+_             ?=      +
145 .endif
146
147 .if defined(%POSIX)
148 FC              ?=      fort77
149 FFLAGS          ?=      -O 1
150 .else
151 FC              ?=      f77
152 FFLAGS          ?=      -O
153 .endif
154 EFLAGS          ?=
155
156 INSTALL         ?=      install
157
158 LEX             ?=      lex
159 LFLAGS          ?=
160
161 LD              ?=      ld
162 LDFLAGS         ?=                              # LDFLAGS is for CC, 
163 _LDFLAGS        =       ${LDFLAGS:S/-Wl,//g}    # strip -Wl, for LD
164
165 LINT            ?=      lint
166 LINTFLAGS       ?=      -cghapbx
167 LINTKERNFLAGS   ?=      ${LINTFLAGS}
168 LINTOBJFLAGS    ?=      -cghapbxu -i
169 LINTOBJKERNFLAGS?=      ${LINTOBJFLAGS}
170 LINTLIBFLAGS    ?=      -cghapbxu -C ${LIB}
171
172 MAKE            ?=      make
173
174 .if !defined(%POSIX)
175 NM              ?=      nm
176
177 OBJC            ?=      cc
178 OBJCFLAGS       ?=      ${OBJCINCLUDES} ${CFLAGS} -Wno-import
179
180 OBJCOPY         ?=      objcopy
181
182 OBJDUMP         ?=      objdump
183
184 PC              ?=      pc
185 PFLAGS          ?=
186
187 RC              ?=      f77
188 RFLAGS          ?=
189 .endif
190
191 SHELL           ?=      sh
192
193 .if !defined(%POSIX)
194 SIZE            ?=      size
195 .endif
196
197 YACC            ?=      yacc
198 .if defined(%POSIX)
199 YFLAGS          ?=
200 .else
201 YFLAGS          ?=      -d
202 .endif
203
204 .if defined(%POSIX)
205
206 # Posix 1003.2 mandated rules
207 #
208 # Quoted directly from the Posix 1003.2 draft, only the macros
209 # $@, $< and $* have been replaced by ${.TARGET}, ${.IMPSRC}, and
210 # ${.PREFIX}, resp.
211
212 # SINGLE SUFFIX RULES
213 .c:
214         ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
215
216 .f:
217         ${FC} ${FFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
218
219 .sh:
220         cp -f ${.IMPSRC} ${.TARGET}
221         chmod a+x ${.TARGET}
222
223 # DOUBLE SUFFIX RULES
224
225 .c.o:
226         ${CC} ${CFLAGS} -c ${.IMPSRC}
227
228 .f.o:
229         ${FC} ${FFLAGS} -c ${.IMPSRC}
230
231 .y.o:
232         ${YACC} ${YFLAGS} ${.IMPSRC}
233         ${CC} ${CFLAGS} -c y.tab.c
234         rm -f y.tab.c
235         mv y.tab.o ${.TARGET}
236
237 .l.o:
238         ${LEX} ${LFLAGS} ${.IMPSRC}
239         ${CC} ${CFLAGS} -c lex.yy.c
240         rm -f lex.yy.c
241         mv lex.yy.o ${.TARGET}
242
243 .y.c:
244         ${YACC} ${YFLAGS} ${.IMPSRC}
245         mv y.tab.c ${.TARGET}
246
247 .l.c:
248         ${LEX} ${LFLAGS} ${.IMPSRC}
249         mv lex.yy.c ${.TARGET}
250
251 .c.a:
252         ${CC} ${CFLAGS} -c ${.IMPSRC}
253         ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
254         rm -f ${.PREFIX}.o
255
256 .f.a:
257         ${FC} ${FFLAGS} -c ${.IMPSRC}
258         ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
259         rm -f ${.PREFIX}.o
260
261 .else
262
263 # non-Posix rule set
264
265 .sh:
266         cp -fp ${.IMPSRC} ${.TARGET}
267         chmod a+x ${.TARGET}
268
269 .c.ln:
270         ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
271             touch ${.TARGET}
272
273 .cc.ln .C.ln .cpp.ln .cxx.ln:
274         ${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \
275             touch ${.TARGET}
276
277 .c:
278         ${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
279         ${CTFCONVERT_CMD}
280
281 .c.o:
282         ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
283         ${CTFCONVERT_CMD}
284
285 .cc .cpp .cxx .C:
286         ${CXX} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
287
288 .cc.o .cpp.o .cxx.o .C.o:
289         ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
290
291 .m.o:
292         ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
293         ${CTFCONVERT_CMD}
294
295 .p.o:
296         ${PC} ${PFLAGS} -c ${.IMPSRC} -o ${.TARGET}
297         ${CTFCONVERT_CMD}
298
299 .e .r .F .f:
300         ${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} \
301             -o ${.TARGET}
302
303 .e.o .r.o .F.o .f.o:
304         ${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC} -o ${.TARGET}
305
306 .S.o:
307         ${CC} ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET}
308         ${CTFCONVERT_CMD}
309
310 .asm.o:
311         ${CC} -x assembler-with-cpp ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC} \
312             -o ${.TARGET}
313         ${CTFCONVERT_CMD}
314
315 .s.o:
316         ${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
317         ${CTFCONVERT_CMD}
318
319 # XXX not -j safe
320 .y.o:
321         ${YACC} ${YFLAGS} ${.IMPSRC}
322         ${CC} ${CFLAGS} -c y.tab.c -o ${.TARGET}
323         rm -f y.tab.c
324         ${CTFCONVERT_CMD}
325
326 .l.o:
327         ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
328         ${CC} ${CFLAGS} -c ${.PREFIX}.tmp.c -o ${.TARGET}
329         rm -f ${.PREFIX}.tmp.c
330         ${CTFCONVERT_CMD}
331
332 # XXX not -j safe
333 .y.c:
334         ${YACC} ${YFLAGS} ${.IMPSRC}
335         mv y.tab.c ${.TARGET}
336
337 .l.c:
338         ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.TARGET}
339
340 .s.out .c.out .o.out:
341         ${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
342         ${CTFCONVERT_CMD}
343
344 .f.out .F.out .r.out .e.out:
345         ${FC} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} \
346             ${LDLIBS} -o ${.TARGET}
347         rm -f ${.PREFIX}.o
348         ${CTFCONVERT_CMD}
349
350 # XXX not -j safe
351 .y.out:
352         ${YACC} ${YFLAGS} ${.IMPSRC}
353         ${CC} ${CFLAGS} ${LDFLAGS} y.tab.c ${LDLIBS} -ly -o ${.TARGET}
354         rm -f y.tab.c
355         ${CTFCONVERT_CMD}
356
357 .l.out:
358         ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
359         ${CC} ${CFLAGS} ${LDFLAGS} ${.PREFIX}.tmp.c ${LDLIBS} -ll -o ${.TARGET}
360         rm -f ${.PREFIX}.tmp.c
361         ${CTFCONVERT_CMD}
362
363
364 .if defined(__MAKE_SHELL) && !empty(__MAKE_SHELL)
365 SHELL=  ${__MAKE_SHELL}
366 .SHELL: path=${__MAKE_SHELL}
367 .endif
368
369 # Tell bmake to expand -V VAR by default
370 .MAKE.EXPAND_VARIABLES= yes
371
372 # Tell bmake the makefile preference
373 .MAKE.MAKEFILE_PREFERENCE= BSDmakefile makefile Makefile
374
375 # By default bmake does *not* use set -e
376 # when running target scripts, this is a problem for many makefiles here.
377 # So define a shell that will do what FreeBSD expects.
378 .ifndef WITHOUT_SHELL_ERRCTL
379 .SHELL: name=sh \
380         quiet="set -" echo="set -v" filter="set -" \
381         hasErrCtl=yes check="set -e" ignore="set +e" \
382         echoFlag=v errFlag=e \
383         path=${__MAKE_SHELL:U/bin/sh}
384 .endif
385
386 .include <bsd.cpu.mk>
387
388 .endif # ! Posix