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