bsd.lib.mk revision 168317
1270710Shselasky#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
2329977Shselasky# $FreeBSD: head/share/mk/bsd.lib.mk 168317 2007-04-03 18:56:05Z kan $
3329977Shselasky#
4289572Shselasky
5270710Shselasky.include <bsd.init.mk>
6270710Shselasky
7270710Shselasky# Set up the variables controlling shared libraries.  After this section,
8270710Shselasky# SHLIB_NAME will be defined only if we are to create a shared library.
9270710Shselasky# SHLIB_LINK will be defined only if we are to create a link to it.
10270710Shselasky# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
11270710Shselasky.if defined(NO_PIC)
12270710Shselasky.undef SHLIB_NAME
13270710Shselasky.undef INSTALL_PIC_ARCHIVE
14270710Shselasky.else
15270710Shselasky.if !defined(SHLIB) && defined(LIB)
16270710ShselaskySHLIB=		${LIB}
17270710Shselasky.endif
18270710Shselasky.if !defined(SHLIB_NAME) && defined(SHLIB) && defined(SHLIB_MAJOR)
19270710ShselaskySHLIB_NAME=	lib${SHLIB}.so.${SHLIB_MAJOR}
20270710Shselasky.endif
21270710Shselasky.if defined(SHLIB_NAME) && !empty(SHLIB_NAME:M*.so.*)
22270710ShselaskySHLIB_LINK?=	${SHLIB_NAME:R}
23270710Shselasky.endif
24270710ShselaskySONAME?=	${SHLIB_NAME}
25270710Shselasky.endif
26270710Shselasky
27289644Shselasky.if defined(CRUNCH_CFLAGS)
28289644ShselaskyCFLAGS+=	${CRUNCH_CFLAGS}
29270710Shselasky.endif
30328653Shselasky
31270710Shselasky.if ${MK_ASSERT_DEBUG} == "no"
32328653ShselaskyCFLAGS+= -DNDEBUG
33270710ShselaskyNO_WERROR=
34270710Shselasky.endif
35289572Shselasky
36270710Shselasky.if defined(DEBUG_FLAGS)
37270710ShselaskyCFLAGS+= ${DEBUG_FLAGS}
38329977Shselasky.endif
39270710Shselasky
40289572Shselasky.if !defined(DEBUG_FLAGS)
41329977ShselaskySTRIP?=	-s
42270710Shselasky.endif
43331756Semaste
44331756Semaste.include <bsd.libnames.mk>
45270710Shselasky
46289572Shselasky# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
47289572Shselasky# .So used for PIC object files
48270710Shselasky.SUFFIXES:
49329977Shselasky.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .m .C .f .y .l .ln
50270710Shselasky
51270710Shselasky.if !defined(PICFLAG)
52328653Shselasky.if ${MACHINE_ARCH} == "sparc64"
53328653ShselaskyPICFLAG=-fPIC
54328653Shselasky.else
55329977ShselaskyPICFLAG=-fpic
56328653Shselasky.endif
57328653Shselasky.endif
58300498Shselasky
59300498Shselasky.if ${CC} == "icc"
60300498ShselaskyPO_FLAG=-p
61329977Shselasky.else
62300498ShselaskyPO_FLAG=-pg
63300498Shselasky.endif
64300498Shselasky
65300498Shselasky.c.po:
66300498Shselasky	${CC} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
67329977Shselasky
68300498Shselasky.c.So:
69300498Shselasky	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
70300498Shselasky
71300498Shselasky.cc.po .C.po .cpp.po .cxx.po:
72300498Shselasky	${CXX} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
73329977Shselasky
74300498Shselasky.cc.So .C.So .cpp.So .cxx.So:
75300498Shselasky	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
76289572Shselasky
77289572Shselasky.f.po:
78270710Shselasky	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
79329977Shselasky
80270710Shselasky.f.So:
81270710Shselasky	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
82289572Shselasky
83289572Shselasky.m.po:
84270710Shselasky	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
85329977Shselasky
86270710Shselasky.m.So:
87270710Shselasky	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
88289572Shselasky
89337894Shselasky.s.po .s.So:
90337894Shselasky	${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
91337894Shselasky
92337894Shselasky.asm.po:
93337894Shselasky	${CC} -x assembler-with-cpp -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
94337894Shselasky
95337894Shselasky.asm.So:
96289572Shselasky	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \
97270710Shselasky	    -c ${.IMPSRC} -o ${.TARGET}
98329977Shselasky
99270710Shselasky.S.po:
100270710Shselasky	${CC} -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
101289572Shselasky
102289572Shselasky.S.So:
103270710Shselasky	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
104329977Shselasky
105329977Shselaskyall: objwarn
106289572Shselasky
107270710Shselasky.include <bsd.symver.mk>
108270710Shselasky
109289572Shselasky# Allow librararies to specify their own version map or have it
110289572Shselasky# automatically generated (see bsd.symver.mk above).
111270710Shselasky.if !empty(VERSION_MAP)
112329977Shselasky${SHLIB_NAME}:	${VERSION_MAP}
113270710ShselaskyLDFLAGS+=	-Wl,--version-script=${VERSION_MAP}
114270710Shselasky.endif
115300498Shselasky
116300498Shselasky.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME)
117300498ShselaskyOBJS+=		${SRCS:N*.h:R:S/$/.o/}
118329977Shselasky.endif
119329977Shselasky
120329977Shselasky.if defined(LIB) && !empty(LIB)
121300498Shselasky_LIBS=		lib${LIB}.a
122300498Shselasky
123300498Shselaskylib${LIB}.a: ${OBJS} ${STATICOBJS}
124300498Shselasky	@${ECHO} building static ${LIB} library
125300498Shselasky	@rm -f ${.TARGET}
126329977Shselasky.if !defined(NM)
127329977Shselasky	@${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
128329977Shselasky.else
129300498Shselasky	@${AR} cq ${.TARGET} `NM='${NM}' lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
130300498Shselasky.endif
131289572Shselasky	${RANLIB} ${.TARGET}
132289572Shselasky.endif
133270710Shselasky
134329977Shselasky.if !defined(INTERNALLIB)
135270710Shselasky
136270710Shselasky.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
137335421Shselasky_LIBS+=		lib${LIB}_p.a
138335421ShselaskyPOBJS+=		${OBJS:.o=.po} ${STATICOBJS:.o=.po}
139335421Shselasky
140335421Shselaskylib${LIB}_p.a: ${POBJS}
141335421Shselasky	@${ECHO} building profiled ${LIB} library
142335421Shselasky	@rm -f ${.TARGET}
143335421Shselasky.if !defined(NM)
144335421Shselasky	@${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
145335421Shselasky.else
146335421Shselasky	@${AR} cq ${.TARGET} `NM='${NM}' lorder ${POBJS} | tsort -q` ${ARADD}
147335421Shselasky.endif
148335421Shselasky	${RANLIB} ${.TARGET}
149335421Shselasky.endif
150335421Shselasky
151335421Shselasky.if defined(SHLIB_NAME) || \
152335421Shselasky    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
153335421ShselaskySOBJS+=		${OBJS:.o=.So}
154335421Shselasky.endif
155335421Shselasky
156337894Shselasky.if defined(SHLIB_NAME)
157337894Shselasky_LIBS+=		${SHLIB_NAME}
158337894Shselasky
159337894Shselasky${SHLIB_NAME}: ${SOBJS}
160337894Shselasky	@${ECHO} building shared library ${SHLIB_NAME}
161337894Shselasky	@rm -f ${.TARGET} ${SHLIB_LINK}
162337894Shselasky.if defined(SHLIB_LINK)
163289572Shselasky	@ln -fs ${.TARGET} ${SHLIB_LINK}
164289572Shselasky.endif
165270710Shselasky.if !defined(NM)
166289572Shselasky	@${CC} ${LDFLAGS} -shared -Wl,-x \
167270710Shselasky	    -o ${.TARGET} -Wl,-soname,${SONAME} \
168270710Shselasky	    `lorder ${SOBJS} | tsort -q` ${LDADD}
169289572Shselasky.else
170289572Shselasky	@${CC} ${LDFLAGS} -shared -Wl,-x \
171270710Shselasky	    -o ${.TARGET} -Wl,-soname,${SONAME} \
172289572Shselasky	    `NM='${NM}' lorder ${SOBJS} | tsort -q` ${LDADD}
173270710Shselasky.endif
174270710Shselasky.endif
175329977Shselasky
176335429Shselasky.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
177329977Shselasky_LIBS+=		lib${LIB}_pic.a
178329977Shselasky
179270710Shselaskylib${LIB}_pic.a: ${SOBJS}
180328653Shselasky	@${ECHO} building special pic ${LIB} library
181289572Shselasky	@rm -f ${.TARGET}
182277396Shselasky	@${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
183277396Shselasky	${RANLIB} ${.TARGET}
184289572Shselasky.endif
185277396Shselasky
186329977Shselasky.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
187329977ShselaskyLINTLIB=	llib-l${LIB}.ln
188277396Shselasky_LIBS+=		${LINTLIB}
189277396ShselaskyLINTOBJS+=	${SRCS:M*.c:.c=.ln}
190289572Shselasky
191289572Shselasky${LINTLIB}: ${LINTOBJS}
192289572Shselasky	@${ECHO} building lint library ${.TARGET}
193289572Shselasky	@rm -f ${.TARGET}
194289572Shselasky	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
195289572Shselasky.endif
196289572Shselasky
197289572Shselasky.endif # !defined(INTERNALLIB)
198289572Shselasky
199328653Shselaskyall: ${_LIBS}
200328653Shselasky
201328653Shselasky.if ${MK_MAN} != "no"
202328653Shselaskyall: _manpages
203328653Shselasky.endif
204328653Shselasky
205328653Shselasky_EXTRADEPEND:
206328653Shselasky	@TMP=_depend$$$$; \
207328653Shselasky	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
208328653Shselasky	    > $$TMP; \
209328653Shselasky	mv $$TMP ${DEPENDFILE}
210328653Shselasky.if !defined(NO_EXTRADEPEND) && defined(SHLIB_NAME)
211328653Shselasky.if defined(DPADD) && !empty(DPADD)
212328653Shselasky	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
213328653Shselasky.endif
214328653Shselasky.endif
215328653Shselasky
216328653Shselasky.if !target(install)
217329977Shselasky
218329977Shselasky.if defined(PRECIOUSLIB)
219329977Shselasky.if !defined(NO_FSCHG)
220329977ShselaskySHLINSTALLFLAGS+= -fschg
221329977Shselasky.endif
222329977ShselaskySHLINSTALLFLAGS+= -S
223329977Shselasky.endif
224329977Shselasky
225329977Shselasky_INSTALLFLAGS:=	${INSTALLFLAGS}
226330848Shselasky.for ie in ${INSTALLFLAGS_EDIT}
227330848Shselasky_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
228330848Shselasky.endfor
229330848Shselasky_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
230330848Shselasky.for ie in ${INSTALLFLAGS_EDIT}
231330848Shselasky_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
232330848Shselasky.endfor
233330848Shselasky
234330848Shselasky.if !defined(INTERNALLIB)
235329977Shselaskyrealinstall: _libinstall
236329977Shselasky.ORDER: beforeinstall _libinstall
237329977Shselasky_libinstall:
238329977Shselasky.if defined(LIB) && !empty(LIB) && !defined(NO_INSTALLLIB)
239329977Shselasky	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
240329977Shselasky	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
241329977Shselasky.endif
242329977Shselasky.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
243329977Shselasky	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
244328653Shselasky	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
245.endif
246.if defined(SHLIB_NAME)
247	${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
248	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
249	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
250.if defined(SHLIB_LINK)
251.if ${SHLIBDIR} == ${LIBDIR}
252	ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
253.else
254	ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
255	    ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
256.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME})
257	-chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
258	rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
259.endif
260.endif
261.endif
262.endif
263.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
264	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
265	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
266.endif
267.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
268	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
269	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
270.endif
271.endif # !defined(INTERNALLIB)
272
273.include <bsd.nls.mk>
274.include <bsd.files.mk>
275.include <bsd.incs.mk>
276.include <bsd.links.mk>
277
278.if ${MK_MAN} != "no"
279realinstall: _maninstall
280.ORDER: beforeinstall _maninstall
281.endif
282
283.endif
284
285.if !target(lint)
286lint: ${SRCS:M*.c}
287	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
288.endif
289
290.if ${MK_MAN} != "no"
291.include <bsd.man.mk>
292.endif
293
294.include <bsd.dep.mk>
295
296.if !exists(${.OBJDIR}/${DEPENDFILE})
297.if defined(LIB) && !empty(LIB)
298${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h}
299.for _S in ${SRCS:N*.[hly]}
300${_S:R}.po: ${_S}
301.endfor
302.endif
303.if defined(SHLIB_NAME) || \
304    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
305${SOBJS}: ${SRCS:M*.h}
306.for _S in ${SRCS:N*.[hly]}
307${_S:R}.So: ${_S}
308.endfor
309.endif
310.endif
311
312.if !target(clean)
313clean:
314.if defined(CLEANFILES) && !empty(CLEANFILES)
315	rm -f ${CLEANFILES}
316.endif
317.if defined(LIB) && !empty(LIB)
318	rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
319.endif
320.if !defined(INTERNALLIB)
321.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
322	rm -f ${POBJS} ${POBJS:S/$/.tmp/}
323.endif
324.if defined(SHLIB_NAME) || \
325    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
326	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
327.endif
328.if defined(SHLIB_NAME)
329.if defined(SHLIB_LINK)
330	rm -f ${SHLIB_LINK}
331.endif
332.if defined(LIB) && !empty(LIB)
333	rm -f lib${LIB}.so.* lib${LIB}.so
334.endif
335.endif
336.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
337	rm -f ${LINTOBJS}
338.endif
339.endif # !defined(INTERNALLIB)
340.if defined(_LIBS) && !empty(_LIBS)
341	rm -f ${_LIBS}
342.endif
343.if defined(CLEANDIRS) && !empty(CLEANDIRS)
344	rm -rf ${CLEANDIRS}
345.endif
346.if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS)
347	rm -f ${VERSION_MAP}
348.endif
349.endif
350
351.include <bsd.obj.mk>
352
353.include <bsd.sys.mk>
354