sys.mk revision 1.140 1 # $NetBSD: sys.mk,v 1.140 2019/12/20 04:04:25 christos Exp $
2 # @(#)sys.mk 8.2 (Berkeley) 3/21/94
3 #
4 # This file contains the basic rules for make(1) and is read first
5 # Do not put conditionals that are set on different files here and
6 # expect them to work.
7
8 unix?= We run NetBSD.
9
10 .SUFFIXES: .a .o .ln .s .S .c .cc .cpp .cxx .C .f .F .r .p .l .y .sh
11
12 .LIBS: .a
13
14 AR?= ar
15 ARFLAGS?= rl
16 RANLIB?= ranlib
17 MV?= mv -f
18
19 AS?= as
20 AFLAGS?=
21 COMPILE.s?= ${CC} ${AFLAGS} ${AFLAGS.${<:T}} -c
22 LINK.s?= ${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${LDFLAGS}
23 _ASM_TRADITIONAL_CPP= -x assembler-with-cpp
24 COMPILE.S?= ${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${CPPFLAGS} ${_ASM_TRADITIONAL_CPP} -c
25 LINK.S?= ${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${CPPFLAGS} ${LDFLAGS}
26
27 CC?= cc
28 .if ${MACHINE_ARCH} == "sh3el" || ${MACHINE_ARCH} == "sh3eb"
29 # -O2 is too -falign-* zealous for low-memory sh3 machines
30 DBG?= -Os -freorder-blocks
31 .elif ${MACHINE_ARCH} == "m68k" || ${MACHINE_ARCH} == "m68000"
32 # -freorder-blocks (enabled by -O2) produces much bigger code
33 DBG?= -O2 -fno-reorder-blocks
34 .elif ${MACHINE_ARCH} == "coldfire"
35 DBG?= -O1
36 .elif !empty(MACHINE_ARCH:Maarch64*)
37 DBG?= -O2 ${"${.TARGET:M*.po}" == "":? -fomit-frame-pointer:}
38 .else
39 DBG?= -O2
40 .endif
41 .if ${MKDTRACE:Uno} != "no"
42 DTRACE_OPTS?= -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-ipa-sra -fno-ipa-icf
43 .endif
44 CFLAGS?= ${DBG}
45 LDFLAGS?=
46 COMPILE.c?= ${CC} ${CFLAGS} ${DTRACE_OPTS} ${CPPFLAGS} -c
47 LINK.c?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}
48
49 # C Type Format data is required for DTrace
50 CTFFLAGS ?= -g -L VERSION
51 CTFMFLAGS ?= -t -g -L VERSION
52
53 CXX?= c++
54 # Strip flags unsupported by C++ compilers
55 # Remove -Wsystem-headers because C++ headers aren't clean of warnings
56 CXXFLAGS?= ${CFLAGS:N-Wno-traditional:N-Wstrict-prototypes:N-Wmissing-prototypes:N-Wno-pointer-sign:N-ffreestanding:N-std=gnu[0-9][0-9]:N-Wold-style-definition:N-Wno-format-zero-length:N-Wsystem-headers}
57
58 # Use the sources, as the seed... Normalize all paths...
59 __ALLSRC1= ${empty(DESTDIR):?${.ALLSRC}:${.ALLSRC:S|^${DESTDIR}|^destdir|}}
60 __ALLSRC2= ${empty(MAKEOBJDIR):?${__ALLSRC1}:${__ALLSRC1:S|^${MAKEOBJDIR}|^obj|}}
61 __ALLSRC3= ${empty(NETBSDSRCDIR):?${__ALLSRC2}:${__ALLSRC2:S|^${NETBSDSRCDIR}|^src|}}
62 __ALLSRC4= ${empty(X11SRCDIR):?${__ALLSRC3}:${__ALLSRC3:S|^${X11SRCDIR}|^xsrc|}}
63 # Skip paths that contain relative components and can't be normalized, sort..
64 __INITSEED= ${__ALLSRC4:N*/../*:O}
65
66 __BUILDSEED= ${BUILDSEED}/${__INITSEED}/${.TARGET}
67 _CXXSEED?= ${BUILDSEED:D-frandom-seed=${__BUILDSEED:hash}}
68
69 COMPILE.cc?= ${CXX} ${_CXXSEED} ${CXXFLAGS} ${DTRACE_OPTS} ${CPPFLAGS} -c
70 LINK.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS}
71
72 OBJC?= ${CC}
73 OBJCFLAGS?= ${CFLAGS}
74 COMPILE.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c
75 LINK.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS}
76
77 CPP?= cpp
78 CPPFLAGS?=
79
80 FC?= f77
81 FFLAGS?= -O
82 RFLAGS?=
83 COMPILE.f?= ${FC} ${FFLAGS} -c
84 LINK.f?= ${FC} ${FFLAGS} ${LDFLAGS}
85 COMPILE.F?= ${FC} ${FFLAGS} ${CPPFLAGS} -c
86 LINK.F?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS}
87 COMPILE.r?= ${FC} ${FFLAGS} ${RFLAGS} -c
88 LINK.r?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS}
89
90 INSTALL?= install
91
92 LD?= ld
93
94 LEX?= lex
95 LFLAGS?=
96 LEX.l?= ${LEX} ${LFLAGS}
97
98 LINT?= lint
99 LINTFLAGS?= -chapbrxzgFS
100
101 LORDER?= lorder
102
103 MAKE?= make
104
105 NM?= nm
106
107 PC?= pc
108 PFLAGS?=
109 COMPILE.p?= ${PC} ${PFLAGS} ${CPPFLAGS} -c
110 LINK.p?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS}
111
112 SHELL?= sh
113
114 SIZE?= size
115
116 TSORT?= tsort -q
117
118 YACC?= yacc
119 YFLAGS?=
120 YACC.y?= ${YACC} ${YFLAGS}
121
122 # C
123 .c:
124 ${LINK.c} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
125 # XXX: disable for now
126 # ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
127 .c.o:
128 ${COMPILE.c} ${.IMPSRC}
129 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
130 .c.a:
131 ${COMPILE.c} ${.IMPSRC}
132 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
133 rm -f ${.PREFIX}.o
134 .c.ln:
135 ${LINT} ${LINTFLAGS} \
136 ${CPPFLAGS:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} \
137 -i ${.IMPSRC}
138
139 # C++
140 .cc .cpp .cxx .C:
141 ${LINK.cc} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
142 .cc.o .cpp.o .cxx.o .C.o:
143 ${COMPILE.cc} ${.IMPSRC}
144 .cc.a .cpp.a .cxx.a .C.a:
145 ${COMPILE.cc} ${.IMPSRC}
146 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
147 rm -f ${.PREFIX}.o
148
149 # Fortran/Ratfor
150 .f:
151 ${LINK.f} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
152 .f.o:
153 ${COMPILE.f} ${.IMPSRC}
154 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
155 .f.a:
156 ${COMPILE.f} ${.IMPSRC}
157 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
158 rm -f ${.PREFIX}.o
159
160 .F:
161 ${LINK.F} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
162 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
163 .F.o:
164 ${COMPILE.F} ${.IMPSRC}
165 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
166 .F.a:
167 ${COMPILE.F} ${.IMPSRC}
168 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
169 rm -f ${.PREFIX}.o
170
171 .r:
172 ${LINK.r} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
173 .r.o:
174 ${COMPILE.r} ${.IMPSRC}
175 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
176 .r.a:
177 ${COMPILE.r} ${.IMPSRC}
178 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
179 rm -f ${.PREFIX}.o
180
181 # Pascal
182 .p:
183 ${LINK.p} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
184 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
185 .p.o:
186 ${COMPILE.p} ${.IMPSRC}
187 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
188 .p.a:
189 ${COMPILE.p} ${.IMPSRC}
190 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
191 rm -f ${.PREFIX}.o
192
193 # Assembly
194 .s:
195 ${LINK.s} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
196 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
197 .s.o:
198 ${COMPILE.s} ${.IMPSRC}
199 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
200 .s.a:
201 ${COMPILE.s} ${.IMPSRC}
202 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
203 rm -f ${.PREFIX}.o
204 .S:
205 ${LINK.S} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
206 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
207 .S.o:
208 ${COMPILE.S} ${.IMPSRC}
209 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
210 .S.a:
211 ${COMPILE.S} ${.IMPSRC}
212 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
213 rm -f ${.PREFIX}.o
214
215 # Lex
216 .l:
217 ${LEX.l} ${.IMPSRC}
218 ${LINK.c} -o ${.TARGET} lex.yy.c ${LDLIBS} -ll
219 rm -f lex.yy.c
220 .l.c:
221 ${LEX.l} ${.IMPSRC}
222 ${MV} lex.yy.c ${.TARGET}
223 .l.o:
224 ${LEX.l} ${.IMPSRC}
225 ${COMPILE.c} -o ${.TARGET} lex.yy.c
226 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
227 rm -f lex.yy.c
228
229 # Yacc
230 .y:
231 ${YACC.y} ${.IMPSRC}
232 ${LINK.c} -o ${.TARGET} y.tab.c ${LDLIBS}
233 rm -f y.tab.c
234 .y.c:
235 ${YACC.y} ${.IMPSRC}
236 ${MV} y.tab.c ${.TARGET}
237 .y.o:
238 ${YACC.y} ${.IMPSRC}
239 ${COMPILE.c} -o ${.TARGET} y.tab.c
240 ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} ${.TARGET}:}
241 rm -f y.tab.c
242
243 # Shell
244 .sh:
245 rm -f ${.TARGET}
246 cp ${.IMPSRC} ${.TARGET}
247 chmod a+x ${.TARGET}
248