13585b293SGarrett Wollman# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 27f3dea24SPeter Wemm# $FreeBSD$ 33585b293SGarrett Wollman# 4afe61c15SRodney W. Grimes 52bdaf7e8SRuslan Ermilov.include <bsd.init.mk> 6afe61c15SRodney W. Grimes 7f67eb0dcSJohn Polstra# Set up the variables controlling shared libraries. After this section, 8f67eb0dcSJohn Polstra# SHLIB_NAME will be defined only if we are to create a shared library. 9f67eb0dcSJohn Polstra# SHLIB_LINK will be defined only if we are to create a link to it. 10f67eb0dcSJohn Polstra# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive. 11f67eb0dcSJohn Polstra.if defined(NOPIC) 12f67eb0dcSJohn Polstra.undef SHLIB_NAME 13f67eb0dcSJohn Polstra.undef INSTALL_PIC_ARCHIVE 14f67eb0dcSJohn Polstra.else 154d7d5e7cSRuslan Ermilov.if !defined(SHLIB_NAME) && defined(LIB) && defined(SHLIB_MAJOR) 16f67eb0dcSJohn PolstraSHLIB_NAME= lib${LIB}.so.${SHLIB_MAJOR} 1742c0ad02SRuslan Ermilov.endif 185113446aSRuslan Ermilov.if defined(SHLIB_NAME) && ${SHLIB_NAME:M*.so.*} 1942c0ad02SRuslan ErmilovSHLIB_LINK?= ${SHLIB_NAME:R} 20f67eb0dcSJohn Polstra.endif 21f67eb0dcSJohn PolstraSONAME?= ${SHLIB_NAME} 22e782d0b5SPeter Wemm.endif 23e782d0b5SPeter Wemm 2441f89315SRuslan Ermilov.if defined(CRUNCH_CFLAGS) 253c9b8563SGordon TetlowCFLAGS+= ${CRUNCH_CFLAGS} 2641f89315SRuslan Ermilov.endif 273c9b8563SGordon Tetlow 28e82b0b99SJordan K. Hubbard.if defined(DEBUG_FLAGS) 29e82b0b99SJordan K. HubbardCFLAGS+= ${DEBUG_FLAGS} 30e82b0b99SJordan K. Hubbard.endif 31e82b0b99SJordan K. Hubbard 32e82b0b99SJordan K. Hubbard.if !defined(DEBUG_FLAGS) 33afe61c15SRodney W. GrimesSTRIP?= -s 34e82b0b99SJordan K. Hubbard.endif 35afe61c15SRodney W. Grimes 361a5ed802SBruce Evans.include <bsd.libnames.mk> 371a5ed802SBruce Evans 38afe61c15SRodney W. Grimes# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 39f92bdbd0SJohn Polstra# .So used for PIC object files 40afe61c15SRodney W. Grimes.SUFFIXES: 41d58e932fSRuslan Ermilov.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .m .C .f .y .l .ln 42766f7d6eSMark Murray 432a53f3fbSRuslan Ermilov.if !defined(PICFLAG) 442a53f3fbSRuslan Ermilov.if ${MACHINE_ARCH} == "sparc64" 452a53f3fbSRuslan ErmilovPICFLAG=-fPIC 462a53f3fbSRuslan Ermilov.else 472a53f3fbSRuslan ErmilovPICFLAG=-fpic 482a53f3fbSRuslan Ermilov.endif 492a53f3fbSRuslan Ermilov.endif 502a53f3fbSRuslan Ermilov 51afe61c15SRodney W. Grimes.c.po: 529c8ff5b5SJohn Polstra ${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 53afe61c15SRodney W. Grimes 54f92bdbd0SJohn Polstra.c.So: 553585b293SGarrett Wollman ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 563585b293SGarrett Wollman 57c7cbe79eSDmitrij Tejblum.cc.po .C.po .cpp.po .cxx.po: 589c8ff5b5SJohn Polstra ${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 593585b293SGarrett Wollman 60f92bdbd0SJohn Polstra.cc.So .C.So .cpp.So .cxx.So: 613585b293SGarrett Wollman ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 623585b293SGarrett Wollman 633585b293SGarrett Wollman.f.po: 649c8ff5b5SJohn Polstra ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 653585b293SGarrett Wollman 66f92bdbd0SJohn Polstra.f.So: 673585b293SGarrett Wollman ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 683585b293SGarrett Wollman 6970a6e331SBruce Evans.m.po: 7070a6e331SBruce Evans ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} 7170a6e331SBruce Evans 72f92bdbd0SJohn Polstra.m.So: 7370a6e331SBruce Evans ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 7470a6e331SBruce Evans 75d58e932fSRuslan Ermilov.s.po .s.So: 76f79d11b7SRuslan Ermilov ${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC} 773585b293SGarrett Wollman 78d58e932fSRuslan Ermilov.asm.po: 79d58e932fSRuslan Ermilov ${CC} -x assembler-with-cpp -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 80d58e932fSRuslan Ermilov 81d58e932fSRuslan Ermilov.asm.So: 82d58e932fSRuslan Ermilov ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ 83d58e932fSRuslan Ermilov -c ${.IMPSRC} -o ${.TARGET} 84d58e932fSRuslan Ermilov 853585b293SGarrett Wollman.S.po: 86a51613b6SRuslan Ermilov ${CC} -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 873585b293SGarrett Wollman 88f92bdbd0SJohn Polstra.S.So: 89a51613b6SRuslan Ermilov ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 903585b293SGarrett Wollman 912a53f3fbSRuslan Ermilovall: objwarn 922a53f3fbSRuslan Ermilov 934d7d5e7cSRuslan Ermilov.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 944d7d5e7cSRuslan ErmilovOBJS+= ${SRCS:N*.h:R:S/$/.o/} 954d7d5e7cSRuslan Ermilov.endif 964d7d5e7cSRuslan Ermilov 972a53f3fbSRuslan Ermilov.if defined(LIB) && !empty(LIB) 985aa23756SDavid E. O'Brien_LIBS= lib${LIB}.a 99afe61c15SRodney W. Grimes 1002a53f3fbSRuslan Ermilovlib${LIB}.a: ${OBJS} ${STATICOBJS} 101f45b036fSPeter Wemm @${ECHO} building static ${LIB} library 1022a53f3fbSRuslan Ermilov @rm -f ${.TARGET} 1032a53f3fbSRuslan Ermilov @${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 1042a53f3fbSRuslan Ermilov ${RANLIB} ${.TARGET} 1054d7d5e7cSRuslan Ermilov.endif 106afe61c15SRodney W. Grimes 1072a53f3fbSRuslan Ermilov.if !defined(INTERNALLIB) 1082a53f3fbSRuslan Ermilov 1094d7d5e7cSRuslan Ermilov.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 1102a53f3fbSRuslan Ermilov_LIBS+= lib${LIB}_p.a 1112a53f3fbSRuslan ErmilovPOBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 1122a53f3fbSRuslan Ermilov 1132a53f3fbSRuslan Ermilovlib${LIB}_p.a: ${POBJS} 11480c02d59SBruce Evans @${ECHO} building profiled ${LIB} library 1152a53f3fbSRuslan Ermilov @rm -f ${.TARGET} 1162a53f3fbSRuslan Ermilov @${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 1172a53f3fbSRuslan Ermilov ${RANLIB} ${.TARGET} 11886af0db9SBruce Evans.endif 1193585b293SGarrett Wollman 1204d7d5e7cSRuslan Ermilov.if defined(SHLIB_NAME) || \ 1214d7d5e7cSRuslan Ermilov defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 122f92bdbd0SJohn PolstraSOBJS+= ${OBJS:.o=.So} 1234d7d5e7cSRuslan Ermilov.endif 1248c05a446SPeter Wemm 125f67eb0dcSJohn Polstra.if defined(SHLIB_NAME) 1262a53f3fbSRuslan Ermilov_LIBS+= ${SHLIB_NAME} 1272a53f3fbSRuslan Ermilov 128f67eb0dcSJohn Polstra${SHLIB_NAME}: ${SOBJS} 129f67eb0dcSJohn Polstra @${ECHO} building shared library ${SHLIB_NAME} 1302a53f3fbSRuslan Ermilov @rm -f ${.TARGET} ${SHLIB_LINK} 131f67eb0dcSJohn Polstra.if defined(SHLIB_LINK) 1322a53f3fbSRuslan Ermilov @ln -fs ${.TARGET} ${SHLIB_LINK} 133f67eb0dcSJohn Polstra.endif 134e20b0b73SDavid E. O'Brien @${CC} ${LDFLAGS} -shared -Wl,-x \ 1352a53f3fbSRuslan Ermilov -o ${.TARGET} -Wl,-soname,${SONAME} \ 136ea5c0da9SRuslan Ermilov `lorder ${SOBJS} | tsort -q` ${LDADD} 1378c05a446SPeter Wemm.endif 1383585b293SGarrett Wollman 1394d7d5e7cSRuslan Ermilov.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 1402a53f3fbSRuslan Ermilov_LIBS+= lib${LIB}_pic.a 1412a53f3fbSRuslan Ermilov 1422a53f3fbSRuslan Ermilovlib${LIB}_pic.a: ${SOBJS} 14380c02d59SBruce Evans @${ECHO} building special pic ${LIB} library 1442a53f3fbSRuslan Ermilov @rm -f ${.TARGET} 1452a53f3fbSRuslan Ermilov @${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 1462a53f3fbSRuslan Ermilov ${RANLIB} ${.TARGET} 14786af0db9SBruce Evans.endif 148afe61c15SRodney W. Grimes 1495741a42fSMark Murray.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB) 1502a53f3fbSRuslan ErmilovLINTLIB= llib-l${LIB}.ln 1512a53f3fbSRuslan Ermilov_LIBS+= ${LINTLIB} 1522a53f3fbSRuslan ErmilovLINTOBJS+= ${SRCS:M*.c:.c=.ln} 1532a53f3fbSRuslan Ermilov 154766f7d6eSMark Murray${LINTLIB}: ${LINTOBJS} 1552a53f3fbSRuslan Ermilov @${ECHO} building lint library ${.TARGET} 1562a53f3fbSRuslan Ermilov @rm -f ${.TARGET} 157766f7d6eSMark Murray ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 158766f7d6eSMark Murray.endif 159afe61c15SRodney W. Grimes 1602a53f3fbSRuslan Ermilov.endif !defined(INTERNALLIB) 1612a53f3fbSRuslan Ermilov 1622a53f3fbSRuslan Ermilovall: ${_LIBS} 1632a53f3fbSRuslan Ermilov 1642a53f3fbSRuslan Ermilov.if !defined(NOMAN) 1652a53f3fbSRuslan Ermilovall: _manpages 166afe61c15SRodney W. Grimes.endif 167afe61c15SRodney W. Grimes 168fcccc50bSBruce Evans_EXTRADEPEND: 169663e9677SBruce Evans @TMP=_depend$$$$; \ 170f92bdbd0SJohn Polstra sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 171663e9677SBruce Evans > $$TMP; \ 172663e9677SBruce Evans mv $$TMP ${DEPENDFILE} 173f67eb0dcSJohn Polstra.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 174e3ace70eSBruce Evans.if defined(DPADD) && !empty(DPADD) 175f67eb0dcSJohn Polstra echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 1768c05a446SPeter Wemm.endif 1778c05a446SPeter Wemm.endif 178afe61c15SRodney W. Grimes 179afe61c15SRodney W. Grimes.if !target(install) 180afe61c15SRodney W. Grimes 1810099533aSJohn-Mark Gurney.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 182c59ae063SGarrett WollmanSHLINSTALLFLAGS+= -fschg 183c59ae063SGarrett Wollman.endif 184c59ae063SGarrett Wollman 185e902c1bbSTim Vanderhoek_INSTALLFLAGS:= ${INSTALLFLAGS} 186e902c1bbSTim Vanderhoek.for ie in ${INSTALLFLAGS_EDIT} 187e902c1bbSTim Vanderhoek_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 188e902c1bbSTim Vanderhoek.endfor 1891a66233dSRuslan Ermilov_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 190e902c1bbSTim Vanderhoek.for ie in ${INSTALLFLAGS_EDIT} 191e902c1bbSTim Vanderhoek_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 192e902c1bbSTim Vanderhoek.endfor 193e902c1bbSTim Vanderhoek 1944d7d5e7cSRuslan Ermilov.if !defined(INTERNALLIB) 195b25a566dSRuslan Ermilovrealinstall: _libinstall 196badb7c1cSRuslan Ermilov.ORDER: beforeinstall _libinstall 197b25a566dSRuslan Ermilov_libinstall: 1984d7d5e7cSRuslan Ermilov.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB) 1998fd9852bSDag-Erling Smørgrav ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 200e902c1bbSTim Vanderhoek ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 2012a53f3fbSRuslan Ermilov.endif 2024d7d5e7cSRuslan Ermilov.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 2038fd9852bSDag-Erling Smørgrav ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 204e902c1bbSTim Vanderhoek ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 205afe61c15SRodney W. Grimes.endif 206a89bd620SDavid E. O'Brien.if defined(SHLIB_NAME) 207d2893b16SRuslan Ermilov ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 208e902c1bbSTim Vanderhoek ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 209f67eb0dcSJohn Polstra ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 210f67eb0dcSJohn Polstra.if defined(SHLIB_LINK) 211be01c222SRuslan Ermilov.if ${SHLIBDIR} == ${LIBDIR} 212be01c222SRuslan Ermilov ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 213be01c222SRuslan Ermilov.else 214be01c222SRuslan Ermilov ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \ 215eb7f25e1SPeter Wemm ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 216be01c222SRuslan Ermilov.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME}) 217be01c222SRuslan Ermilov -chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 218be01c222SRuslan Ermilov rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 219be01c222SRuslan Ermilov.endif 220eb7f25e1SPeter Wemm.endif 2218c05a446SPeter Wemm.endif 2228c05a446SPeter Wemm.endif 2234d7d5e7cSRuslan Ermilov.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 224d2893b16SRuslan Ermilov ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 225e902c1bbSTim Vanderhoek ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 2263585b293SGarrett Wollman.endif 2275741a42fSMark Murray.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB) 228d2893b16SRuslan Ermilov ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 229c7b111cbSRuslan Ermilov ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR} 230c7b111cbSRuslan Ermilov.endif 2314d7d5e7cSRuslan Ermilov.endif !defined(INTERNALLIB) 232c7b111cbSRuslan Ermilov 233af2dc868SRuslan Ermilov.include <bsd.files.mk> 2345d862037SRuslan Ermilov.include <bsd.incs.mk> 23584f94a79SRuslan Ermilov.include <bsd.links.mk> 236afe61c15SRodney W. Grimes 237b90dab70SRuslan Ermilov.if !defined(NOMAN) 238afeaaa84SRuslan Ermilovrealinstall: _maninstall 239badb7c1cSRuslan Ermilov.ORDER: beforeinstall _maninstall 240b90dab70SRuslan Ermilov.endif 241b90dab70SRuslan Ermilov 242afe61c15SRodney W. Grimes.endif 243afe61c15SRodney W. Grimes 244afe61c15SRodney W. Grimes.if !target(lint) 245b25a566dSRuslan Ermilovlint: ${SRCS:M*.c} 2465741a42fSMark Murray ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 247afe61c15SRodney W. Grimes.endif 248afe61c15SRodney W. Grimes 2493585b293SGarrett Wollman.if !defined(NOMAN) 250afe61c15SRodney W. Grimes.include <bsd.man.mk> 251918fb560SRuslan Ermilov.endif 2523585b293SGarrett Wollman 2533585b293SGarrett Wollman.include <bsd.dep.mk> 25414172e46SBruce Evans 25588505e11SRuslan Ermilov.if !exists(${.OBJDIR}/${DEPENDFILE}) 2564d7d5e7cSRuslan Ermilov.if defined(LIB) && !empty(LIB) 2574d7d5e7cSRuslan Ermilov${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 2584d7d5e7cSRuslan Ermilov.endif 2594d7d5e7cSRuslan Ermilov.if defined(SHLIB_NAME) || \ 2604d7d5e7cSRuslan Ermilov defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 2614d7d5e7cSRuslan Ermilov${SOBJS}: ${SRCS:M*.h} 26214172e46SBruce Evans.endif 2632a53f3fbSRuslan Ermilov.endif 26414172e46SBruce Evans 265397304feSRuslan Ermilov.if !target(clean) 266397304feSRuslan Ermilovclean: 267397304feSRuslan Ermilov.if defined(CLEANFILES) && !empty(CLEANFILES) 268397304feSRuslan Ermilov rm -f ${CLEANFILES} 269397304feSRuslan Ermilov.endif 270397304feSRuslan Ermilov.if defined(LIB) && !empty(LIB) 271397304feSRuslan Ermilov rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 272397304feSRuslan Ermilov.endif 273397304feSRuslan Ermilov.if !defined(INTERNALLIB) 274397304feSRuslan Ermilov.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 275397304feSRuslan Ermilov rm -f ${POBJS} ${POBJS:S/$/.tmp/} 276397304feSRuslan Ermilov.endif 277397304feSRuslan Ermilov.if defined(SHLIB_NAME) || \ 278397304feSRuslan Ermilov defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 279397304feSRuslan Ermilov rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 280397304feSRuslan Ermilov.endif 281397304feSRuslan Ermilov.if defined(SHLIB_NAME) 282397304feSRuslan Ermilov.if defined(SHLIB_LINK) 283397304feSRuslan Ermilov rm -f ${SHLIB_LINK} 284397304feSRuslan Ermilov.endif 285397304feSRuslan Ermilov.if defined(LIB) && !empty(LIB) 286397304feSRuslan Ermilov rm -f lib${LIB}.so.* lib${LIB}.so 287397304feSRuslan Ermilov.endif 288397304feSRuslan Ermilov.endif 289397304feSRuslan Ermilov.if defined(WANT_LINT) && defined(LIB) && !empty(LIB) 290397304feSRuslan Ermilov rm -f ${LINTOBJS} 291397304feSRuslan Ermilov.endif 292397304feSRuslan Ermilov.endif !defined(INTERNALLIB) 293397304feSRuslan Ermilov.if defined(_LIBS) && !empty(_LIBS) 294397304feSRuslan Ermilov rm -f ${_LIBS} 295397304feSRuslan Ermilov.endif 296397304feSRuslan Ermilov.if defined(CLEANDIRS) && !empty(CLEANDIRS) 297397304feSRuslan Ermilov rm -rf ${CLEANDIRS} 298397304feSRuslan Ermilov.endif 299397304feSRuslan Ermilov.endif 300397304feSRuslan Ermilov 301cd9a2f5cSJordan K. Hubbard.include <bsd.obj.mk> 302d510ecb4SKris Kennaway 303d510ecb4SKris Kennaway.include <bsd.sys.mk> 304