xref: /netbsd-src/share/mk/sys.mk (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1#	$NetBSD: sys.mk,v 1.136 2018/07/10 23:25:27 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
8unix?=		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
14AR?=		ar
15ARFLAGS?=	rl
16RANLIB?=	ranlib
17
18AS?=		as
19AFLAGS?=
20COMPILE.s?=	${CC} ${AFLAGS} ${AFLAGS.${<:T}} -c
21LINK.s?=	${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${LDFLAGS}
22_ASM_TRADITIONAL_CPP=	-x assembler-with-cpp
23COMPILE.S?=	${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${CPPFLAGS} ${_ASM_TRADITIONAL_CPP} -c
24LINK.S?=	${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${CPPFLAGS} ${LDFLAGS}
25
26CC?=		cc
27.if ${MACHINE_ARCH} == "sh3el" || ${MACHINE_ARCH} == "sh3eb"
28# -O2 is too -falign-* zealous for low-memory sh3 machines
29DBG?=	-Os -freorder-blocks
30.elif ${MACHINE_ARCH} == "m68k" || ${MACHINE_ARCH} == "m68000"
31# -freorder-blocks (enabled by -O2) produces much bigger code
32DBG?=	-O2 -fno-reorder-blocks
33.elif ${MACHINE_ARCH} == "coldfire"
34DBG?=	-O1
35.elif !empty(MACHINE_ARCH:Maarch64*)
36DBG?=	-O2 ${"${.TARGET:M*.po}" == "":? -fomit-frame-pointer:}
37.else
38DBG?=	-O2
39.endif
40.if ${MKDTRACE:Uno} != "no"
41DTRACE_OPTS?=	-fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-ipa-sra -fno-ipa-icf
42.endif
43CFLAGS?=	${DBG}
44LDFLAGS?=
45COMPILE.c?=	${CC} ${CFLAGS} ${DTRACE_OPTS} ${CPPFLAGS} -c
46LINK.c?=	${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}
47
48# C Type Format data is required for DTrace
49CTFFLAGS	?=	-g -L VERSION
50CTFMFLAGS	?=	-t -g -L VERSION
51
52CXX?=		c++
53# Strip flags unsupported by C++ compilers
54# Remove -Wsystem-headers because C++ headers aren't clean of warnings
55CXXFLAGS?=	${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
68COMPILE.cc?=	echo "random-seed is ${__BUILDSEED}"; ${CXX} ${_CXXSEED} ${CXXFLAGS} ${DTRACE_OPTS} ${CPPFLAGS} -c
69LINK.cc?=	echo "random-seed is ${__BUILDSEED}"; ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS}
70
71OBJC?=		${CC}
72OBJCFLAGS?=	${CFLAGS}
73COMPILE.m?=	${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c
74LINK.m?=	${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS}
75
76CPP?=		cpp
77CPPFLAGS?=
78
79FC?=		f77
80FFLAGS?=	-O
81RFLAGS?=
82COMPILE.f?=	${FC} ${FFLAGS} -c
83LINK.f?=	${FC} ${FFLAGS} ${LDFLAGS}
84COMPILE.F?=	${FC} ${FFLAGS} ${CPPFLAGS} -c
85LINK.F?=	${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS}
86COMPILE.r?=	${FC} ${FFLAGS} ${RFLAGS} -c
87LINK.r?=	${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS}
88
89INSTALL?=	install
90
91LD?=		ld
92
93LEX?=		lex
94LFLAGS?=
95LEX.l?=		${LEX} ${LFLAGS}
96
97LINT?=		lint
98LINTFLAGS?=	-chapbxzgFS
99
100LORDER?=	lorder
101
102MAKE?=		make
103
104NM?=		nm
105
106PC?=		pc
107PFLAGS?=
108COMPILE.p?=	${PC} ${PFLAGS} ${CPPFLAGS} -c
109LINK.p?=	${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS}
110
111SHELL?=		sh
112
113SIZE?=		size
114
115TSORT?= 	tsort -q
116
117YACC?=		yacc
118YFLAGS?=
119YACC.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