sys.mk revision 1.145 1 # $NetBSD: sys.mk,v 1.145 2021/03/22 21:52:26 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 .else
37 DBG?= -O2
38 .endif
39 .if ${MKDTRACE:Uno} != "no"
40 DTRACE_OPTS?= -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-ipa-sra -fno-ipa-icf
41 .endif
42 CFLAGS?= ${DBG}
43 LDFLAGS?=
44 COMPILE.c?= ${CC} ${CFLAGS} ${DTRACE_OPTS} ${CPPFLAGS} -c
45 LINK.c?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}
46
47 # C Type Format data is required for DTrace
48 CTFFLAGS ?= -g -L VERSION
49 CTFMFLAGS ?= -t -g -L VERSION
50 OBJECT_TARGET ?= -o ${.TARGET}${defined(CTFCONVERT):?.o:}
51 EXEC_TARGET ?= -o ${.TARGET}
52 CTFCONVERT_RUN ?= ${defined(CTFCONVERT):?${CTFCONVERT} ${CTFFLAGS} -o ${.TARGET} ${.TARGET}.o && rm -f ${.TARGET}.o:}
53
54 CXX?= c++
55 # Strip flags unsupported by C++ compilers
56 # Remove -Wsystem-headers because C++ headers aren't clean of warnings
57 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}
58
59 # Use the sources, as the seed... Normalize all paths...
60 __ALLSRC1= ${empty(DESTDIR):?${.ALLSRC}:${.ALLSRC:S|^${DESTDIR}|^destdir|}}
61 __ALLSRC2= ${empty(MAKEOBJDIR):?${__ALLSRC1}:${__ALLSRC1:S|^${MAKEOBJDIR}|^obj|}}
62 __ALLSRC3= ${empty(NETBSDSRCDIR):?${__ALLSRC2}:${__ALLSRC2:S|^${NETBSDSRCDIR}|^src|}}
63 __ALLSRC4= ${empty(X11SRCDIR):?${__ALLSRC3}:${__ALLSRC3:S|^${X11SRCDIR}|^xsrc|}}
64 # Skip paths that contain relative components and can't be normalized, sort..
65 __INITSEED= ${__ALLSRC4:N*/../*:O}
66
67 __BUILDSEED= ${BUILDSEED}/${__INITSEED}/${.TARGET}
68 _CXXSEED?= ${BUILDSEED:D-frandom-seed=${__BUILDSEED:hash}}
69
70 COMPILE.cc?= ${CXX} ${_CXXSEED} ${CXXFLAGS} ${DTRACE_OPTS} ${CPPFLAGS} -c
71 LINK.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS}
72
73 OBJC?= ${CC}
74 OBJCFLAGS?= ${CFLAGS}
75 COMPILE.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c
76 LINK.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS}
77
78 CPP?= cpp
79 CPPFLAGS?=
80
81 FC?= f77
82 FFLAGS?= -O
83 RFLAGS?=
84 COMPILE.f?= ${FC} ${FFLAGS} -c
85 LINK.f?= ${FC} ${FFLAGS} ${LDFLAGS}
86 COMPILE.F?= ${FC} ${FFLAGS} ${CPPFLAGS} -c
87 LINK.F?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS}
88 COMPILE.r?= ${FC} ${FFLAGS} ${RFLAGS} -c
89 LINK.r?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS}
90
91 INSTALL?= install
92
93 LD?= ld
94
95 LEX?= lex
96 LFLAGS?=
97 LEX.l?= ${LEX} ${LFLAGS}
98
99 LINT?= lint
100 LINTFLAGS?= -chapbrxzgFS
101
102 LORDER?= lorder
103
104 MAKE?= make
105
106 NM?= nm
107
108 PC?= pc
109 PFLAGS?=
110 COMPILE.p?= ${PC} ${PFLAGS} ${CPPFLAGS} -c
111 LINK.p?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS}
112
113 SHELL?= sh
114
115 SIZE?= size
116
117 TSORT?= tsort -q
118
119 YACC?= yacc
120 YFLAGS?=
121 YACC.y?= ${YACC} ${YFLAGS}
122
123 # C
124 .c:
125 ${LINK.c} ${EXEC_TARGET} ${.IMPSRC} ${LDLIBS}
126 .c.o:
127 ${COMPILE.c} ${.IMPSRC} ${OBJECT_TARGET}
128 ${CTFCONVERT_RUN}
129 .c.a:
130 ${COMPILE.c} ${.IMPSRC}
131 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
132 rm -f ${.PREFIX}.o
133 .c.ln:
134 ${LINT} ${LINTFLAGS} \
135 ${CPPFLAGS:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} \
136 -i ${.IMPSRC}
137
138 # C++
139 .cc .cpp .cxx .C:
140 ${LINK.cc} ${EXEC_TARGET} ${.IMPSRC} ${LDLIBS}
141 .cc.o .cpp.o .cxx.o .C.o:
142 ${COMPILE.cc} ${.IMPSRC} ${OBJECT_TARGET}
143 ${CTFCONVERT_RUN}
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} ${EXEC_TARGET} ${.IMPSRC} ${LDLIBS}
152 .f.o:
153 ${COMPILE.f} ${.IMPSRC} ${OBJECT_TARGET}
154 ${CTFCONVERT_RUN}
155 .f.a:
156 ${COMPILE.f} ${.IMPSRC}
157 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
158 rm -f ${.PREFIX}.o
159
160 .F:
161 ${LINK.F} ${EXEC_TARGET} ${.IMPSRC} ${LDLIBS}
162 .F.o:
163 ${COMPILE.F} ${.IMPSRC} ${OBJECT_TARGET}
164 ${CTFCONVERT_RUN}
165 .F.a:
166 ${COMPILE.F} ${.IMPSRC}
167 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
168 rm -f ${.PREFIX}.o
169
170 .r:
171 ${LINK.r} ${EXEC_TARGET} ${.IMPSRC} ${LDLIBS}
172 .r.o:
173 ${COMPILE.r} ${.IMPSRC} ${OBJECT_TARGET}
174 ${CTFCONVERT_RUN}
175 .r.a:
176 ${COMPILE.r} ${.IMPSRC}
177 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
178 rm -f ${.PREFIX}.o
179
180 # Pascal
181 .p:
182 ${LINK.p} ${EXEC_TARGET} ${.IMPSRC} ${LDLIBS}
183 .p.o:
184 ${COMPILE.p} ${.IMPSRC} ${OBJECT_TARGET}
185 ${CTFCONVERT_RUN}
186 .p.a:
187 ${COMPILE.p} ${.IMPSRC}
188 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
189 rm -f ${.PREFIX}.o
190
191 # Assembly
192 .s:
193 ${LINK.s} ${EXEC_TARGET} ${.IMPSRC} ${LDLIBS}
194 .s.o:
195 ${COMPILE.s} ${.IMPSRC} ${OBJECT_TARGET}
196 ${CTFCONVERT_RUN}
197 .s.a:
198 ${COMPILE.s} ${.IMPSRC}
199 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
200 rm -f ${.PREFIX}.o
201 .S:
202 ${LINK.S} ${EXEC_TARGET} ${.IMPSRC} ${LDLIBS}
203 .S.o:
204 ${COMPILE.S} ${.IMPSRC} ${OBJECT_TARGET}
205 ${CTFCONVERT_RUN}
206 .S.a:
207 ${COMPILE.S} ${.IMPSRC}
208 ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
209 rm -f ${.PREFIX}.o
210
211 # Lex
212 .l:
213 ${LEX.l} ${.IMPSRC}
214 ${LINK.c} ${EXEC_TARGET} lex.yy.c ${LDLIBS} -ll
215 rm -f lex.yy.c
216 .l.c:
217 ${LEX.l} ${.IMPSRC}
218 ${MV} lex.yy.c ${.TARGET}
219 .l.o:
220 ${LEX.l} ${.IMPSRC}
221 ${COMPILE.c} ${OBJECT_TARGET} lex.yy.c
222 ${CTFCONVERT_RUN}
223 rm -f lex.yy.c
224
225 # Yacc
226 .y:
227 ${YACC.y} ${.IMPSRC}
228 ${LINK.c} ${EXEC_TARGET} y.tab.c ${LDLIBS}
229 rm -f y.tab.c
230 .y.c:
231 ${YACC.y} ${.IMPSRC}
232 ${MV} y.tab.c ${.TARGET}
233 .y.o:
234 ${YACC.y} ${.IMPSRC}
235 ${COMPILE.c} ${OBJECT_TARGET} y.tab.c
236 ${CTFCONVERT_RUN}
237 rm -f y.tab.c
238
239 # Shell
240 .sh:
241 rm -f ${.TARGET}
242 cp ${.IMPSRC} ${.TARGET}
243 chmod a+x ${.TARGET}
244