xref: /freebsd/share/mk/bsd.lib.mk (revision be01c2220b8f328140cb66047f2a0a5c71da82a6)
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)
211be01c222SRuslan Ermilov.if ${SHLIBDIR} == ${LIBDIR}
212be01c222SRuslan Ermilov	ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
213be01c222SRuslan Ermilov.else
214be01c222SRuslan Ermilov	ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
215eb7f25e1SPeter Wemm	    ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
216be01c222SRuslan Ermilov.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME})
217be01c222SRuslan Ermilov	-chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
218be01c222SRuslan Ermilov	rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
219be01c222SRuslan Ermilov.endif
220eb7f25e1SPeter Wemm.endif
2218c05a446SPeter Wemm.endif
2228c05a446SPeter Wemm.endif
2234d7d5e7cSRuslan Ermilov.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
224d2893b16SRuslan Ermilov	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
225e902c1bbSTim Vanderhoek	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
2263585b293SGarrett Wollman.endif
2275741a42fSMark Murray.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB)
228d2893b16SRuslan Ermilov	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
229c7b111cbSRuslan Ermilov	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
230c7b111cbSRuslan Ermilov.endif
2314d7d5e7cSRuslan Ermilov.endif !defined(INTERNALLIB)
232c7b111cbSRuslan Ermilov
233af2dc868SRuslan Ermilov.include <bsd.files.mk>
2345d862037SRuslan Ermilov.include <bsd.incs.mk>
23584f94a79SRuslan Ermilov.include <bsd.links.mk>
236afe61c15SRodney W. Grimes
237b90dab70SRuslan Ermilov.if !defined(NOMAN)
238afeaaa84SRuslan Ermilovrealinstall: _maninstall
239badb7c1cSRuslan Ermilov.ORDER: beforeinstall _maninstall
240b90dab70SRuslan Ermilov.endif
241b90dab70SRuslan Ermilov
242afe61c15SRodney W. Grimes.endif
243afe61c15SRodney W. Grimes
244afe61c15SRodney W. Grimes.if !target(lint)
245b25a566dSRuslan Ermilovlint: ${SRCS:M*.c}
2465741a42fSMark Murray	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
247afe61c15SRodney W. Grimes.endif
248afe61c15SRodney W. Grimes
2493585b293SGarrett Wollman.if !defined(NOMAN)
250afe61c15SRodney W. Grimes.include <bsd.man.mk>
251918fb560SRuslan Ermilov.endif
2523585b293SGarrett Wollman
2533585b293SGarrett Wollman.include <bsd.dep.mk>
25414172e46SBruce Evans
25588505e11SRuslan Ermilov.if !exists(${.OBJDIR}/${DEPENDFILE})
2564d7d5e7cSRuslan Ermilov.if defined(LIB) && !empty(LIB)
2574d7d5e7cSRuslan Ermilov${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h}
2584d7d5e7cSRuslan Ermilov.endif
2594d7d5e7cSRuslan Ermilov.if defined(SHLIB_NAME) || \
2604d7d5e7cSRuslan Ermilov    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
2614d7d5e7cSRuslan Ermilov${SOBJS}: ${SRCS:M*.h}
26214172e46SBruce Evans.endif
2632a53f3fbSRuslan Ermilov.endif
26414172e46SBruce Evans
265397304feSRuslan Ermilov.if !target(clean)
266397304feSRuslan Ermilovclean:
267397304feSRuslan Ermilov.if defined(CLEANFILES) && !empty(CLEANFILES)
268397304feSRuslan Ermilov	rm -f ${CLEANFILES}
269397304feSRuslan Ermilov.endif
270397304feSRuslan Ermilov.if defined(LIB) && !empty(LIB)
271397304feSRuslan Ermilov	rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
272397304feSRuslan Ermilov.endif
273397304feSRuslan Ermilov.if !defined(INTERNALLIB)
274397304feSRuslan Ermilov.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
275397304feSRuslan Ermilov	rm -f ${POBJS} ${POBJS:S/$/.tmp/}
276397304feSRuslan Ermilov.endif
277397304feSRuslan Ermilov.if defined(SHLIB_NAME) || \
278397304feSRuslan Ermilov    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
279397304feSRuslan Ermilov	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
280397304feSRuslan Ermilov.endif
281397304feSRuslan Ermilov.if defined(SHLIB_NAME)
282397304feSRuslan Ermilov.if defined(SHLIB_LINK)
283397304feSRuslan Ermilov	rm -f ${SHLIB_LINK}
284397304feSRuslan Ermilov.endif
285397304feSRuslan Ermilov.if defined(LIB) && !empty(LIB)
286397304feSRuslan Ermilov	rm -f lib${LIB}.so.* lib${LIB}.so
287397304feSRuslan Ermilov.endif
288397304feSRuslan Ermilov.endif
289397304feSRuslan Ermilov.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
290397304feSRuslan Ermilov	rm -f ${LINTOBJS}
291397304feSRuslan Ermilov.endif
292397304feSRuslan Ermilov.endif !defined(INTERNALLIB)
293397304feSRuslan Ermilov.if defined(_LIBS) && !empty(_LIBS)
294397304feSRuslan Ermilov	rm -f ${_LIBS}
295397304feSRuslan Ermilov.endif
296397304feSRuslan Ermilov.if defined(CLEANDIRS) && !empty(CLEANDIRS)
297397304feSRuslan Ermilov	rm -rf ${CLEANDIRS}
298397304feSRuslan Ermilov.endif
299397304feSRuslan Ermilov.endif
300397304feSRuslan Ermilov
301cd9a2f5cSJordan K. Hubbard.include <bsd.obj.mk>
302d510ecb4SKris Kennaway
303d510ecb4SKris Kennaway.include <bsd.sys.mk>
304