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