bsd.lib.mk revision 163683
11844Swollman#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
250476Speter# $FreeBSD: head/share/mk/bsd.lib.mk 163683 2006-10-25 09:43:38Z ru $
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}
157163683Sru.if !defined(NM)
158163683Sru	@${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
159163683Sru.else
160163683Sru	@${AR} cq ${.TARGET} `NM='${NM}' lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
161163683Sru.endif
16296512Sru	${RANLIB} ${.TARGET}
16399362Sru.endif
1641638Srgrimes
16596512Sru.if !defined(INTERNALLIB)
16695114Sobrien
167156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
16896512Sru_LIBS+=		lib${LIB}_p.a
16996512SruPOBJS+=		${OBJS:.o=.po} ${STATICOBJS:.o=.po}
17095306Sru
17196512Srulib${LIB}_p.a: ${POBJS}
17296512Sru	@${ECHO} building profiled ${LIB} library
17396512Sru	@rm -f ${.TARGET}
174163683Sru.if !defined(NM)
175163683Sru	@${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
176163683Sru.else
177163683Sru	@${AR} cq ${.TARGET} `NM='${NM}' lorder ${POBJS} | tsort -q` ${ARADD}
178163683Sru.endif
17996512Sru	${RANLIB} ${.TARGET}
18074805Sru.endif
1811844Swollman
18299362Sru.if defined(SHLIB_NAME) || \
18399362Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
18496512SruSOBJS+=		${OBJS:.o=.So}
18599362Sru.endif
1861844Swollman
18796512Sru.if defined(SHLIB_NAME)
18896512Sru_LIBS+=		${SHLIB_NAME}
1891638Srgrimes
19042915Sjdp${SHLIB_NAME}: ${SOBJS}
19142915Sjdp	@${ECHO} building shared library ${SHLIB_NAME}
19296512Sru	@rm -f ${.TARGET} ${SHLIB_LINK}
19342915Sjdp.if defined(SHLIB_LINK)
19496512Sru	@ln -fs ${.TARGET} ${SHLIB_LINK}
19542915Sjdp.endif
196163683Sru.if !defined(NM)
19796343Sobrien	@${CC} ${LDFLAGS} -shared -Wl,-x \
19896512Sru	    -o ${.TARGET} -Wl,-soname,${SONAME} \
199163683Sru	    `lorder ${SOBJS} | tsort -q` ${LDADD}
200163683Sru.else
201163683Sru	@${CC} ${LDFLAGS} -shared -Wl,-x \
202163683Sru	    -o ${.TARGET} -Wl,-soname,${SONAME} \
203163683Sru	    `NM='${NM}' lorder ${SOBJS} | tsort -q` ${LDADD}
20428945Speter.endif
205163683Sru.endif
2061844Swollman
207156813Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
20896512Sru_LIBS+=		lib${LIB}_pic.a
20996512Sru
21096512Srulib${LIB}_pic.a: ${SOBJS}
2112353Sbde	@${ECHO} building special pic ${LIB} library
21296512Sru	@rm -f ${.TARGET}
21396512Sru	@${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
21496512Sru	${RANLIB} ${.TARGET}
2153859Sbde.endif
2161844Swollman
217139106Sru.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
21896512SruLINTLIB=	llib-l${LIB}.ln
21996512Sru_LIBS+=		${LINTLIB}
22096512SruLINTOBJS+=	${SRCS:M*.c:.c=.ln}
22196512Sru
22292491Smarkm${LINTLIB}: ${LINTOBJS}
22396512Sru	@${ECHO} building lint library ${.TARGET}
22496512Sru	@rm -f ${.TARGET}
22592491Smarkm	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
22692491Smarkm.endif
2271638Srgrimes
228144893Sharti.endif # !defined(INTERNALLIB)
22996512Sru
23096512Sruall: ${_LIBS}
23196512Sru
232156813Sru.if ${MK_MAN} != "no"
23396512Sruall: _manpages
2341638Srgrimes.endif
2351638Srgrimes
23634179Sbde_EXTRADEPEND:
23724750Sbde	@TMP=_depend$$$$; \
23842450Sjdp	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
23924750Sbde	    > $$TMP; \
24024750Sbde	mv $$TMP ${DEPENDFILE}
241139107Sru.if !defined(NO_EXTRADEPEND) && defined(SHLIB_NAME)
24231809Sbde.if defined(DPADD) && !empty(DPADD)
24342915Sjdp	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
24427910Sasami.endif
24528945Speter.endif
2461638Srgrimes
2471638Srgrimes.if !target(install)
2481638Srgrimes
249136019Sru.if defined(PRECIOUSLIB)
250139111Sru.if !defined(NO_FSCHG)
2512298SwollmanSHLINSTALLFLAGS+= -fschg
2522298Swollman.endif
253136019SruSHLINSTALLFLAGS+= -S
254136019Sru.endif
2552298Swollman
25649328Shoek_INSTALLFLAGS:=	${INSTALLFLAGS}
25749328Shoek.for ie in ${INSTALLFLAGS_EDIT}
25849328Shoek_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
25949328Shoek.endfor
26056971Sru_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
26149328Shoek.for ie in ${INSTALLFLAGS_EDIT}
26249328Shoek_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
26349328Shoek.endfor
26449328Shoek
26599362Sru.if !defined(INTERNALLIB)
26695306Srurealinstall: _libinstall
26799343Sru.ORDER: beforeinstall _libinstall
26895306Sru_libinstall:
269139110Sru.if defined(LIB) && !empty(LIB) && !defined(NO_INSTALLLIB)
27092980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
27149328Shoek	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
27296512Sru.endif
273156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
27492980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
27549328Shoek	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
2761638Srgrimes.endif
277116144Sobrien.if defined(SHLIB_NAME)
278100872Sru	${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
27949328Shoek	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
28042915Sjdp	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
28142915Sjdp.if defined(SHLIB_LINK)
282119846Sru.if ${SHLIBDIR} == ${LIBDIR}
283119846Sru	ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
284119846Sru.else
285119846Sru	ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
286119730Speter	    ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
287119846Sru.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME})
288119846Sru	-chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
289119846Sru	rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
2901844Swollman.endif
29128945Speter.endif
292119730Speter.endif
293119846Sru.endif
294156813Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
295100872Sru	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
29649328Shoek	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
2971844Swollman.endif
298139106Sru.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
299100872Sru	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
30096462Sru	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
30196462Sru.endif
302144893Sharti.endif # !defined(INTERNALLIB)
30396462Sru
304141503Sphantom.include <bsd.nls.mk>
30597769Sru.include <bsd.files.mk>
30696668Sru.include <bsd.incs.mk>
30799256Sru.include <bsd.links.mk>
30896462Sru
309156813Sru.if ${MK_MAN} != "no"
31096164Srurealinstall: _maninstall
31199343Sru.ORDER: beforeinstall _maninstall
31296162Sru.endif
31396162Sru
3141638Srgrimes.endif
3151638Srgrimes
3161638Srgrimes.if !target(lint)
31795306Srulint: ${SRCS:M*.c}
318103713Smarkm	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
3191638Srgrimes.endif
3201638Srgrimes
321156813Sru.if ${MK_MAN} != "no"
3221638Srgrimes.include <bsd.man.mk>
32374842Sru.endif
3241844Swollman
3251844Swollman.include <bsd.dep.mk>
32634092Sbde
32799362Sru.if !exists(${.OBJDIR}/${DEPENDFILE})
32896512Sru.if defined(LIB) && !empty(LIB)
32999362Sru${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h}
330124637Sru.for _S in ${SRCS:N*.[hly]}
331124637Sru${_S:R}.po: ${_S}
332124637Sru.endfor
33334092Sbde.endif
33499362Sru.if defined(SHLIB_NAME) || \
33599362Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
33699362Sru${SOBJS}: ${SRCS:M*.h}
337124637Sru.for _S in ${SRCS:N*.[hly]}
338124637Sru${_S:R}.So: ${_S}
339124637Sru.endfor
34096512Sru.endif
34199362Sru.endif
34234092Sbde
343100457Sru.if !target(clean)
344100457Sruclean:
345100457Sru.if defined(CLEANFILES) && !empty(CLEANFILES)
346100457Sru	rm -f ${CLEANFILES}
347100457Sru.endif
348100457Sru.if defined(LIB) && !empty(LIB)
349100457Sru	rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
350100457Sru.endif
351100457Sru.if !defined(INTERNALLIB)
352156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
353100457Sru	rm -f ${POBJS} ${POBJS:S/$/.tmp/}
354100457Sru.endif
355100457Sru.if defined(SHLIB_NAME) || \
356100457Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
357100457Sru	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
358100457Sru.endif
359100457Sru.if defined(SHLIB_NAME)
360100457Sru.if defined(SHLIB_LINK)
361100457Sru	rm -f ${SHLIB_LINK}
362100457Sru.endif
363100457Sru.if defined(LIB) && !empty(LIB)
364100457Sru	rm -f lib${LIB}.so.* lib${LIB}.so
365100457Sru.endif
366100457Sru.endif
367100457Sru.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
368100457Sru	rm -f ${LINTOBJS}
369100457Sru.endif
370144893Sharti.endif # !defined(INTERNALLIB)
371100457Sru.if defined(_LIBS) && !empty(_LIBS)
372100457Sru	rm -f ${_LIBS}
373100457Sru.endif
374100457Sru.if defined(CLEANDIRS) && !empty(CLEANDIRS)
375100457Sru	rm -rf ${CLEANDIRS}
376100457Sru.endif
377157054Sdes.if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS)
378157054Sdes	rm -f ${VERSION_MAP}
379100457Sru.endif
380157054Sdes.endif
381100457Sru
38216663Sjkh.include <bsd.obj.mk>
38376861Skris
38476861Skris.include <bsd.sys.mk>
385