xref: /freebsd/share/mk/bsd.lib.mk (revision 41f8931571d84917b32a9538b509d4d7c5456ca8)
13585b293SGarrett Wollman#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
27f3dea24SPeter Wemm# $FreeBSD$
33585b293SGarrett Wollman#
4afe61c15SRodney W. Grimes
52bdaf7e8SRuslan Ermilov.include <bsd.init.mk>
6afe61c15SRodney W. Grimes
7f67eb0dcSJohn Polstra# Set up the variables controlling shared libraries.  After this section,
8f67eb0dcSJohn Polstra# SHLIB_NAME will be defined only if we are to create a shared library.
9f67eb0dcSJohn Polstra# SHLIB_LINK will be defined only if we are to create a link to it.
10f67eb0dcSJohn Polstra# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
11f67eb0dcSJohn Polstra.if defined(NOPIC)
12f67eb0dcSJohn Polstra.undef SHLIB_NAME
13f67eb0dcSJohn Polstra.undef INSTALL_PIC_ARCHIVE
14f67eb0dcSJohn Polstra.else
154d7d5e7cSRuslan Ermilov.if !defined(SHLIB_NAME) && defined(LIB) && defined(SHLIB_MAJOR)
16f67eb0dcSJohn PolstraSHLIB_NAME=	lib${LIB}.so.${SHLIB_MAJOR}
1742c0ad02SRuslan Ermilov.endif
185113446aSRuslan Ermilov.if defined(SHLIB_NAME) && ${SHLIB_NAME:M*.so.*}
1942c0ad02SRuslan ErmilovSHLIB_LINK?=	${SHLIB_NAME:R}
20f67eb0dcSJohn Polstra.endif
21f67eb0dcSJohn PolstraSONAME?=	${SHLIB_NAME}
22e782d0b5SPeter Wemm.endif
23e782d0b5SPeter Wemm
2441f89315SRuslan Ermilov.if defined(CRUNCH_CFLAGS)
253c9b8563SGordon TetlowCFLAGS+=	${CRUNCH_CFLAGS}
2641f89315SRuslan Ermilov.endif
273c9b8563SGordon Tetlow
28e82b0b99SJordan K. Hubbard.if defined(DEBUG_FLAGS)
29e82b0b99SJordan K. HubbardCFLAGS+= ${DEBUG_FLAGS}
30e82b0b99SJordan K. Hubbard.endif
31e82b0b99SJordan K. Hubbard
32e82b0b99SJordan K. Hubbard.if !defined(DEBUG_FLAGS)
33afe61c15SRodney W. GrimesSTRIP?=	-s
34e82b0b99SJordan K. Hubbard.endif
35afe61c15SRodney W. Grimes
361a5ed802SBruce Evans.include <bsd.libnames.mk>
371a5ed802SBruce Evans
38afe61c15SRodney W. Grimes# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
39f92bdbd0SJohn Polstra# .So used for PIC object files
40afe61c15SRodney W. Grimes.SUFFIXES:
41d58e932fSRuslan Ermilov.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .m .C .f .y .l .ln
42766f7d6eSMark Murray
432a53f3fbSRuslan Ermilov.if !defined(PICFLAG)
442a53f3fbSRuslan Ermilov.if ${MACHINE_ARCH} == "sparc64"
452a53f3fbSRuslan ErmilovPICFLAG=-fPIC
462a53f3fbSRuslan Ermilov.else
472a53f3fbSRuslan ErmilovPICFLAG=-fpic
482a53f3fbSRuslan Ermilov.endif
492a53f3fbSRuslan Ermilov.endif
502a53f3fbSRuslan Ermilov
51afe61c15SRodney W. Grimes.c.po:
529c8ff5b5SJohn Polstra	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
53afe61c15SRodney W. Grimes
54f92bdbd0SJohn Polstra.c.So:
553585b293SGarrett Wollman	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
563585b293SGarrett Wollman
57c7cbe79eSDmitrij Tejblum.cc.po .C.po .cpp.po .cxx.po:
589c8ff5b5SJohn Polstra	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
593585b293SGarrett Wollman
60f92bdbd0SJohn Polstra.cc.So .C.So .cpp.So .cxx.So:
613585b293SGarrett Wollman	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
623585b293SGarrett Wollman
633585b293SGarrett Wollman.f.po:
649c8ff5b5SJohn Polstra	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
653585b293SGarrett Wollman
66f92bdbd0SJohn Polstra.f.So:
673585b293SGarrett Wollman	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
683585b293SGarrett Wollman
6970a6e331SBruce Evans.m.po:
7070a6e331SBruce Evans	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
7170a6e331SBruce Evans
72f92bdbd0SJohn Polstra.m.So:
7370a6e331SBruce Evans	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7470a6e331SBruce Evans
75d58e932fSRuslan Ermilov.s.po .s.So:
76f79d11b7SRuslan Ermilov	${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
773585b293SGarrett Wollman
78d58e932fSRuslan Ermilov.asm.po:
79d58e932fSRuslan Ermilov	${CC} -x assembler-with-cpp -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
80d58e932fSRuslan Ermilov
81d58e932fSRuslan Ermilov.asm.So:
82d58e932fSRuslan Ermilov	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \
83d58e932fSRuslan Ermilov	    -c ${.IMPSRC} -o ${.TARGET}
84d58e932fSRuslan Ermilov
853585b293SGarrett Wollman.S.po:
86a51613b6SRuslan Ermilov	${CC} -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
873585b293SGarrett Wollman
88f92bdbd0SJohn Polstra.S.So:
89a51613b6SRuslan Ermilov	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
903585b293SGarrett Wollman
912a53f3fbSRuslan Ermilovall: objwarn
922a53f3fbSRuslan Ermilov
934d7d5e7cSRuslan Ermilov.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME)
944d7d5e7cSRuslan ErmilovOBJS+=		${SRCS:N*.h:R:S/$/.o/}
954d7d5e7cSRuslan Ermilov.endif
964d7d5e7cSRuslan Ermilov
972a53f3fbSRuslan Ermilov.if defined(LIB) && !empty(LIB)
985aa23756SDavid E. O'Brien_LIBS=		lib${LIB}.a
99afe61c15SRodney W. Grimes
1002a53f3fbSRuslan Ermilovlib${LIB}.a: ${OBJS} ${STATICOBJS}
101f45b036fSPeter Wemm	@${ECHO} building static ${LIB} library
1022a53f3fbSRuslan Ermilov	@rm -f ${.TARGET}
1032a53f3fbSRuslan Ermilov	@${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
1042a53f3fbSRuslan Ermilov	${RANLIB} ${.TARGET}
1054d7d5e7cSRuslan Ermilov.endif
106afe61c15SRodney W. Grimes
1072a53f3fbSRuslan Ermilov.if !defined(INTERNALLIB)
1082a53f3fbSRuslan Ermilov
1094d7d5e7cSRuslan Ermilov.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
1102a53f3fbSRuslan Ermilov_LIBS+=		lib${LIB}_p.a
1112a53f3fbSRuslan ErmilovPOBJS+=		${OBJS:.o=.po} ${STATICOBJS:.o=.po}
1122a53f3fbSRuslan Ermilov
1132a53f3fbSRuslan Ermilovlib${LIB}_p.a: ${POBJS}
11480c02d59SBruce Evans	@${ECHO} building profiled ${LIB} library
1152a53f3fbSRuslan Ermilov	@rm -f ${.TARGET}
1162a53f3fbSRuslan Ermilov	@${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
1172a53f3fbSRuslan Ermilov	${RANLIB} ${.TARGET}
11886af0db9SBruce Evans.endif
1193585b293SGarrett Wollman
1204d7d5e7cSRuslan Ermilov.if defined(SHLIB_NAME) || \
1214d7d5e7cSRuslan Ermilov    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
122f92bdbd0SJohn PolstraSOBJS+=		${OBJS:.o=.So}
1234d7d5e7cSRuslan Ermilov.endif
1248c05a446SPeter Wemm
125f67eb0dcSJohn Polstra.if defined(SHLIB_NAME)
1262a53f3fbSRuslan Ermilov_LIBS+=		${SHLIB_NAME}
1272a53f3fbSRuslan Ermilov
128f67eb0dcSJohn Polstra${SHLIB_NAME}: ${SOBJS}
129f67eb0dcSJohn Polstra	@${ECHO} building shared library ${SHLIB_NAME}
1302a53f3fbSRuslan Ermilov	@rm -f ${.TARGET} ${SHLIB_LINK}
131f67eb0dcSJohn Polstra.if defined(SHLIB_LINK)
1322a53f3fbSRuslan Ermilov	@ln -fs ${.TARGET} ${SHLIB_LINK}
133f67eb0dcSJohn Polstra.endif
134e20b0b73SDavid E. O'Brien	@${CC} ${LDFLAGS} -shared -Wl,-x \
1352a53f3fbSRuslan Ermilov	    -o ${.TARGET} -Wl,-soname,${SONAME} \
136ea5c0da9SRuslan Ermilov	    `lorder ${SOBJS} | tsort -q` ${LDADD}
1378c05a446SPeter Wemm.endif
1383585b293SGarrett Wollman
1394d7d5e7cSRuslan Ermilov.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
1402a53f3fbSRuslan Ermilov_LIBS+=		lib${LIB}_pic.a
1412a53f3fbSRuslan Ermilov
1422a53f3fbSRuslan Ermilovlib${LIB}_pic.a: ${SOBJS}
14380c02d59SBruce Evans	@${ECHO} building special pic ${LIB} library
1442a53f3fbSRuslan Ermilov	@rm -f ${.TARGET}
1452a53f3fbSRuslan Ermilov	@${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
1462a53f3fbSRuslan Ermilov	${RANLIB} ${.TARGET}
14786af0db9SBruce Evans.endif
148afe61c15SRodney W. Grimes
1495741a42fSMark Murray.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB)
1502a53f3fbSRuslan ErmilovLINTLIB=	llib-l${LIB}.ln
1512a53f3fbSRuslan Ermilov_LIBS+=		${LINTLIB}
1522a53f3fbSRuslan ErmilovLINTOBJS+=	${SRCS:M*.c:.c=.ln}
1532a53f3fbSRuslan Ermilov
154766f7d6eSMark Murray${LINTLIB}: ${LINTOBJS}
1552a53f3fbSRuslan Ermilov	@${ECHO} building lint library ${.TARGET}
1562a53f3fbSRuslan Ermilov	@rm -f ${.TARGET}
157766f7d6eSMark Murray	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
158766f7d6eSMark Murray.endif
159afe61c15SRodney W. Grimes
1602a53f3fbSRuslan Ermilov.endif !defined(INTERNALLIB)
1612a53f3fbSRuslan Ermilov
1622a53f3fbSRuslan Ermilovall: ${_LIBS}
1632a53f3fbSRuslan Ermilov
1642a53f3fbSRuslan Ermilov.if !defined(NOMAN)
1652a53f3fbSRuslan Ermilovall: _manpages
166afe61c15SRodney W. Grimes.endif
167afe61c15SRodney W. Grimes
168fcccc50bSBruce Evans_EXTRADEPEND:
169663e9677SBruce Evans	@TMP=_depend$$$$; \
170f92bdbd0SJohn Polstra	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
171663e9677SBruce Evans	    > $$TMP; \
172663e9677SBruce Evans	mv $$TMP ${DEPENDFILE}
173f67eb0dcSJohn Polstra.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
174e3ace70eSBruce Evans.if defined(DPADD) && !empty(DPADD)
175f67eb0dcSJohn Polstra	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
1768c05a446SPeter Wemm.endif
1778c05a446SPeter Wemm.endif
178afe61c15SRodney W. Grimes
179afe61c15SRodney W. Grimes.if !target(install)
180afe61c15SRodney W. Grimes
1810099533aSJohn-Mark Gurney.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
182c59ae063SGarrett WollmanSHLINSTALLFLAGS+= -fschg
183c59ae063SGarrett Wollman.endif
184c59ae063SGarrett Wollman
185e902c1bbSTim Vanderhoek_INSTALLFLAGS:=	${INSTALLFLAGS}
186e902c1bbSTim Vanderhoek.for ie in ${INSTALLFLAGS_EDIT}
187e902c1bbSTim Vanderhoek_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
188e902c1bbSTim Vanderhoek.endfor
1891a66233dSRuslan Ermilov_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
190e902c1bbSTim Vanderhoek.for ie in ${INSTALLFLAGS_EDIT}
191e902c1bbSTim Vanderhoek_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
192e902c1bbSTim Vanderhoek.endfor
193e902c1bbSTim Vanderhoek
1944d7d5e7cSRuslan Ermilov.if !defined(INTERNALLIB)
195b25a566dSRuslan Ermilovrealinstall: _libinstall
196badb7c1cSRuslan Ermilov.ORDER: beforeinstall _libinstall
197b25a566dSRuslan Ermilov_libinstall:
1984d7d5e7cSRuslan Ermilov.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB)
1998fd9852bSDag-Erling Smørgrav	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
200e902c1bbSTim Vanderhoek	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
2012a53f3fbSRuslan Ermilov.endif
2024d7d5e7cSRuslan Ermilov.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
2038fd9852bSDag-Erling Smørgrav	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
204e902c1bbSTim Vanderhoek	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
205afe61c15SRodney W. Grimes.endif
206a89bd620SDavid E. O'Brien.if defined(SHLIB_NAME)
207d2893b16SRuslan Ermilov	${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
208e902c1bbSTim Vanderhoek	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
209f67eb0dcSJohn Polstra	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
210f67eb0dcSJohn Polstra.if defined(SHLIB_LINK)
211b20654d4SGordon Tetlow	ln -fs ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
212b20654d4SGordon Tetlow.if (${LIBDIR} != ${SHLIBDIR})
2133d7f3b48SGordon Tetlow	ln -fs ${LIBDIR:C|/[^/]+|/..|g:S|^/||}${SHLIBDIR}/${SHLIB_NAME} \
2143d7f3b48SGordon Tetlow	    ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
2153d7f3b48SGordon Tetlow.endif
2168c05a446SPeter Wemm.endif
2178c05a446SPeter Wemm.endif
2184d7d5e7cSRuslan Ermilov.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
219d2893b16SRuslan Ermilov	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
220e902c1bbSTim Vanderhoek	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
2213585b293SGarrett Wollman.endif
2225741a42fSMark Murray.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB)
223d2893b16SRuslan Ermilov	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
224c7b111cbSRuslan Ermilov	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
225c7b111cbSRuslan Ermilov.endif
2264d7d5e7cSRuslan Ermilov.endif !defined(INTERNALLIB)
227c7b111cbSRuslan Ermilov
228af2dc868SRuslan Ermilov.include <bsd.files.mk>
2295d862037SRuslan Ermilov.include <bsd.incs.mk>
23084f94a79SRuslan Ermilov.include <bsd.links.mk>
231afe61c15SRodney W. Grimes
232b90dab70SRuslan Ermilov.if !defined(NOMAN)
233afeaaa84SRuslan Ermilovrealinstall: _maninstall
234badb7c1cSRuslan Ermilov.ORDER: beforeinstall _maninstall
235b90dab70SRuslan Ermilov.endif
236b90dab70SRuslan Ermilov
237afe61c15SRodney W. Grimes.endif
238afe61c15SRodney W. Grimes
239afe61c15SRodney W. Grimes.if !target(lint)
240b25a566dSRuslan Ermilovlint: ${SRCS:M*.c}
2415741a42fSMark Murray	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
242afe61c15SRodney W. Grimes.endif
243afe61c15SRodney W. Grimes
2443585b293SGarrett Wollman.if !defined(NOMAN)
245afe61c15SRodney W. Grimes.include <bsd.man.mk>
246918fb560SRuslan Ermilov.endif
2473585b293SGarrett Wollman
2483585b293SGarrett Wollman.include <bsd.dep.mk>
24914172e46SBruce Evans
25088505e11SRuslan Ermilov.if !exists(${.OBJDIR}/${DEPENDFILE})
2514d7d5e7cSRuslan Ermilov.if defined(LIB) && !empty(LIB)
2524d7d5e7cSRuslan Ermilov${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h}
2534d7d5e7cSRuslan Ermilov.endif
2544d7d5e7cSRuslan Ermilov.if defined(SHLIB_NAME) || \
2554d7d5e7cSRuslan Ermilov    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
2564d7d5e7cSRuslan Ermilov${SOBJS}: ${SRCS:M*.h}
25714172e46SBruce Evans.endif
2582a53f3fbSRuslan Ermilov.endif
25914172e46SBruce Evans
260397304feSRuslan Ermilov.if !target(clean)
261397304feSRuslan Ermilovclean:
262397304feSRuslan Ermilov.if defined(CLEANFILES) && !empty(CLEANFILES)
263397304feSRuslan Ermilov	rm -f ${CLEANFILES}
264397304feSRuslan Ermilov.endif
265397304feSRuslan Ermilov.if defined(LIB) && !empty(LIB)
266397304feSRuslan Ermilov	rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
267397304feSRuslan Ermilov.endif
268397304feSRuslan Ermilov.if !defined(INTERNALLIB)
269397304feSRuslan Ermilov.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
270397304feSRuslan Ermilov	rm -f ${POBJS} ${POBJS:S/$/.tmp/}
271397304feSRuslan Ermilov.endif
272397304feSRuslan Ermilov.if defined(SHLIB_NAME) || \
273397304feSRuslan Ermilov    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
274397304feSRuslan Ermilov	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
275397304feSRuslan Ermilov.endif
276397304feSRuslan Ermilov.if defined(SHLIB_NAME)
277397304feSRuslan Ermilov.if defined(SHLIB_LINK)
278397304feSRuslan Ermilov	rm -f ${SHLIB_LINK}
279397304feSRuslan Ermilov.endif
280397304feSRuslan Ermilov.if defined(LIB) && !empty(LIB)
281397304feSRuslan Ermilov	rm -f lib${LIB}.so.* lib${LIB}.so
282397304feSRuslan Ermilov.endif
283397304feSRuslan Ermilov.endif
284397304feSRuslan Ermilov.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
285397304feSRuslan Ermilov	rm -f ${LINTOBJS}
286397304feSRuslan Ermilov.endif
287397304feSRuslan Ermilov.endif !defined(INTERNALLIB)
288397304feSRuslan Ermilov.if defined(_LIBS) && !empty(_LIBS)
289397304feSRuslan Ermilov	rm -f ${_LIBS}
290397304feSRuslan Ermilov.endif
291397304feSRuslan Ermilov.if defined(CLEANDIRS) && !empty(CLEANDIRS)
292397304feSRuslan Ermilov	rm -rf ${CLEANDIRS}
293397304feSRuslan Ermilov.endif
294397304feSRuslan Ermilov.endif
295397304feSRuslan Ermilov
296cd9a2f5cSJordan K. Hubbard.include <bsd.obj.mk>
297d510ecb4SKris Kennaway
298d510ecb4SKris Kennaway.include <bsd.sys.mk>
299