bug 2450: Allow build of RELEASE 3.2 from master's bmake
[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
4 unix            ?=      We run FreeBSD, not UNIX.
5
6 # If the special target .POSIX appears (without prerequisites or
7 # commands) before the first noncomment line in the makefile, make shall
8 # process the makefile as specified by the Posix 1003.2 specification.
9 # make(1) sets the special macro %POSIX in this case (to the actual
10 # value "1003.2", for what it's worth).
11 #
12 # The rules below use this macro to distinguish between Posix-compliant
13 # and default behaviour.
14
15 .if defined(%POSIX)
16 .SUFFIXES:      .o .c .y .l .a .sh .f
17 .else
18 .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
19 .endif
20
21 .LIBS:          .a
22
23 X11BASE         ?=      /usr/pkg
24
25 AR              ?=      ar
26 NXAR            ?=      ${NXENV} ${AR}
27 .if defined(%POSIX)
28 ARFLAGS         ?=      -rv
29 .else
30 ARFLAGS         ?=      rl
31 .endif
32 RANLIB          ?=      ranlib
33 NXRANLIB        ?=      ${NXENV} ${RANLIB}
34
35 AS              ?=      as
36 AFLAGS          ?=
37
38 AWK             ?=      awk
39
40 .if defined(%POSIX)
41 CC              ?=      c89
42 .else
43 CC              ?=      cc
44 .endif
45 CC_LINK         ?=      ${CC}
46 # The system cc frontend is not subject to the path, e.g. when buildworld
47 # is doing cross compiles it may still need the native compiler for things.
48 #
49 NXENV           ?=      CCVER=${HOST_CCVER} BINUTILSVER=${HOST_BINUTILSVER} OBJFORMAT_PATH=/ PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/pkg/bin
50 NXCC            ?=      ${NXENV} ${CC}
51 NXCC_LINK       ?=      ${NXENV} ${CC_LINK}
52 CFLAGS          ?=      -O -pipe
53
54 CXX             ?=      c++
55 CXX_LINK        ?=      ${CXX}
56 NXCXX           ?=      ${NXENV} ${CXX}
57 NXCXX_LINK      ?=      ${NXENV} ${CXX_LINK}
58 CXXFLAGS        ?=      ${CXXINCLUDES} ${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes:N-Wno-pointer-sign:N-Wold-style-definition}
59
60 CPP             ?=      cpp
61
62 .if ${.MAKEFLAGS:M-s} == ""
63 ECHO            ?=      echo
64 ECHODIR         ?=      echo
65 .else
66 ECHO            ?=      true
67 .if ${.MAKEFLAGS:M-s} == "-s"
68 ECHODIR         ?=      echo
69 .else
70 ECHODIR         ?=      true
71 .endif
72 .endif
73
74 .if defined(%POSIX)
75 FC              ?=      fort77
76 FFLAGS          ?=      -O 1
77 .else
78 FC              ?=      f77
79 FFLAGS          ?=      -O
80 .endif
81 EFLAGS          ?=
82
83 INSTALL         ?=      install
84 LN              ?=      ln
85
86 LEX             ?=      lex
87 LFLAGS          ?=
88
89 LD              ?=      ld
90 NXLD            ?=      ${NXENV} ${LD}
91 LDFLAGS         ?=
92 NXCFLAGS        ?=      ${CFLAGS:N-mtune*:N-mcpu*:N-march*}
93 NXCXXFLAGS      ?=      ${CFLAGS:N-mtune*:N-mcpu*:N-march*}
94 NXLDLIBS        ?=      ${LDLIBS}
95 NXLDFLAGS       ?=      -static ${LDFLAGS}
96
97 LINT            ?=      lint
98 LINTFLAGS       ?=      -chapbx
99
100 MAKE            ?=      make
101
102 OBJC            ?=      cc
103 OBJCFLAGS       ?=      ${OBJCINCLUDES} ${CFLAGS} -Wno-import
104
105 PC              ?=      pc
106 PFLAGS          ?=
107
108 RC              ?=      f77
109 RFLAGS          ?=
110
111 SHELL           ?=      sh
112
113 YACC            ?=      yacc
114 .if defined(%POSIX)
115 YFLAGS          ?=
116 .else
117 YFLAGS          ?=      -d
118 .endif
119
120 # The 'make' program is expected to define the following.
121 #
122 # MACHINE_PLATFORM      platform architecture (vkernel, pc32)
123 # MACHINE               machine architecture (i386, etc..)
124 # MACHINE_ARCH          cpu architecture (i386, x86_64, etc)
125 #
126 .if !defined(MACHINE)
127 .error "MACHINE was not defined by make"
128 .endif
129 .if !defined(MACHINE_ARCH)
130 .error "MACHINE_ARCH was not defined by make"
131 .endif
132
133 # Backwards compatibility.  There was a time during 1.7 development
134 # where we tried to rename MACHINE.  This failed and was reverted,
135 # and MACHINE_PLATFORM was added to make the distinction.  These shims
136 # prevent buildworld from breaking.
137 #
138 .if !defined(MACHINE_PLATFORM)
139 MACHINE_PLATFORM!=sysctl -n hw.platform
140 .endif
141 .if ${MACHINE} == "pc32"
142 MACHINE=i386
143 .endif
144
145 .if defined(%POSIX)
146 # Posix 1003.2 mandated rules
147 #
148 # Quoted directly from the Posix 1003.2 draft, only the macros
149 # $@, $< and $* have been replaced by ${.TARGET}, ${.IMPSRC}, and
150 # ${.PREFIX}, resp.
151
152 # SINGLE SUFFIX RULES
153 .c:
154         ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
155
156 .f:
157         ${FC} ${FFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
158
159 .sh:
160         cp ${.IMPSRC} ${.TARGET}
161         chmod a+x ${.TARGET}
162
163 # DOUBLE SUFFIX RULES
164
165 .c.o:
166         ${CC} ${CFLAGS} -c ${.IMPSRC}
167
168 .f.o:
169         ${FC} ${FFLAGS} -c ${.IMPSRC}
170
171 .y.o:
172         ${YACC} ${YFLAGS} ${.IMPSRC}
173         ${CC} ${CFLAGS} -c y.tab.c
174         rm -f y.tab.c
175         mv y.tab.o ${.TARGET}
176
177 .l.o:
178         ${LEX} ${LFLAGS} ${.IMPSRC}
179         ${CC} ${CFLAGS} -c lex.yy.c
180         rm -f lex.yy.c
181         mv lex.yy.o ${.TARGET}
182
183 .y.c:
184         ${YACC} ${YFLAGS} ${.IMPSRC}
185         mv y.tab.c ${.TARGET}
186
187 .l.c:
188         ${LEX} ${LFLAGS} ${.IMPSRC}
189         mv lex.yy.c ${.TARGET}
190
191 .c.a:
192         ${CC} ${CFLAGS} -c ${.IMPSRC}
193         ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
194         rm -f ${.PREFIX}.o
195
196 .f.a:
197         ${FC} ${FFLAGS} -c ${.IMPSRC}
198         ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
199         rm -f ${.PREFIX}.o
200
201 .else
202
203 # non-Posix rule set
204
205 .sh:
206         cp -p ${.IMPSRC} ${.TARGET}
207         chmod a+x ${.TARGET}
208
209 .c:
210         ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
211
212 .c.o:
213         ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC}
214
215 .cc .cpp .cxx .C:
216         ${CXX} ${_${.IMPSRC:T}_FLAGS} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
217
218 .cc.o .cpp.o .cxx.o .C.o:
219         ${CXX} ${_${.IMPSRC:T}_FLAGS} ${CXXFLAGS} -c ${.IMPSRC}
220
221 .m.o:
222         ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} -c ${.IMPSRC}
223
224 .p.o:
225         ${PC} ${_${.IMPSRC:T}_FLAGS} ${PFLAGS} -c ${.IMPSRC}
226
227 .e .r .F .f:
228         ${FC} ${_${.IMPSRC:T}_FLAGS} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} \
229             ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
230
231 .e.o .r.o .F.o .f.o:
232         ${FC} ${_${.IMPSRC:T}_FLAGS} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC}
233
234 .S.o:
235         ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC}
236
237 .s.o:
238         ${AS} ${_${.IMPSRC:T}_FLAGS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
239
240 # XXX not -j safe
241 .y.o:
242         ${YACC} ${YFLAGS} ${.IMPSRC}
243         ${CC} ${CFLAGS} -c y.tab.c -o ${.TARGET}
244         rm -f y.tab.c
245
246 .l.o:
247         ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
248         ${CC} ${CFLAGS} -c ${.PREFIX}.tmp.c -o ${.TARGET}
249         rm -f ${.PREFIX}.tmp.c
250
251 # .no == native object file, for helper code when cross building.
252 #
253 .c.no:
254         ${NXCC} ${_${.IMPSRC:T}_FLAGS} ${NXCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
255
256 .y.no:
257         ${YACC} ${YFLAGS} ${.IMPSRC}
258         ${NXCC} ${NXCFLAGS} -c y.tab.c -o ${.TARGET}
259         rm -f y.tab.c
260
261 .l.no:
262         ${LEX} ${LFLAGS} -o${.TARGET}.c ${.IMPSRC}
263         ${NXCC} ${NXCFLAGS} -c ${.TARGET}.c -o ${.TARGET}
264         rm -f ${.TARGET}.c
265
266 .no.nx .c.nx:
267         ${NXCC} ${_${.IMPSRC:T}_FLAGS} ${NXCFLAGS} ${NXLDFLAGS} ${.IMPSRC} \
268             ${NXLDLIBS} -o ${.TARGET}
269
270 # XXX not -j safe
271 .y.c:
272         ${YACC} ${YFLAGS} ${.IMPSRC}
273         mv y.tab.c ${.TARGET}
274
275 .l.c:
276         ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.TARGET}
277
278 .s.out .c.out .o.out:
279         ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
280
281 .f.out .F.out .r.out .e.out:
282         ${FC} ${_${.IMPSRC:T}_FLAGS} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} \
283             ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
284         rm -f ${.PREFIX}.o
285
286 # XXX not -j safe
287 .y.out:
288         ${YACC} ${YFLAGS} ${.IMPSRC}
289         ${CC} ${CFLAGS} ${LDFLAGS} y.tab.c ${LDLIBS} -ly -o ${.TARGET}
290         rm -f y.tab.c
291
292 .l.out:
293         ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
294         ${CC} ${CFLAGS} ${LDFLAGS} ${.PREFIX}.tmp.c ${LDLIBS} -ll -o ${.TARGET}
295         rm -f ${.PREFIX}.tmp.c
296
297 .endif
298
299 .if exists(/etc/defaults/make.conf)
300 .include </etc/defaults/make.conf>
301 .endif
302
303 __MAKE_CONF?=/etc/make.conf
304 .if exists(${__MAKE_CONF})
305 .include "${__MAKE_CONF}"
306 .endif
307
308 .include <bsd.cpu.mk>
309
310 .if exists(/etc/make.conf.local)
311 .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.
312 .include </etc/make.conf.local>
313 .endif
314
315 # Default executable format
316 # XXX hint for bsd.port.mk
317 OBJFORMAT?=     elf
318
319 # Tell bmake to expand -V VAR be default
320 .MAKE.EXPAND_VARIABLES= yes
321
322 .if !defined(.PARSEDIR)
323 # Not using bmake, which is aggressive about search .PATH
324 # It is sometimes necessary to curb its enthusiam with .NOPATH
325 # The following allows us to quietly ignore .NOPATH when no using bmake.
326 .NOTMAIN: .NOPATH
327 .NOPATH:
328
329 .endif