xref: /openbsd/share/mk/bsd.lib.mk (revision 8932bfb7)
1#	$OpenBSD: bsd.lib.mk,v 1.61 2011/07/16 23:34:21 guenther Exp $
2#	$NetBSD: bsd.lib.mk,v 1.67 1996/01/17 20:39:26 mycroft Exp $
3#	@(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
4
5.include <bsd.own.mk>				# for 'NOPIC' definition
6
7.if exists(${.CURDIR}/../Makefile.inc)
8.include "${.CURDIR}/../Makefile.inc"
9.endif
10
11.if exists(${.CURDIR}/shlib_version)
12.include "${.CURDIR}/shlib_version"
13.if defined(LIB) && defined(LIB${LIB}_VERSION)
14SHLIB_MAJOR=${LIB${LIB}_VERSION:R}
15SHLIB_MINOR=${LIB${LIB}_VERSION:E}
16.else
17SHLIB_MAJOR=${major}
18SHLIB_MINOR=${minor}
19.endif
20.endif
21
22.MAIN: all
23
24# prefer .S to a .c, add .po, remove stuff not used in the BSD libraries.
25# .so used for PIC object files.  .ln used for lint output files.
26# .m for objective c files.
27.SUFFIXES:
28.SUFFIXES: .out .o .go .po .so .S .s .c .cc .C .cxx .f .y .l .ln .m4 .m
29
30.c.o:
31	@echo "${COMPILE.c} ${.IMPSRC} -o ${.TARGET}"
32	@${COMPILE.c} ${.IMPSRC}  -o ${.TARGET}.o
33	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
34	@rm -f ${.TARGET}.o
35
36.c.go:
37	@echo "${COMPILE.c} -g ${.IMPSRC} -o ${.TARGET}"
38	@${COMPILE.c} -g ${.IMPSRC} -o ${.TARGET}.o
39	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
40	@rm -f ${.TARGET}.o
41
42.c.po:
43	@echo "${COMPILE.c} -p ${.IMPSRC} -o ${.TARGET}"
44	@${COMPILE.c} -p ${.IMPSRC} -o ${.TARGET}.o
45	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
46	@rm -f ${.TARGET}.o
47
48.c.so:
49	@echo "${COMPILE.c} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}"
50	@${COMPILE.c} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o
51	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
52	@rm -f ${.TARGET}.o
53
54.c.ln:
55	${LINT} ${LINTFLAGS} ${CFLAGS:M-[IDU]*} ${CPPFLAGS:M-[IDU]*} -i ${.IMPSRC}
56
57.cc.o .C.o .cxx.o:
58	@echo "${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}"
59	@${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}.o
60	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
61	@rm -f ${.TARGET}.o
62
63.cc.go .C.go .cxx.go:
64	@echo "${COMPILE.cc} -g ${.IMPSRC} -o ${.TARGET}"
65	@${COMPILE.cc} -g ${.IMPSRC} -o ${.TARGET}.o
66	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
67	@rm -f ${.TARGET}.o
68
69.cc.po .C.po .cxx.po:
70	@echo "${COMPILE.cc} -p ${.IMPSRC} -o ${.TARGET}"
71	@${COMPILE.cc} -p ${.IMPSRC} -o ${.TARGET}.o
72	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
73	@rm -f ${.TARGET}.o
74
75.cc.so .C.so .cxx.so:
76	@echo "${COMPILE.cc} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}"
77	@${COMPILE.cc} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o
78	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
79	@rm -f ${.TARGET}.o
80
81# Fortran 77
82.f.o:
83	@echo "${COMPILE.f} ${.IMPSRC} -o ${.TARGET}"
84	@${COMPILE.f} ${.IMPSRC} -o ${.TARGET}.o
85	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
86	@rm -f ${.TARGET}.o
87
88.f.go:
89	@echo "${COMPILE.f} -g ${.IMPSRC} -o ${.TARGET}"
90	@${COMPILE.f} -g ${.IMPSRC} -o ${.TARGET}.o
91	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
92	@rm -f ${.TARGET}.o
93
94.f.po:
95	@echo "${COMPILE.f} -p ${.IMPSRC} -o ${.TARGET}"
96	@${COMPILE.f} -p ${.IMPSRC} -o ${.TARGET}.o
97	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
98	@rm -f ${.TARGET}.o
99
100.f.so:
101	@echo "${COMPILE.f} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}"
102	@${COMPILE.f} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o
103	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
104	@rm -f ${.TARGET}.o
105
106.S.o .s.o:
107.if (${MACHINE_ARCH} == "arm")
108	@echo ${COMPILE.S:Q} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC}
109	@${COMPILE.S} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
110.else
111	@echo "${CPP} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
112		${AS} -o ${.TARGET}"
113	@${CPP} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
114	    ${AS} -o ${.TARGET}.o
115.endif
116	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
117	@rm -f ${.TARGET}.o
118
119.S.go .s.go:
120	@echo "${CPP} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} |\
121	    ${AS} -o ${.TARGET}"
122	@${CPP} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
123	    ${AS} -o ${.TARGET}.o
124	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
125	@rm -f ${.TARGET}.o
126
127.S.po .s.po:
128	@echo "${CPP} -DPROF ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} |\
129	    ${AS} -o ${.TARGET}"
130	@${CPP} -DPROF ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
131	    ${AS} -o ${.TARGET}.o
132	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
133	@rm -f ${.TARGET}.o
134
135.S.so .s.so:
136	@echo "${CPP} -DPIC ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
137	    ${AS} ${ASPICFLAG} -o ${.TARGET}"
138	@${CPP} -DPIC ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
139	    ${AS} ${ASPICFLAG} -o ${.TARGET}.o
140	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
141	@rm -f ${.TARGET}.o
142
143.if ${WARNINGS:L} == "yes"
144CFLAGS+=	${CDIAGFLAGS}
145CXXFLAGS+=	${CXXDIAGFLAGS}
146.endif
147CFLAGS+=	${COPTS}
148CXXFLAGS+=	${CXXOPTS}
149
150.if ${MACHINE} != "zaurus"
151DEBUG?=	-g
152.endif
153
154_LIBS=lib${LIB}.a
155.if (${DEBUGLIBS:L} == "yes")
156_LIBS+=lib${LIB}_g.a
157.endif
158.if !defined(NOPROFILE)
159_LIBS+=lib${LIB}_p.a
160.endif
161
162.if !defined(NOPIC)
163.if (${MACHINE_CPU} != "mips64")
164_LIBS+=lib${LIB}_pic.a
165.endif
166.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
167_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
168.endif
169.endif
170
171.if defined(WANTLINT) && ${WANTLINT:L} != "no"
172_LIBS+=llib-l${LIB}.ln
173.endif
174
175all: ${_LIBS} _SUBDIRUSE
176
177OBJS+=	${SRCS:N*.h:R:S/$/.o/}
178
179lib${LIB}.a:: ${OBJS}
180	@echo building standard ${LIB} library
181	@rm -f lib${LIB}.a
182	@${AR} cq lib${LIB}.a `${LORDER} ${OBJS} | tsort -q`
183	${RANLIB} lib${LIB}.a
184
185GOBJS+=	${OBJS:.o=.go}
186lib${LIB}_g.a:: ${GOBJS}
187	@echo building debugging ${LIB} library
188	@rm -f lib${LIB}_g.a
189	@${AR} cq lib${LIB}_g.a `${LORDER} ${GOBJS} | tsort -q`
190	${RANLIB} lib${LIB}_g.a
191
192POBJS+=	${OBJS:.o=.po}
193lib${LIB}_p.a:: ${POBJS}
194	@echo building profiled ${LIB} library
195	@rm -f lib${LIB}_p.a
196	@${AR} cq lib${LIB}_p.a `${LORDER} ${POBJS} | tsort -q`
197	${RANLIB} lib${LIB}_p.a
198
199SOBJS+=	${OBJS:.o=.so}
200lib${LIB}_pic.a:: ${SOBJS}
201	@echo building shared object ${LIB} library
202	@rm -f lib${LIB}_pic.a
203	@${AR} cq lib${LIB}_pic.a `${LORDER} ${SOBJS} | tsort -q`
204	${RANLIB} lib${LIB}_pic.a
205
206lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS} ${DPADD}
207	@echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
208	@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
209	${CC} -shared ${PICFLAG} \
210	    -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
211	    `${LORDER} ${SOBJS}|tsort -q` ${LDADD}
212
213LOBJS+=	${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln}
214LLIBS?=	-lc
215llib-l${LIB}.ln: ${LOBJS}
216	@echo building llib-l${LIB}.ln
217	@rm -f llib-l${LIB}.ln
218	@${LINT} -C${LIB} ${LOBJS} ${LLIBS}
219
220.if !target(clean)
221clean: _SUBDIRUSE
222	rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES}
223	rm -f lib${LIB}.a ${OBJS}
224	rm -f lib${LIB}_g.a ${GOBJS}
225	rm -f lib${LIB}_p.a ${POBJS}
226	rm -f lib${LIB}_pic.a lib${LIB}.so.*.* ${SOBJS}
227	rm -f llib-l${LIB}.ln ${LOBJS}
228.endif
229
230cleandir: _SUBDIRUSE clean
231
232.if defined(SRCS)
233afterdepend: .depend
234	@(TMP=`mktemp -q /tmp/_dependXXXXXXXXXX`; \
235	if [ $$? -ne 0 ]; then \
236		echo "$$0: cannot create temp file, exiting..."; \
237		exit 1; \
238	fi; \
239	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' \
240	      < .depend > $$TMP; \
241	mv $$TMP .depend)
242.endif
243
244.if !target(install)
245.if !target(beforeinstall)
246beforeinstall:
247.endif
248
249realinstall:
250#	ranlib lib${LIB}.a
251	${INSTALL} ${INSTALL_COPY} -S -o ${LIBOWN} -g ${LIBGRP} -m 600 lib${LIB}.a \
252	    ${DESTDIR}${LIBDIR}/lib${LIB}.a
253.if (${INSTALL_COPY} != "-p")
254	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}.a
255.endif
256	chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}.a
257.if (${DEBUGLIBS:L} == "yes")
258#	ranlib lib${LIB}_g.a
259	${INSTALL} ${INSTALL_COPY} -S -o ${LIBOWN} -g ${LIBGRP} -m 600 \
260	    lib${LIB}_g.a ${DESTDIR}${LIBDIR}/debug/lib${LIB}.a
261.if (${INSTALL_COPY} != "-p")
262	${RANLIB} -t ${DESTDIR}${LIBDIR}/debug/lib${LIB}.a
263.endif
264	chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/debug/lib${LIB}.a
265.endif
266.if !defined(NOPROFILE)
267#	ranlib lib${LIB}_p.a
268	${INSTALL} ${INSTALL_COPY} -S -o ${LIBOWN} -g ${LIBGRP} -m 600 \
269	    lib${LIB}_p.a ${DESTDIR}${LIBDIR}
270.if (${INSTALL_COPY} != "-p")
271	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
272.endif
273	chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
274.endif
275.if !defined(NOPIC) && (${MACHINE_CPU} != "mips64")
276#	ranlib lib${LIB}_pic.a
277	${INSTALL} ${INSTALL_COPY} -S -o ${LIBOWN} -g ${LIBGRP} -m 600 \
278	    lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
279.if (${INSTALL_COPY} != "-p")
280	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
281.endif
282	chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
283.endif
284.if !defined(NOPIC) && defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
285	${INSTALL} ${INSTALL_COPY} -S -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
286	    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} ${DESTDIR}${LIBDIR}
287.endif
288.if defined(WANTLINT) && ${WANTLINT:L} != "no"
289	${INSTALL} ${INSTALL_COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
290	    llib-l${LIB}.ln ${DESTDIR}${LINTLIBDIR}
291.endif
292.if defined(LINKS) && !empty(LINKS)
293.  for lnk file in ${LINKS}
294	@l=${DESTDIR}${lnk}; \
295	 t=${DESTDIR}${file}; \
296	 echo $$t -\> $$l; \
297	 rm -f $$t; ln $$l $$t
298.  endfor
299.endif
300
301install: maninstall _SUBDIRUSE
302maninstall: afterinstall
303afterinstall: realinstall
304realinstall: beforeinstall
305.endif
306
307.if !defined(NOMAN)
308.include <bsd.man.mk>
309.endif
310
311.if !defined(NONLS)
312.include <bsd.nls.mk>
313.endif
314
315.include <bsd.obj.mk>
316.include <bsd.dep.mk>
317.include <bsd.subdir.mk>
318.include <bsd.sys.mk>
319