bsd.lib.mk revision 162293
11844Swollman# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 250476Speter# $FreeBSD: head/share/mk/bsd.lib.mk 162293 2006-09-13 23:27:21Z obrien $ 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} 157161627Simp @${AR} cq ${.TARGET} `env NM=${NM} lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 15896512Sru ${RANLIB} ${.TARGET} 15999362Sru.endif 1601638Srgrimes 16196512Sru.if !defined(INTERNALLIB) 16295114Sobrien 163156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 16496512Sru_LIBS+= lib${LIB}_p.a 16596512SruPOBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 16695306Sru 16796512Srulib${LIB}_p.a: ${POBJS} 16896512Sru @${ECHO} building profiled ${LIB} library 16996512Sru @rm -f ${.TARGET} 170161627Simp @${AR} cq ${.TARGET} `env NM=${NM} lorder ${POBJS} | tsort -q` ${ARADD} 17196512Sru ${RANLIB} ${.TARGET} 17274805Sru.endif 1731844Swollman 17499362Sru.if defined(SHLIB_NAME) || \ 17599362Sru defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 17696512SruSOBJS+= ${OBJS:.o=.So} 17799362Sru.endif 1781844Swollman 17996512Sru.if defined(SHLIB_NAME) 18096512Sru_LIBS+= ${SHLIB_NAME} 1811638Srgrimes 18242915Sjdp${SHLIB_NAME}: ${SOBJS} 18342915Sjdp @${ECHO} building shared library ${SHLIB_NAME} 18496512Sru @rm -f ${.TARGET} ${SHLIB_LINK} 18542915Sjdp.if defined(SHLIB_LINK) 18696512Sru @ln -fs ${.TARGET} ${SHLIB_LINK} 18742915Sjdp.endif 18896343Sobrien @${CC} ${LDFLAGS} -shared -Wl,-x \ 18996512Sru -o ${.TARGET} -Wl,-soname,${SONAME} \ 190161627Simp `env NM=${NM} lorder ${SOBJS} | tsort -q` ${LDADD} 19128945Speter.endif 1921844Swollman 193156813Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no" 19496512Sru_LIBS+= lib${LIB}_pic.a 19596512Sru 19696512Srulib${LIB}_pic.a: ${SOBJS} 1972353Sbde @${ECHO} building special pic ${LIB} library 19896512Sru @rm -f ${.TARGET} 19996512Sru @${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 20096512Sru ${RANLIB} ${.TARGET} 2013859Sbde.endif 2021844Swollman 203139106Sru.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB) 20496512SruLINTLIB= llib-l${LIB}.ln 20596512Sru_LIBS+= ${LINTLIB} 20696512SruLINTOBJS+= ${SRCS:M*.c:.c=.ln} 20796512Sru 20892491Smarkm${LINTLIB}: ${LINTOBJS} 20996512Sru @${ECHO} building lint library ${.TARGET} 21096512Sru @rm -f ${.TARGET} 21192491Smarkm ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 21292491Smarkm.endif 2131638Srgrimes 214144893Sharti.endif # !defined(INTERNALLIB) 21596512Sru 21696512Sruall: ${_LIBS} 21796512Sru 218156813Sru.if ${MK_MAN} != "no" 21996512Sruall: _manpages 2201638Srgrimes.endif 2211638Srgrimes 22234179Sbde_EXTRADEPEND: 22324750Sbde @TMP=_depend$$$$; \ 22442450Sjdp sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 22524750Sbde > $$TMP; \ 22624750Sbde mv $$TMP ${DEPENDFILE} 227139107Sru.if !defined(NO_EXTRADEPEND) && defined(SHLIB_NAME) 22831809Sbde.if defined(DPADD) && !empty(DPADD) 22942915Sjdp echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 23027910Sasami.endif 23128945Speter.endif 2321638Srgrimes 2331638Srgrimes.if !target(install) 2341638Srgrimes 235136019Sru.if defined(PRECIOUSLIB) 236139111Sru.if !defined(NO_FSCHG) 2372298SwollmanSHLINSTALLFLAGS+= -fschg 2382298Swollman.endif 239136019SruSHLINSTALLFLAGS+= -S 240136019Sru.endif 2412298Swollman 24249328Shoek_INSTALLFLAGS:= ${INSTALLFLAGS} 24349328Shoek.for ie in ${INSTALLFLAGS_EDIT} 24449328Shoek_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 24549328Shoek.endfor 24656971Sru_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 24749328Shoek.for ie in ${INSTALLFLAGS_EDIT} 24849328Shoek_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 24949328Shoek.endfor 25049328Shoek 25199362Sru.if !defined(INTERNALLIB) 25295306Srurealinstall: _libinstall 25399343Sru.ORDER: beforeinstall _libinstall 25495306Sru_libinstall: 255139110Sru.if defined(LIB) && !empty(LIB) && !defined(NO_INSTALLLIB) 25692980Sdes ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 25749328Shoek ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 25896512Sru.endif 259156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 26092980Sdes ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 26149328Shoek ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 2621638Srgrimes.endif 263116144Sobrien.if defined(SHLIB_NAME) 264100872Sru ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 26549328Shoek ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 26642915Sjdp ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 26742915Sjdp.if defined(SHLIB_LINK) 268119846Sru.if ${SHLIBDIR} == ${LIBDIR} 269119846Sru ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 270119846Sru.else 271119846Sru ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \ 272119730Speter ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 273119846Sru.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME}) 274119846Sru -chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 275119846Sru rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 2761844Swollman.endif 27728945Speter.endif 278119730Speter.endif 279119846Sru.endif 280156813Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no" 281100872Sru ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 28249328Shoek ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 2831844Swollman.endif 284139106Sru.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB) 285100872Sru ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 28696462Sru ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR} 28796462Sru.endif 288144893Sharti.endif # !defined(INTERNALLIB) 28996462Sru 290141503Sphantom.include <bsd.nls.mk> 29197769Sru.include <bsd.files.mk> 29296668Sru.include <bsd.incs.mk> 29399256Sru.include <bsd.links.mk> 29496462Sru 295156813Sru.if ${MK_MAN} != "no" 29696164Srurealinstall: _maninstall 29799343Sru.ORDER: beforeinstall _maninstall 29896162Sru.endif 29996162Sru 3001638Srgrimes.endif 3011638Srgrimes 3021638Srgrimes.if !target(lint) 30395306Srulint: ${SRCS:M*.c} 304103713Smarkm ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 3051638Srgrimes.endif 3061638Srgrimes 307156813Sru.if ${MK_MAN} != "no" 3081638Srgrimes.include <bsd.man.mk> 30974842Sru.endif 3101844Swollman 3111844Swollman.include <bsd.dep.mk> 31234092Sbde 31399362Sru.if !exists(${.OBJDIR}/${DEPENDFILE}) 31496512Sru.if defined(LIB) && !empty(LIB) 31599362Sru${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 316124637Sru.for _S in ${SRCS:N*.[hly]} 317124637Sru${_S:R}.po: ${_S} 318124637Sru.endfor 31934092Sbde.endif 32099362Sru.if defined(SHLIB_NAME) || \ 32199362Sru defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 32299362Sru${SOBJS}: ${SRCS:M*.h} 323124637Sru.for _S in ${SRCS:N*.[hly]} 324124637Sru${_S:R}.So: ${_S} 325124637Sru.endfor 32696512Sru.endif 32799362Sru.endif 32834092Sbde 329100457Sru.if !target(clean) 330100457Sruclean: 331100457Sru.if defined(CLEANFILES) && !empty(CLEANFILES) 332100457Sru rm -f ${CLEANFILES} 333100457Sru.endif 334100457Sru.if defined(LIB) && !empty(LIB) 335100457Sru rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 336100457Sru.endif 337100457Sru.if !defined(INTERNALLIB) 338156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 339100457Sru rm -f ${POBJS} ${POBJS:S/$/.tmp/} 340100457Sru.endif 341100457Sru.if defined(SHLIB_NAME) || \ 342100457Sru defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 343100457Sru rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 344100457Sru.endif 345100457Sru.if defined(SHLIB_NAME) 346100457Sru.if defined(SHLIB_LINK) 347100457Sru rm -f ${SHLIB_LINK} 348100457Sru.endif 349100457Sru.if defined(LIB) && !empty(LIB) 350100457Sru rm -f lib${LIB}.so.* lib${LIB}.so 351100457Sru.endif 352100457Sru.endif 353100457Sru.if defined(WANT_LINT) && defined(LIB) && !empty(LIB) 354100457Sru rm -f ${LINTOBJS} 355100457Sru.endif 356144893Sharti.endif # !defined(INTERNALLIB) 357100457Sru.if defined(_LIBS) && !empty(_LIBS) 358100457Sru rm -f ${_LIBS} 359100457Sru.endif 360100457Sru.if defined(CLEANDIRS) && !empty(CLEANDIRS) 361100457Sru rm -rf ${CLEANDIRS} 362100457Sru.endif 363157054Sdes.if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS) 364157054Sdes rm -f ${VERSION_MAP} 365100457Sru.endif 366157054Sdes.endif 367100457Sru 36816663Sjkh.include <bsd.obj.mk> 36976861Skris 37076861Skris.include <bsd.sys.mk> 371