bsd.lib.mk revision 162293
11844Swollman#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
250476Speter# $FreeBSD: head/share/mk/bsd.lib.mk 162293 2006-09-13 23:27:21Z obrien $
31844Swollman#
41638Srgrimes
594940Sru.include <bsd.init.mk>
61638Srgrimes
742915Sjdp# Set up the variables controlling shared libraries.  After this section,
842915Sjdp# SHLIB_NAME will be defined only if we are to create a shared library.
942915Sjdp# SHLIB_LINK will be defined only if we are to create a link to it.
1042915Sjdp# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
11139106Sru.if defined(NO_PIC)
1242915Sjdp.undef SHLIB_NAME
1342915Sjdp.undef INSTALL_PIC_ARCHIVE
1442915Sjdp.else
15129024Sdes.if !defined(SHLIB) && defined(LIB)
16129024SdesSHLIB=		${LIB}
1729141Speter.endif
18129024Sdes.if !defined(SHLIB_NAME) && defined(SHLIB) && defined(SHLIB_MAJOR)
19129024SdesSHLIB_NAME=	lib${SHLIB}.so.${SHLIB_MAJOR}
20129024Sdes.endif
21125119Sru.if defined(SHLIB_NAME) && !empty(SHLIB_NAME:M*.so.*)
22100332SruSHLIB_LINK?=	${SHLIB_NAME:R}
23100332Sru.endif
2442915SjdpSONAME?=	${SHLIB_NAME}
2542915Sjdp.endif
2629141Speter
27119607Sru.if defined(CRUNCH_CFLAGS)
28117034SgordonCFLAGS+=	${CRUNCH_CFLAGS}
29119607Sru.endif
30117034Sgordon
31162210Simp.if ${MK_ASSERT_DEBUG} == "no"
32162210SimpCFLAGS+= -DNDEBUG
33162293SobrienNO_WERROR=
34162210Simp.endif
35162210Simp
362827Sjkh.if defined(DEBUG_FLAGS)
372827SjkhCFLAGS+= ${DEBUG_FLAGS}
382827Sjkh.endif
392827Sjkh
402827Sjkh.if !defined(DEBUG_FLAGS)
411638SrgrimesSTRIP?=	-s
422827Sjkh.endif
431638Srgrimes
4418529Sbde.include <bsd.libnames.mk>
4518529Sbde
461638Srgrimes# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
4742450Sjdp# .So used for PIC object files
481638Srgrimes.SUFFIXES:
49117173Sru.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .m .C .f .y .l .ln
501638Srgrimes
5196512Sru.if !defined(PICFLAG)
5296512Sru.if ${MACHINE_ARCH} == "sparc64"
5396512SruPICFLAG=-fPIC
5496512Sru.else
5596512SruPICFLAG=-fpic
5696512Sru.endif
5796512Sru.endif
5896512Sru
59126890Strhodes.if ${CC} == "icc"
60126890StrhodesPO_FLAG=-p
61126890Strhodes.else
62126890StrhodesPO_FLAG=-pg
63126890Strhodes.endif
64126890Strhodes
651638Srgrimes.c.po:
66126890Strhodes	${CC} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
671638Srgrimes
6842450Sjdp.c.So:
691844Swollman	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
701844Swollman
7136673Sdt.cc.po .C.po .cpp.po .cxx.po:
72126890Strhodes	${CXX} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
731844Swollman
7442450Sjdp.cc.So .C.So .cpp.So .cxx.So:
751844Swollman	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
761844Swollman
771844Swollman.f.po:
78127027Strhodes	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
791844Swollman
8042450Sjdp.f.So:
811844Swollman	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
821844Swollman
8336054Sbde.m.po:
8436054Sbde	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
8536054Sbde
8642450Sjdp.m.So:
8736054Sbde	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8836054Sbde
89117173Sru.s.po .s.So:
90117159Sru	${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
911638Srgrimes
92117173Sru.asm.po:
93117173Sru	${CC} -x assembler-with-cpp -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
94117173Sru
95117173Sru.asm.So:
96117173Sru	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \
97117173Sru	    -c ${.IMPSRC} -o ${.TARGET}
98117173Sru
991844Swollman.S.po:
100117122Sru	${CC} -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
1011844Swollman
10242450Sjdp.S.So:
103117122Sru	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
1041844Swollman
10596512Sruall: objwarn
1061638Srgrimes
107156772Sdeischen# Generate the version map given the version definitions
108156772Sdeischen# and symbol maps.
109156772Sdeischen.if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS)
110156772Sdeischen# Find the awk script that generates the version map.
111156772SdeischenVERSION_GEN?=	version_gen.awk
112156772SdeischenVERSION_MAP?=	Version.map
113156772Sdeischen
114156772Sdeischen# Compute the make's -m path.
115156772Sdeischen_mpath=
116156772Sdeischen_oarg=
117156772Sdeischen.for _arg in ${.MAKEFLAGS}
118156772Sdeischen.if ${_oarg} == "-m"
119156772Sdeischen_mpath+= ${_arg}
120156772Sdeischen.endif
121156772Sdeischen_oarg=  ${_arg}
122156772Sdeischen.endfor
123156772Sdeischen_mpath+= /usr/share/mk
124156772Sdeischen
125156772Sdeischen# Look up ${VERSION_GEN} in ${_mpath}.
126156772Sdeischen_vgen=
127156772Sdeischen.for path in ${_mpath}
128156772Sdeischen.if empty(_vgen)
129156772Sdeischen.if exists(${path}/${VERSION_GEN})
130156772Sdeischen_vgen=  ${path}/${VERSION_GEN}
131156772Sdeischen.endif
132156772Sdeischen.endif
133156772Sdeischen.endfor
134156772Sdeischen
135157054Sdes${VERSION_MAP}: ${VERSION_DEF} ${_vgen} ${SYMBOL_MAPS}
136156772Sdeischen	awk -v vfile=${VERSION_DEF} -f ${_vgen} ${SYMBOL_MAPS} \
137156772Sdeischen	    > ${.TARGET}
138156772Sdeischen.endif	# !empty(VERSION_DEF) && !empty(SYMBOL_MAPS)
139156772Sdeischen
140156772Sdeischen# Allow librararies to specify their own version map or have it
141156772Sdeischen# automatically generated (see above).
142156772Sdeischen.if !empty(VERSION_MAP)
143156772Sdeischen${SHLIB_NAME}:	${VERSION_MAP}
144156772SdeischenLDFLAGS+=	-Wl,--version-script=${VERSION_MAP}
145156772Sdeischen.endif
146156772Sdeischen
14799362Sru.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME)
14899362SruOBJS+=		${SRCS:N*.h:R:S/$/.o/}
14999362Sru.endif
15099362Sru
15196512Sru.if defined(LIB) && !empty(LIB)
15296512Sru_LIBS=		lib${LIB}.a
1531638Srgrimes
15496512Srulib${LIB}.a: ${OBJS} ${STATICOBJS}
15596512Sru	@${ECHO} building static ${LIB} library
15696512Sru	@rm -f ${.TARGET}
157161627Simp	@${AR} cq ${.TARGET} `env NM=${NM} lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
15896512Sru	${RANLIB} ${.TARGET}
15999362Sru.endif
1601638Srgrimes
16196512Sru.if !defined(INTERNALLIB)
16295114Sobrien
163156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
16496512Sru_LIBS+=		lib${LIB}_p.a
16596512SruPOBJS+=		${OBJS:.o=.po} ${STATICOBJS:.o=.po}
16695306Sru
16796512Srulib${LIB}_p.a: ${POBJS}
16896512Sru	@${ECHO} building profiled ${LIB} library
16996512Sru	@rm -f ${.TARGET}
170161627Simp	@${AR} cq ${.TARGET} `env NM=${NM} lorder ${POBJS} | tsort -q` ${ARADD}
17196512Sru	${RANLIB} ${.TARGET}
17274805Sru.endif
1731844Swollman
17499362Sru.if defined(SHLIB_NAME) || \
17599362Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
17696512SruSOBJS+=		${OBJS:.o=.So}
17799362Sru.endif
1781844Swollman
17996512Sru.if defined(SHLIB_NAME)
18096512Sru_LIBS+=		${SHLIB_NAME}
1811638Srgrimes
18242915Sjdp${SHLIB_NAME}: ${SOBJS}
18342915Sjdp	@${ECHO} building shared library ${SHLIB_NAME}
18496512Sru	@rm -f ${.TARGET} ${SHLIB_LINK}
18542915Sjdp.if defined(SHLIB_LINK)
18696512Sru	@ln -fs ${.TARGET} ${SHLIB_LINK}
18742915Sjdp.endif
18896343Sobrien	@${CC} ${LDFLAGS} -shared -Wl,-x \
18996512Sru	    -o ${.TARGET} -Wl,-soname,${SONAME} \
190161627Simp	    `env NM=${NM} lorder ${SOBJS} | tsort -q` ${LDADD}
19128945Speter.endif
1921844Swollman
193156813Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
19496512Sru_LIBS+=		lib${LIB}_pic.a
19596512Sru
19696512Srulib${LIB}_pic.a: ${SOBJS}
1972353Sbde	@${ECHO} building special pic ${LIB} library
19896512Sru	@rm -f ${.TARGET}
19996512Sru	@${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
20096512Sru	${RANLIB} ${.TARGET}
2013859Sbde.endif
2021844Swollman
203139106Sru.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
20496512SruLINTLIB=	llib-l${LIB}.ln
20596512Sru_LIBS+=		${LINTLIB}
20696512SruLINTOBJS+=	${SRCS:M*.c:.c=.ln}
20796512Sru
20892491Smarkm${LINTLIB}: ${LINTOBJS}
20996512Sru	@${ECHO} building lint library ${.TARGET}
21096512Sru	@rm -f ${.TARGET}
21192491Smarkm	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
21292491Smarkm.endif
2131638Srgrimes
214144893Sharti.endif # !defined(INTERNALLIB)
21596512Sru
21696512Sruall: ${_LIBS}
21796512Sru
218156813Sru.if ${MK_MAN} != "no"
21996512Sruall: _manpages
2201638Srgrimes.endif
2211638Srgrimes
22234179Sbde_EXTRADEPEND:
22324750Sbde	@TMP=_depend$$$$; \
22442450Sjdp	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
22524750Sbde	    > $$TMP; \
22624750Sbde	mv $$TMP ${DEPENDFILE}
227139107Sru.if !defined(NO_EXTRADEPEND) && defined(SHLIB_NAME)
22831809Sbde.if defined(DPADD) && !empty(DPADD)
22942915Sjdp	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
23027910Sasami.endif
23128945Speter.endif
2321638Srgrimes
2331638Srgrimes.if !target(install)
2341638Srgrimes
235136019Sru.if defined(PRECIOUSLIB)
236139111Sru.if !defined(NO_FSCHG)
2372298SwollmanSHLINSTALLFLAGS+= -fschg
2382298Swollman.endif
239136019SruSHLINSTALLFLAGS+= -S
240136019Sru.endif
2412298Swollman
24249328Shoek_INSTALLFLAGS:=	${INSTALLFLAGS}
24349328Shoek.for ie in ${INSTALLFLAGS_EDIT}
24449328Shoek_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
24549328Shoek.endfor
24656971Sru_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
24749328Shoek.for ie in ${INSTALLFLAGS_EDIT}
24849328Shoek_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
24949328Shoek.endfor
25049328Shoek
25199362Sru.if !defined(INTERNALLIB)
25295306Srurealinstall: _libinstall
25399343Sru.ORDER: beforeinstall _libinstall
25495306Sru_libinstall:
255139110Sru.if defined(LIB) && !empty(LIB) && !defined(NO_INSTALLLIB)
25692980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
25749328Shoek	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
25896512Sru.endif
259156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
26092980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
26149328Shoek	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
2621638Srgrimes.endif
263116144Sobrien.if defined(SHLIB_NAME)
264100872Sru	${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
26549328Shoek	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
26642915Sjdp	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
26742915Sjdp.if defined(SHLIB_LINK)
268119846Sru.if ${SHLIBDIR} == ${LIBDIR}
269119846Sru	ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
270119846Sru.else
271119846Sru	ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
272119730Speter	    ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
273119846Sru.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME})
274119846Sru	-chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
275119846Sru	rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
2761844Swollman.endif
27728945Speter.endif
278119730Speter.endif
279119846Sru.endif
280156813Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
281100872Sru	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
28249328Shoek	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
2831844Swollman.endif
284139106Sru.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
285100872Sru	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
28696462Sru	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
28796462Sru.endif
288144893Sharti.endif # !defined(INTERNALLIB)
28996462Sru
290141503Sphantom.include <bsd.nls.mk>
29197769Sru.include <bsd.files.mk>
29296668Sru.include <bsd.incs.mk>
29399256Sru.include <bsd.links.mk>
29496462Sru
295156813Sru.if ${MK_MAN} != "no"
29696164Srurealinstall: _maninstall
29799343Sru.ORDER: beforeinstall _maninstall
29896162Sru.endif
29996162Sru
3001638Srgrimes.endif
3011638Srgrimes
3021638Srgrimes.if !target(lint)
30395306Srulint: ${SRCS:M*.c}
304103713Smarkm	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
3051638Srgrimes.endif
3061638Srgrimes
307156813Sru.if ${MK_MAN} != "no"
3081638Srgrimes.include <bsd.man.mk>
30974842Sru.endif
3101844Swollman
3111844Swollman.include <bsd.dep.mk>
31234092Sbde
31399362Sru.if !exists(${.OBJDIR}/${DEPENDFILE})
31496512Sru.if defined(LIB) && !empty(LIB)
31599362Sru${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h}
316124637Sru.for _S in ${SRCS:N*.[hly]}
317124637Sru${_S:R}.po: ${_S}
318124637Sru.endfor
31934092Sbde.endif
32099362Sru.if defined(SHLIB_NAME) || \
32199362Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
32299362Sru${SOBJS}: ${SRCS:M*.h}
323124637Sru.for _S in ${SRCS:N*.[hly]}
324124637Sru${_S:R}.So: ${_S}
325124637Sru.endfor
32696512Sru.endif
32799362Sru.endif
32834092Sbde
329100457Sru.if !target(clean)
330100457Sruclean:
331100457Sru.if defined(CLEANFILES) && !empty(CLEANFILES)
332100457Sru	rm -f ${CLEANFILES}
333100457Sru.endif
334100457Sru.if defined(LIB) && !empty(LIB)
335100457Sru	rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
336100457Sru.endif
337100457Sru.if !defined(INTERNALLIB)
338156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
339100457Sru	rm -f ${POBJS} ${POBJS:S/$/.tmp/}
340100457Sru.endif
341100457Sru.if defined(SHLIB_NAME) || \
342100457Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
343100457Sru	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
344100457Sru.endif
345100457Sru.if defined(SHLIB_NAME)
346100457Sru.if defined(SHLIB_LINK)
347100457Sru	rm -f ${SHLIB_LINK}
348100457Sru.endif
349100457Sru.if defined(LIB) && !empty(LIB)
350100457Sru	rm -f lib${LIB}.so.* lib${LIB}.so
351100457Sru.endif
352100457Sru.endif
353100457Sru.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
354100457Sru	rm -f ${LINTOBJS}
355100457Sru.endif
356144893Sharti.endif # !defined(INTERNALLIB)
357100457Sru.if defined(_LIBS) && !empty(_LIBS)
358100457Sru	rm -f ${_LIBS}
359100457Sru.endif
360100457Sru.if defined(CLEANDIRS) && !empty(CLEANDIRS)
361100457Sru	rm -rf ${CLEANDIRS}
362100457Sru.endif
363157054Sdes.if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS)
364157054Sdes	rm -f ${VERSION_MAP}
365100457Sru.endif
366157054Sdes.endif
367100457Sru
36816663Sjkh.include <bsd.obj.mk>
36976861Skris
37076861Skris.include <bsd.sys.mk>
371