1 # from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91
7 # Set up the variables controlling shared libraries. After this section,
8 # SHLIB_NAME will be defined only if we are to create a shared library.
9 # SHLIB_LINK will be defined only if we are to create a link to it.
10 # INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
13 .undef INSTALL_PIC_ARCHIVE
15 .if !defined(SHLIB) && defined(LIB)
18 .if !defined(SHLIB_NAME) && defined(SHLIB) && defined(SHLIB_MAJOR)
19 SHLIB_NAME= lib${SHLIB}.so.${SHLIB_MAJOR}
21 .if defined(SHLIB_NAME) && !empty(SHLIB_NAME:M*.so.*)
22 SHLIB_LINK?= ${SHLIB_NAME:R}
24 SONAME?= ${SHLIB_NAME}
27 .if defined(CRUNCH_CFLAGS)
28 CFLAGS+= ${CRUNCH_CFLAGS}
31 .if ${MK_ASSERT_DEBUG} == "no"
36 # Enable CTF conversion on request.
41 .if defined(DEBUG_FLAGS)
42 CFLAGS+= ${DEBUG_FLAGS}
44 .if !defined(NO_CTF) && (${DEBUG_FLAGS:M-g} != "")
49 .if !defined(DEBUG_FLAGS)
53 .include <bsd.libnames.mk>
55 # prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
56 # .So used for PIC object files
58 .SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .m .C .f .y .l .ln
61 .if ${MACHINE_CPUARCH} == "sparc64"
75 ${CC} ${PO_FLAG} ${PO_CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
76 @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
79 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
80 @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
82 .cc.po .C.po .cpp.po .cxx.po:
83 ${CXX} ${PO_FLAG} ${PO_CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
85 .cc.So .C.So .cpp.So .cxx.So:
86 ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
89 ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
90 @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
93 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
94 @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
97 ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
98 @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
101 ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
102 @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
105 ${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
106 @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
109 ${CC} -x assembler-with-cpp -DPROF ${PO_CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
110 @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
113 ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \
114 -c ${.IMPSRC} -o ${.TARGET}
115 @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
118 ${CC} -DPROF ${PO_CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
119 @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
122 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
123 @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
127 .include <bsd.symver.mk>
129 # Allow libraries to specify their own version map or have it
130 # automatically generated (see bsd.symver.mk above).
131 .if ${MK_SYMVER} == "yes" && !empty(VERSION_MAP)
132 ${SHLIB_NAME}: ${VERSION_MAP}
133 LDFLAGS+= -Wl,--version-script=${VERSION_MAP}
136 .if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME)
137 OBJS+= ${SRCS:N*.h:R:S/$/.o/}
140 .if defined(LIB) && !empty(LIB)
143 lib${LIB}.a: ${OBJS} ${STATICOBJS}
144 @${ECHO} building static ${LIB} library
147 @${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
149 @${AR} cq ${.TARGET} `NM='${NM}' lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
154 .if !defined(INTERNALLIB)
156 .if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
157 _LIBS+= lib${LIB}_p.a
158 POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po}
160 lib${LIB}_p.a: ${POBJS}
161 @${ECHO} building profiled ${LIB} library
164 @${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
166 @${AR} cq ${.TARGET} `NM='${NM}' lorder ${POBJS} | tsort -q` ${ARADD}
171 .if defined(SHLIB_NAME) || \
172 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
173 SOBJS+= ${OBJS:.o=.So}
176 .if defined(SHLIB_NAME)
177 _LIBS+= ${SHLIB_NAME}
179 ${SHLIB_NAME}: ${SOBJS}
180 @${ECHO} building shared library ${SHLIB_NAME}
181 @rm -f ${.TARGET} ${SHLIB_LINK}
182 .if defined(SHLIB_LINK)
183 @ln -fs ${.TARGET} ${SHLIB_LINK}
186 @${CC} ${LDFLAGS} ${SSP_CFLAGS} -shared -Wl,-x \
187 -o ${.TARGET} -Wl,-soname,${SONAME} \
188 `lorder ${SOBJS} | tsort -q` ${LDADD}
190 @${CC} ${LDFLAGS} ${SSP_CFLAGS} -shared -Wl,-x \
191 -o ${.TARGET} -Wl,-soname,${SONAME} \
192 `NM='${NM}' lorder ${SOBJS} | tsort -q` ${LDADD}
194 @[ -z "${CTFMERGE}" -o -n "${NO_CTF}" ] || ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SOBJS}
197 .if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
198 _LIBS+= lib${LIB}_pic.a
200 lib${LIB}_pic.a: ${SOBJS}
201 @${ECHO} building special pic ${LIB} library
203 @${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
207 .if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
208 LINTLIB= llib-l${LIB}.ln
210 LINTOBJS+= ${SRCS:M*.c:.c=.ln}
212 ${LINTLIB}: ${LINTOBJS}
213 @${ECHO} building lint library ${.TARGET}
215 ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
218 .endif # !defined(INTERNALLIB)
222 .if ${MK_MAN} != "no"
228 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
230 mv $$TMP ${DEPENDFILE}
231 .if !defined(NO_EXTRADEPEND) && defined(SHLIB_NAME)
232 .if defined(DPADD) && !empty(DPADD)
233 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
239 .if defined(PRECIOUSLIB)
240 .if !defined(NO_FSCHG)
241 SHLINSTALLFLAGS+= -fschg
246 _INSTALLFLAGS:= ${INSTALLFLAGS}
247 .for ie in ${INSTALLFLAGS_EDIT}
248 _INSTALLFLAGS:= ${_INSTALLFLAGS${ie}}
250 _SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS}
251 .for ie in ${INSTALLFLAGS_EDIT}
252 _SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}}
255 .if !defined(INTERNALLIB)
256 realinstall: _libinstall
257 .ORDER: beforeinstall _libinstall
259 .if defined(LIB) && !empty(LIB) && ${MK_INSTALLLIB} != "no"
260 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
261 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
263 .if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
264 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
265 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
267 .if defined(SHLIB_NAME)
268 ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
269 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
270 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
271 .if defined(SHLIB_LINK)
272 .if ${SHLIBDIR} == ${LIBDIR}
273 ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
275 ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
276 ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
277 .if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME})
278 -chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
279 rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
284 .if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
285 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
286 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
288 .if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
289 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
290 ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
292 .endif # !defined(INTERNALLIB)
294 .include <bsd.nls.mk>
295 .include <bsd.files.mk>
296 .include <bsd.incs.mk>
297 .include <bsd.links.mk>
299 .if ${MK_MAN} != "no"
300 realinstall: _maninstall
301 .ORDER: beforeinstall _maninstall
308 ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
311 .if ${MK_MAN} != "no"
312 .include <bsd.man.mk>
315 .include <bsd.dep.mk>
317 .if !exists(${.OBJDIR}/${DEPENDFILE})
318 .if defined(LIB) && !empty(LIB)
319 ${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h}
320 .for _S in ${SRCS:N*.[hly]}
324 .if defined(SHLIB_NAME) || \
325 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
326 ${SOBJS}: ${SRCS:M*.h}
327 .for _S in ${SRCS:N*.[hly]}
335 .if defined(CLEANFILES) && !empty(CLEANFILES)
338 .if defined(LIB) && !empty(LIB)
339 rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
341 .if !defined(INTERNALLIB)
342 .if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
343 rm -f ${POBJS} ${POBJS:S/$/.tmp/}
345 .if defined(SHLIB_NAME) || \
346 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
347 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
349 .if defined(SHLIB_NAME)
350 .if defined(SHLIB_LINK)
353 .if defined(LIB) && !empty(LIB)
354 rm -f lib${LIB}.so.* lib${LIB}.so
357 .if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
360 .endif # !defined(INTERNALLIB)
361 .if defined(_LIBS) && !empty(_LIBS)
364 .if defined(CLEANDIRS) && !empty(CLEANDIRS)
367 .if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS)
372 .include <bsd.obj.mk>
374 .include <bsd.sys.mk>