bsd.lib.mk revision 228124
11558Srgrimes#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
2187814Srwatson# $FreeBSD: head/share/mk/bsd.lib.mk 228124 2011-11-29 08:38:47Z fjoe $
3187814Srwatson#
4187814Srwatson
5187814Srwatson.include <bsd.init.mk>
6187814Srwatson
7187814Srwatson# Set up the variables controlling shared libraries.  After this section,
898542Smckusick# SHLIB_NAME will be defined only if we are to create a shared library.
998542Smckusick# SHLIB_LINK will be defined only if we are to create a link to it.
1098542Smckusick# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
1198542Smckusick.if defined(NO_PIC)
1298542Smckusick.undef SHLIB_NAME
1398542Smckusick.undef INSTALL_PIC_ARCHIVE
1498542Smckusick.else
15110884Smckusick.if !defined(SHLIB) && defined(LIB)
1698542SmckusickSHLIB=		${LIB}
171558Srgrimes.endif
181558Srgrimes.if !defined(SHLIB_NAME) && defined(SHLIB) && defined(SHLIB_MAJOR)
191558SrgrimesSHLIB_NAME=	lib${SHLIB}.so.${SHLIB_MAJOR}
201558Srgrimes.endif
211558Srgrimes.if defined(SHLIB_NAME) && !empty(SHLIB_NAME:M*.so.*)
221558SrgrimesSHLIB_LINK?=	${SHLIB_NAME:R}
231558Srgrimes.endif
241558SrgrimesSONAME?=	${SHLIB_NAME}
251558Srgrimes.endif
261558Srgrimes
271558Srgrimes.if defined(CRUNCH_CFLAGS)
281558SrgrimesCFLAGS+=	${CRUNCH_CFLAGS}
291558Srgrimes.endif
301558Srgrimes
311558Srgrimes.if ${MK_ASSERT_DEBUG} == "no"
321558SrgrimesCFLAGS+= -DNDEBUG
331558SrgrimesNO_WERROR=
341558Srgrimes.endif
351558Srgrimes
361558Srgrimes# Enable CTF conversion on request.
371558Srgrimes.if defined(WITH_CTF)
381558Srgrimes.undef NO_CTF
391558Srgrimes.endif
401558Srgrimes
411558Srgrimes.if defined(DEBUG_FLAGS)
421558SrgrimesCFLAGS+= ${DEBUG_FLAGS}
431558Srgrimes
441558Srgrimes.if !defined(NO_CTF) && (${DEBUG_FLAGS:M-g} != "")
451558SrgrimesCTFFLAGS+= -g
4636998Scharnier.endif
471558Srgrimes.endif
481558Srgrimes
491558Srgrimes.if !defined(DEBUG_FLAGS)
501558SrgrimesSTRIP?=	-s
511558Srgrimes.endif
5236998Scharnier
5323673Speter.include <bsd.libnames.mk>
5436998Scharnier
5536998Scharnier# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
5650476Speter# .So used for PIC object files
571558Srgrimes.SUFFIXES:
581558Srgrimes.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .C .f .y .l .ln
591558Srgrimes
601558Srgrimes.if !defined(PICFLAG)
6196478Sphk.if ${MACHINE_CPUARCH} == "sparc64"
621558SrgrimesPICFLAG=-fPIC
6398542Smckusick.else
641558SrgrimesPICFLAG=-fpic
651558Srgrimes.endif
6623673Speter.endif
67105741Sjmallett
681558SrgrimesPO_FLAG=-pg
691558Srgrimes
7099826Sjmallett.c.o:
71224025Sdelphij	${CC} ${STATIC_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
72109525Sjmallett	@[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || \
731558Srgrimes		(${ECHO} ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} && \
741558Srgrimes		${CTFCONVERT} ${CTFFLAGS} ${.TARGET})
7523673Speter
761558Srgrimes.c.po:
7799826Sjmallett	${CC} ${PO_FLAG} ${STATIC_CFLAGS} ${PO_CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
78109510Sjmallett.if !defined(NO_CTF)
791558Srgrimes	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
8099826Sjmallett.endif
811558Srgrimes
8292839Simp.c.So:
83224004Sdelphij	${CC} ${PICFLAG} -DPIC ${SHARED_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
84109519Sjmallett.if !defined(NO_CTF)
85187814Srwatson	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
86187814Srwatson.endif
87109525Sjmallett
8892839Simp.cc.o:
89187814Srwatson	${CXX} ${STATIC_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
90109525Sjmallett
9192839Simp.cc.po .C.po .cpp.po .cxx.po:
921558Srgrimes	${CXX} ${PO_FLAG} ${STATIC_CXXFLAGS} ${PO_CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
931558Srgrimes
9492839Simp.cc.So .C.So .cpp.So .cxx.So:
951558Srgrimes	${CXX} ${PICFLAG} -DPIC ${SHARED_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
96109525Sjmallett
97224004Sdelphij.f.po:
981558Srgrimes	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
99224004Sdelphij.if !defined(NO_CTF)
100109507Sjmallett	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
101224004Sdelphij.endif
102109525Sjmallett
103187814Srwatson.f.So:
104187814Srwatson	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
105187814Srwatson.if !defined(NO_CTF)
106109525Sjmallett	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
107109525Sjmallett.endif
108109525Sjmallett
109224004Sdelphij.s.po .s.So:
110224004Sdelphij	${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
111224004Sdelphij.if !defined(NO_CTF)
112109525Sjmallett	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
113109525Sjmallett.endif
114109525Sjmallett
115109525Sjmallett.asm.po:
116109525Sjmallett	${CC} -x assembler-with-cpp -DPROF ${PO_CFLAGS} ${ACFLAGS} \
1171558Srgrimes		-c ${.IMPSRC} -o ${.TARGET}
1181558Srgrimes.if !defined(NO_CTF)
1191558Srgrimes	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
1201558Srgrimes.endif
1211558Srgrimes
122187814Srwatson.asm.So:
123187814Srwatson	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} ${ACFLAGS} \
124187814Srwatson	    -c ${.IMPSRC} -o ${.TARGET}
125187814Srwatson.if !defined(NO_CTF)
1261558Srgrimes	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
127109525Sjmallett.endif
128109525Sjmallett
129109525Sjmallett.S.po:
130109525Sjmallett	${CC} -DPROF ${PO_CFLAGS} ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET}
131109525Sjmallett.if !defined(NO_CTF)
132109525Sjmallett	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
133187814Srwatson.endif
134187814Srwatson
135187814Srwatson.S.So:
136109525Sjmallett	${CC} ${PICFLAG} -DPIC ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET}
137224004Sdelphij.if !defined(NO_CTF)
138224004Sdelphij	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
139109525Sjmallett.endif
140109525Sjmallett
141109525Sjmallettall: objwarn
142109525Sjmallett
1431558Srgrimes.include <bsd.symver.mk>
1441558Srgrimes
1451558Srgrimes# Allow libraries to specify their own version map or have it
1461558Srgrimes# automatically generated (see bsd.symver.mk above).
147224004Sdelphij.if ${MK_SYMVER} == "yes" && !empty(VERSION_MAP)
148224004Sdelphij${SHLIB_NAME}:	${VERSION_MAP}
149224004SdelphijLDFLAGS+=	-Wl,--version-script=${VERSION_MAP}
150224025Sdelphij.endif
151224004Sdelphij
152224004Sdelphij.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME)
153224004SdelphijOBJS+=		${SRCS:N*.h:R:S/$/.o/}
154224004Sdelphij.endif
15592839Simp
1561558Srgrimes.if defined(LIB) && !empty(LIB)
157109532Sjmallett_LIBS=		lib${LIB}.a
15898542Smckusick
159109767Snjllib${LIB}.a: ${OBJS} ${STATICOBJS}
16099827Sjmallett	@${ECHO} building static ${LIB} library
1611558Srgrimes	@rm -f ${.TARGET}
162101688Sjmallett.if !defined(NM)
163101688Sjmallett	@${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
16498542Smckusick.else
165109532Sjmallett	@${AR} cq ${.TARGET} `NM='${NM}' lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
16698542Smckusick.endif
167109532Sjmallett	${RANLIB} ${.TARGET}
168122670Sjohan.endif
169122670Sjohan
170122670Sjohan.if !defined(INTERNALLIB)
171122670Sjohan
172101688Sjmallett.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
173101688Sjmallett_LIBS+=		lib${LIB}_p.a
17498542SmckusickPOBJS+=		${OBJS:.o=.po} ${STATICOBJS:.o=.po}
175109532Sjmallett
17698542Smckusicklib${LIB}_p.a: ${POBJS}
177109532Sjmallett	@${ECHO} building profiled ${LIB} library
178201647Sgavin	@rm -f ${.TARGET}
179122670Sjohan.if !defined(NM)
180122670Sjohan	@${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
181101688Sjmallett.else
182101688Sjmallett	@${AR} cq ${.TARGET} `NM='${NM}' lorder ${POBJS} | tsort -q` ${ARADD}
183109532Sjmallett.endif
18498542Smckusick	${RANLIB} ${.TARGET}
1851558Srgrimes.endif
1861558Srgrimes
1871558Srgrimes.if defined(SHLIB_NAME) || \
1881558Srgrimes    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
1891558SrgrimesSOBJS+=		${OBJS:.o=.So}
1901558Srgrimes.endif
19198542Smckusick
1921558Srgrimes.if defined(SHLIB_NAME)
19398542Smckusick_LIBS+=		${SHLIB_NAME}
194101688Sjmallett
195101688Sjmallett.if target(beforelinking)
19698542Smckusick${SHLIB_NAME}: ${SOBJS} beforelinking
19798542Smckusick.else
19898542Smckusick${SHLIB_NAME}: ${SOBJS}
199122670Sjohan.endif
200122670Sjohan	@${ECHO} building shared library ${SHLIB_NAME}
201122670Sjohan	@rm -f ${.TARGET} ${SHLIB_LINK}
202122670Sjohan.if defined(SHLIB_LINK)
203122670Sjohan	@ln -fs ${.TARGET} ${SHLIB_LINK}
204163844Spjd.endif
205163844Spjd.if !defined(NM)
206163844Spjd	@${CC} ${LDFLAGS} ${SSP_CFLAGS} -shared -Wl,-x \
207122670Sjohan	    -o ${.TARGET} -Wl,-soname,${SONAME} \
208122670Sjohan	    `lorder ${SOBJS} | tsort -q` ${LDADD}
209122670Sjohan.else
210109532Sjmallett	@${CC} ${LDFLAGS} ${SSP_CFLAGS} -shared -Wl,-x \
211109532Sjmallett	    -o ${.TARGET} -Wl,-soname,${SONAME} \
212109532Sjmallett	    `NM='${NM}' lorder ${SOBJS} | tsort -q` ${LDADD}
213101688Sjmallett.endif
214101688Sjmallett.if !defined(NO_CTF)
21598542Smckusick	${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SOBJS}
21698542Smckusick.endif
21798542Smckusick.endif
21898542Smckusick
21998542Smckusick.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
22098542Smckusick_LIBS+=		lib${LIB}_pic.a
22198542Smckusick
22298542Smckusicklib${LIB}_pic.a: ${SOBJS}
223122670Sjohan	@${ECHO} building special pic ${LIB} library
22498542Smckusick	@rm -f ${.TARGET}
225122670Sjohan	@${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
22698542Smckusick	${RANLIB} ${.TARGET}
22798542Smckusick.endif
22898542Smckusick
22998542Smckusick.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
23098542SmckusickLINTLIB=	llib-l${LIB}.ln
23198542Smckusick_LIBS+=		${LINTLIB}
23298542SmckusickLINTOBJS+=	${SRCS:M*.c:.c=.ln}
23398542Smckusick
23498542Smckusick${LINTLIB}: ${LINTOBJS}
23598542Smckusick	@${ECHO} building lint library ${.TARGET}
236101688Sjmallett	@rm -f ${.TARGET}
237101688Sjmallett	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
238109532Sjmallett.endif
23998542Smckusick
2401558Srgrimes.endif # !defined(INTERNALLIB)
2411558Srgrimes
2422154Sdgall: ${_LIBS}
2432154Sdg
244123219Struckman.if ${MK_MAN} != "no"
245123219Struckmanall: _manpages
24648875Smpp.endif
247109767Snjl
248109767Snjl_EXTRADEPEND:
249109767Snjl	@TMP=_depend$$$$; \
250109767Snjl	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
251109767Snjl	    > $$TMP; \
25248875Smpp	mv $$TMP ${DEPENDFILE}
253109767Snjl.if !defined(NO_EXTRADEPEND) && defined(SHLIB_NAME)
254109767Snjl.if defined(DPADD) && !empty(DPADD)
255109767Snjl	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
256207141Sjeff.endif
257109767Snjl.endif
258109767Snjl
259109767Snjl.if !target(install)
260109767Snjl
261109767Snjl.if defined(PRECIOUSLIB)
262109767Snjl.if !defined(NO_FSCHG)
263109767SnjlSHLINSTALLFLAGS+= -fschg
264109767Snjl.endif
265163844SpjdSHLINSTALLFLAGS+= -S
266163844Spjd.endif
267109767Snjl
268109767Snjl_INSTALLFLAGS:=	${INSTALLFLAGS}
269200796Strasz.for ie in ${INSTALLFLAGS_EDIT}
270200796Strasz_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
271216798Skib.endfor
272216798Skib_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
273109767Snjl.for ie in ${INSTALLFLAGS_EDIT}
274200796Strasz_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
275216798Skib.endfor
276109767Snjl
277109767Snjl.if !defined(INTERNALLIB)
27848875Smpprealinstall: _libinstall
279110174Sgordon.ORDER: beforeinstall _libinstall
280122670Sjohan_libinstall:
281122670Sjohan.if defined(LIB) && !empty(LIB) && ${MK_INSTALLLIB} != "no"
2821558Srgrimes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
28371073Siedowse	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
284101688Sjmallett.endif
28598542Smckusick.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
2861558Srgrimes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
2871558Srgrimes	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
2881558Srgrimes.endif
2891558Srgrimes.if defined(SHLIB_NAME)
2901558Srgrimes	${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
2911558Srgrimes	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
2921558Srgrimes	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
2931558Srgrimes.if defined(SHLIB_LINK)
29498542Smckusick.if ${SHLIBDIR} == ${LIBDIR}
295101688Sjmallett	ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
29698542Smckusick.else
29798542Smckusick	ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
29898542Smckusick	    ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
299109532Sjmallett.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME})
300109532Sjmallett	-chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
3011558Srgrimes	rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
302109519Sjmallett.endif
303109519Sjmallett.endif
3041558Srgrimes.endif
305109519Sjmallett.endif
3061558Srgrimes.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
3071558Srgrimes	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
308109525Sjmallett	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
3091558Srgrimes.endif
31099827Sjmallett.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
3111558Srgrimes	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
3121558Srgrimes	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
313109519Sjmallett.endif
3141558Srgrimes.endif # !defined(INTERNALLIB)
315109532Sjmallett
3161558Srgrimes.include <bsd.nls.mk>
3171558Srgrimes.include <bsd.files.mk>
3181558Srgrimes.include <bsd.incs.mk>
319109519Sjmallett.include <bsd.links.mk>
320109519Sjmallett
321101688Sjmallett.if ${MK_MAN} != "no"
322101688Sjmallettrealinstall: _maninstall
323109532Sjmallett.ORDER: beforeinstall _maninstall
324122670Sjohan.endif
325122670Sjohan
326163844Spjd.endif
327163844Spjd
328163844Spjd.if !target(lint)
329101688Sjmallettlint: ${SRCS:M*.c}
330101688Sjmallett	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
331109532Sjmallett.endif
332122670Sjohan
333122670Sjohan.if ${MK_MAN} != "no"
33498542Smckusick.include <bsd.man.mk>
33598542Smckusick.endif
33698542Smckusick
337101688Sjmallett.include <bsd.dep.mk>
338101688Sjmallett
339101688Sjmallett.if !exists(${.OBJDIR}/${DEPENDFILE})
34098542Smckusick.if defined(LIB) && !empty(LIB)
3411558Srgrimes${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h}
3421558Srgrimes.for _S in ${SRCS:N*.[hly]}
3431558Srgrimes${_S:R}.po: ${_S}
3441558Srgrimes.endfor
3451558Srgrimes.endif
3461558Srgrimes.if defined(SHLIB_NAME) || \
3471558Srgrimes    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
3481558Srgrimes${SOBJS}: ${SRCS:M*.h}
3491558Srgrimes.for _S in ${SRCS:N*.[hly]}
3501558Srgrimes${_S:R}.So: ${_S}
3511558Srgrimes.endfor
3521558Srgrimes.endif
3531558Srgrimes.endif
3541558Srgrimes
3551558Srgrimes.if !target(clean)
3561558Srgrimesclean:
3571558Srgrimes.if defined(CLEANFILES) && !empty(CLEANFILES)
3581558Srgrimes	rm -f ${CLEANFILES}
3591558Srgrimes.endif
3601558Srgrimes.if defined(LIB) && !empty(LIB)
3611558Srgrimes	rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
3621558Srgrimes.endif
3631558Srgrimes.if !defined(INTERNALLIB)
3641558Srgrimes.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
3651558Srgrimes	rm -f ${POBJS} ${POBJS:S/$/.tmp/}
36698542Smckusick.endif
3671558Srgrimes.if defined(SHLIB_NAME) || \
36898542Smckusick    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
3691558Srgrimes	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
3701558Srgrimes.endif
37199827Sjmallett.if defined(SHLIB_NAME)
3721558Srgrimes.if defined(SHLIB_LINK)
373109525Sjmallett	rm -f ${SHLIB_LINK}
374187814Srwatson.endif
375187814Srwatson.if defined(LIB) && !empty(LIB)
376187814Srwatson	rm -f lib${LIB}.so.* lib${LIB}.so
377187814Srwatson.endif
378187814Srwatson.endif
379187814Srwatson.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
380187814Srwatson	rm -f ${LINTOBJS}
381187814Srwatson.endif
382187814Srwatson.endif # !defined(INTERNALLIB)
383187814Srwatson.if defined(_LIBS) && !empty(_LIBS)
384187814Srwatson	rm -f ${_LIBS}
385187814Srwatson.endif
386187814Srwatson.if defined(CLEANDIRS) && !empty(CLEANDIRS)
387187814Srwatson	rm -rf ${CLEANDIRS}
388187814Srwatson.endif
389187814Srwatson.if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS)
390187814Srwatson	rm -f ${VERSION_MAP}
391187814Srwatson.endif
392187814Srwatson.endif
393187814Srwatson
394187814Srwatson.include <bsd.obj.mk>
395187814Srwatson
396187814Srwatson.include <bsd.sys.mk>
397187814Srwatson