xref: /netbsd-src/share/mk/bsd.lib.mk (revision 81b108b45f75f89f1e3ffad9fb6f074e771c0935)
1#	$NetBSD: bsd.lib.mk,v 1.68 1996/09/05 19:12:33 cgd Exp $
2#	@(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
3
4.if exists(${.CURDIR}/../Makefile.inc)
5.include "${.CURDIR}/../Makefile.inc"
6.endif
7
8.include <bsd.own.mk>				# for 'NOPIC' definition
9
10.if exists(${.CURDIR}/shlib_version)
11SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
12SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
13.endif
14
15.MAIN: all
16
17# prefer .S to a .c, add .po, remove stuff not used in the BSD libraries.
18# .so used for PIC object files.  .ln used for lint output files.
19.SUFFIXES:
20.SUFFIXES: .out .o .po .so .S .s .c .cc .C .f .y .l .ln .m4
21
22.c.o:
23	@echo "${COMPILE.c} ${.IMPSRC}"
24	@${COMPILE.c} ${.IMPSRC}  -o ${.TARGET}.o
25	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
26	@rm -f ${.TARGET}.o
27
28.c.po:
29	@echo "${COMPILE.c} -pg ${.IMPSRC} -o ${.TARGET}"
30	@${COMPILE.c} -pg ${.IMPSRC} -o ${.TARGET}.o
31	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
32	@rm -f ${.TARGET}.o
33
34.c.so:
35	@echo "${COMPILE.c} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}"
36	@${COMPILE.c} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o
37	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
38	@rm -f ${.TARGET}.o
39
40.c.ln:
41	${LINT} ${LINTFLAGS} ${CFLAGS:M-[IDU]*} -i ${.IMPSRC}
42
43.cc.o .C.o:
44	@echo "${COMPILE.cc} ${.IMPSRC}"
45	@${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}.o
46	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
47	@rm -f ${.TARGET}.o
48
49.cc.po .C.po:
50	@echo "${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET}"
51	@${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET}.o
52	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
53	@rm -f ${.TARGET}.o
54
55.cc.so .C.so:
56	@echo "${COMPILE.cc} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}"
57	@${COMPILE.cc} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o
58	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
59	@rm -f ${.TARGET}.o
60
61.S.o .s.o:
62	@echo "${CPP} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
63		${AS} -o ${.TARGET}"
64	@${CPP} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
65	    ${AS} -o ${.TARGET}.o
66	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
67	@rm -f ${.TARGET}.o
68
69.S.po .s.po:
70	@echo "${CPP} -DPROF ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} |\
71	    ${AS} -o ${.TARGET}"
72	@${CPP} -DPROF ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
73	    ${AS} -o ${.TARGET}.o
74	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
75	@rm -f ${.TARGET}.o
76
77.S.so .s.so:
78	@echo "${CPP} -DPIC ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
79	    ${AS} -k -o ${.TARGET}"
80	@${CPP} -DPIC ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
81	    ${AS} -k -o ${.TARGET}.o
82	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
83	@rm -f ${.TARGET}.o
84
85.if !defined(PICFLAG)
86PICFLAG=-fpic
87.endif
88
89.if !defined(NOPROFILE)
90_LIBS=lib${LIB}.a lib${LIB}_p.a
91.else
92_LIBS=lib${LIB}.a
93.endif
94
95.if !defined(NOPIC)
96_LIBS+=lib${LIB}_pic.a
97.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
98_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
99.endif
100.endif
101
102.if !defined(NOLINT)
103_LIBS+=llib-l${LIB}.ln
104.endif
105
106all: ${_LIBS} _SUBDIRUSE
107
108OBJS+=	${SRCS:N*.h:R:S/$/.o/g}
109
110lib${LIB}.a:: ${OBJS}
111	@echo building standard ${LIB} library
112	@rm -f lib${LIB}.a
113	@${AR} cq lib${LIB}.a `lorder ${OBJS} | tsort -q`
114	${RANLIB} lib${LIB}.a
115
116POBJS+=	${OBJS:.o=.po}
117lib${LIB}_p.a:: ${POBJS}
118	@echo building profiled ${LIB} library
119	@rm -f lib${LIB}_p.a
120	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q`
121	${RANLIB} lib${LIB}_p.a
122
123SOBJS+=	${OBJS:.o=.so}
124lib${LIB}_pic.a:: ${SOBJS}
125	@echo building shared object ${LIB} library
126	@rm -f lib${LIB}_pic.a
127	@${AR} cq lib${LIB}_pic.a `lorder ${SOBJS} | tsort -q`
128	${RANLIB} lib${LIB}_pic.a
129
130lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: lib${LIB}_pic.a ${DPADD}
131	@echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
132	@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
133	$(LD) -x -Bshareable -Bforcearchive \
134	    -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} lib${LIB}_pic.a ${LDADD}
135
136LOBJS+=	${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln}
137# the following looks XXX to me... -- cgd
138LLIBS?=	-lc
139llib-l${LIB}.ln: ${LOBJS}
140	@echo building llib-l${LIB}.ln
141	@rm -f llib-l${LIB}.ln
142	@${LINT} -C${LIB} ${LOBJS} ${LLIBS}
143
144.if !target(clean)
145clean: _SUBDIRUSE
146	rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES}
147	rm -f lib${LIB}.a ${OBJS}
148	rm -f lib${LIB}_p.a ${POBJS}
149	rm -f lib${LIB}_pic.a lib${LIB}.so.*.* ${SOBJS}
150	rm -f llib-l${LIB}.ln ${LOBJS}
151.endif
152
153cleandir: _SUBDIRUSE clean
154
155.if defined(SRCS)
156afterdepend: .depend
157	@(TMP=/tmp/_depend$$$$; \
158	    sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' \
159	      < .depend > $$TMP; \
160	    mv $$TMP .depend)
161.endif
162
163.if !target(install)
164.if !target(beforeinstall)
165beforeinstall:
166.endif
167
168realinstall:
169#	ranlib lib${LIB}.a
170	install ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m 600 lib${LIB}.a \
171	    ${DESTDIR}${LIBDIR}
172	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}.a
173	chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}.a
174.if !defined(NOPROFILE)
175#	ranlib lib${LIB}_p.a
176	install ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m 600 \
177	    lib${LIB}_p.a ${DESTDIR}${LIBDIR}
178	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
179	chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
180.endif
181.if !defined(NOPIC)
182#	ranlib lib${LIB}_pic.a
183	install ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m 600 \
184	    lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
185	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
186	chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
187.endif
188.if !defined(NOPIC) && defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
189	install ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
190	    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} ${DESTDIR}${LIBDIR}
191.endif
192.if !defined(NOLINT)
193	install ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
194	    llib-l${LIB}.ln ${DESTDIR}${LINTLIBDIR}
195.endif
196.if defined(LINKS) && !empty(LINKS)
197	@set ${LINKS}; \
198	while test $$# -ge 2; do \
199		l=${DESTDIR}$$1; \
200		shift; \
201		t=${DESTDIR}$$1; \
202		shift; \
203		echo $$t -\> $$l; \
204		rm -f $$t; \
205		ln $$l $$t; \
206	done; true
207.endif
208
209install: maninstall _SUBDIRUSE
210maninstall: afterinstall
211afterinstall: realinstall
212realinstall: beforeinstall
213.endif
214
215.if !defined(NOMAN)
216.include <bsd.man.mk>
217.endif
218
219.if !defined(NONLS)
220.include <bsd.nls.mk>
221.endif
222
223.include <bsd.obj.mk>
224.include <bsd.dep.mk>
225.include <bsd.subdir.mk>
226.include <bsd.sys.mk>
227