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