bsd.lib.mk revision 248350
11844Swollman# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 250476Speter# $FreeBSD: stable/9/share/mk/bsd.lib.mk 248350 2013-03-15 20:34:10Z brooks $ 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} 38179184Sjb 39241711Sjhb.if ${MK_CTF} != "no" && ${DEBUG_FLAGS:M-g} != "" 40179184SjbCTFFLAGS+= -g 412827Sjkh.endif 42179184Sjb.endif 432827Sjkh 442827Sjkh.if !defined(DEBUG_FLAGS) 451638SrgrimesSTRIP?= -s 462827Sjkh.endif 471638Srgrimes 4818529Sbde.include <bsd.libnames.mk> 4918529Sbde 501638Srgrimes# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 5142450Sjdp# .So used for PIC object files 521638Srgrimes.SUFFIXES: 53220755Sdim.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .C .f .y .l .ln 541638Srgrimes 5596512Sru.if !defined(PICFLAG) 56211725Simp.if ${MACHINE_CPUARCH} == "sparc64" 5796512SruPICFLAG=-fPIC 5896512Sru.else 5996512SruPICFLAG=-fpic 6096512Sru.endif 6196512Sru.endif 6296512Sru 63126890StrhodesPO_FLAG=-pg 64126890Strhodes 65236114Sdes.c.o: 66236114Sdes ${CC} ${STATIC_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 67241711Sjhb ${CTFCONVERT_CMD} 68236114Sdes 691638Srgrimes.c.po: 70236114Sdes ${CC} ${PO_FLAG} ${STATIC_CFLAGS} ${PO_CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 71241711Sjhb ${CTFCONVERT_CMD} 721638Srgrimes 7342450Sjdp.c.So: 74236114Sdes ${CC} ${PICFLAG} -DPIC ${SHARED_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 75241711Sjhb ${CTFCONVERT_CMD} 761844Swollman 77237814Sdim.cc.o .C.o .cpp.o .cxx.o: 78236114Sdes ${CXX} ${STATIC_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 79236114Sdes 8036673Sdt.cc.po .C.po .cpp.po .cxx.po: 81236114Sdes ${CXX} ${PO_FLAG} ${STATIC_CXXFLAGS} ${PO_CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 821844Swollman 8342450Sjdp.cc.So .C.So .cpp.So .cxx.So: 84236114Sdes ${CXX} ${PICFLAG} -DPIC ${SHARED_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 851844Swollman 861844Swollman.f.po: 87127027Strhodes ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 88241711Sjhb ${CTFCONVERT_CMD} 891844Swollman 9042450Sjdp.f.So: 911844Swollman ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 92241711Sjhb ${CTFCONVERT_CMD} 931844Swollman 94117173Sru.s.po .s.So: 95117159Sru ${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC} 96241711Sjhb ${CTFCONVERT_CMD} 971638Srgrimes 98117173Sru.asm.po: 99217100Skib ${CC} -x assembler-with-cpp -DPROF ${PO_CFLAGS} ${ACFLAGS} \ 100217100Skib -c ${.IMPSRC} -o ${.TARGET} 101241711Sjhb ${CTFCONVERT_CMD} 102117173Sru 103117173Sru.asm.So: 104217100Skib ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} ${ACFLAGS} \ 105117173Sru -c ${.IMPSRC} -o ${.TARGET} 106241711Sjhb ${CTFCONVERT_CMD} 107117173Sru 1081844Swollman.S.po: 109217100Skib ${CC} -DPROF ${PO_CFLAGS} ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET} 110241711Sjhb ${CTFCONVERT_CMD} 1111844Swollman 11242450Sjdp.S.So: 113217100Skib ${CC} ${PICFLAG} -DPIC ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET} 114241711Sjhb ${CTFCONVERT_CMD} 1151844Swollman 11696512Sruall: objwarn 1171638Srgrimes 118168317Skan.include <bsd.symver.mk> 119156772Sdeischen 120178047Skan# Allow libraries to specify their own version map or have it 121168317Skan# automatically generated (see bsd.symver.mk above). 122169822Sru.if ${MK_SYMVER} == "yes" && !empty(VERSION_MAP) 123156772Sdeischen${SHLIB_NAME}: ${VERSION_MAP} 124156772SdeischenLDFLAGS+= -Wl,--version-script=${VERSION_MAP} 125156772Sdeischen.endif 126156772Sdeischen 12799362Sru.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 12899362SruOBJS+= ${SRCS:N*.h:R:S/$/.o/} 12999362Sru.endif 13099362Sru 13196512Sru.if defined(LIB) && !empty(LIB) 13296512Sru_LIBS= lib${LIB}.a 1331638Srgrimes 13496512Srulib${LIB}.a: ${OBJS} ${STATICOBJS} 13596512Sru @${ECHO} building static ${LIB} library 13696512Sru @rm -f ${.TARGET} 137163683Sru.if !defined(NM) 138163683Sru @${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 139163683Sru.else 140163683Sru @${AR} cq ${.TARGET} `NM='${NM}' lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 141163683Sru.endif 14296512Sru ${RANLIB} ${.TARGET} 14399362Sru.endif 1441638Srgrimes 14596512Sru.if !defined(INTERNALLIB) 14695114Sobrien 147156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 14896512Sru_LIBS+= lib${LIB}_p.a 14996512SruPOBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 15095306Sru 15196512Srulib${LIB}_p.a: ${POBJS} 15296512Sru @${ECHO} building profiled ${LIB} library 15396512Sru @rm -f ${.TARGET} 154163683Sru.if !defined(NM) 155163683Sru @${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 156163683Sru.else 157163683Sru @${AR} cq ${.TARGET} `NM='${NM}' lorder ${POBJS} | tsort -q` ${ARADD} 158163683Sru.endif 15996512Sru ${RANLIB} ${.TARGET} 16074805Sru.endif 1611844Swollman 16299362Sru.if defined(SHLIB_NAME) || \ 16399362Sru defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 16496512SruSOBJS+= ${OBJS:.o=.So} 16599362Sru.endif 1661844Swollman 16796512Sru.if defined(SHLIB_NAME) 16896512Sru_LIBS+= ${SHLIB_NAME} 1691638Srgrimes 170229380SkibSOLINKOPTS= -shared -Wl,-x 171229380Skib.if !defined(ALLOW_SHARED_TEXTREL) 172229380SkibSOLINKOPTS+= -Wl,--fatal-warnings -Wl,--warn-shared-textrel 173229380Skib.endif 174229380Skib 175212423Srpaulo.if target(beforelinking) 176212423Srpaulo${SHLIB_NAME}: ${SOBJS} beforelinking 177212423Srpaulo.else 17842915Sjdp${SHLIB_NAME}: ${SOBJS} 179212423Srpaulo.endif 18042915Sjdp @${ECHO} building shared library ${SHLIB_NAME} 18196512Sru @rm -f ${.TARGET} ${SHLIB_LINK} 18242915Sjdp.if defined(SHLIB_LINK) 18396512Sru @ln -fs ${.TARGET} ${SHLIB_LINK} 18442915Sjdp.endif 185163683Sru.if !defined(NM) 186229380Skib @${CC} ${LDFLAGS} ${SSP_CFLAGS} ${SOLINKOPTS} \ 18796512Sru -o ${.TARGET} -Wl,-soname,${SONAME} \ 188163683Sru `lorder ${SOBJS} | tsort -q` ${LDADD} 189163683Sru.else 190229380Skib @${CC} ${LDFLAGS} ${SSP_CFLAGS} ${SOLINKOPTS} \ 191163683Sru -o ${.TARGET} -Wl,-soname,${SONAME} \ 192163683Sru `NM='${NM}' lorder ${SOBJS} | tsort -q` ${LDADD} 19328945Speter.endif 194241711Sjhb.if ${MK_CTF} != "no" 195241711Sjhb ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SOBJS} 196163683Sru.endif 197241711Sjhb.endif 1981844Swollman 199156813Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no" 20096512Sru_LIBS+= lib${LIB}_pic.a 20196512Sru 20296512Srulib${LIB}_pic.a: ${SOBJS} 2032353Sbde @${ECHO} building special pic ${LIB} library 20496512Sru @rm -f ${.TARGET} 20596512Sru @${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 20696512Sru ${RANLIB} ${.TARGET} 2073859Sbde.endif 2081844Swollman 209139106Sru.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB) 21096512SruLINTLIB= llib-l${LIB}.ln 21196512Sru_LIBS+= ${LINTLIB} 21296512SruLINTOBJS+= ${SRCS:M*.c:.c=.ln} 21396512Sru 21492491Smarkm${LINTLIB}: ${LINTOBJS} 21596512Sru @${ECHO} building lint library ${.TARGET} 21696512Sru @rm -f ${.TARGET} 21792491Smarkm ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 21892491Smarkm.endif 2191638Srgrimes 220144893Sharti.endif # !defined(INTERNALLIB) 22196512Sru 22296512Sruall: ${_LIBS} 22396512Sru 224156813Sru.if ${MK_MAN} != "no" 22596512Sruall: _manpages 2261638Srgrimes.endif 2271638Srgrimes 22834179Sbde_EXTRADEPEND: 22924750Sbde @TMP=_depend$$$$; \ 23042450Sjdp sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 23124750Sbde > $$TMP; \ 23224750Sbde mv $$TMP ${DEPENDFILE} 233139107Sru.if !defined(NO_EXTRADEPEND) && defined(SHLIB_NAME) 23431809Sbde.if defined(DPADD) && !empty(DPADD) 23542915Sjdp echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 23627910Sasami.endif 23728945Speter.endif 2381638Srgrimes 2391638Srgrimes.if !target(install) 2401638Srgrimes 241136019Sru.if defined(PRECIOUSLIB) 242139111Sru.if !defined(NO_FSCHG) 2432298SwollmanSHLINSTALLFLAGS+= -fschg 2442298Swollman.endif 245136019SruSHLINSTALLFLAGS+= -S 246136019Sru.endif 2472298Swollman 24849328Shoek_INSTALLFLAGS:= ${INSTALLFLAGS} 24949328Shoek.for ie in ${INSTALLFLAGS_EDIT} 25049328Shoek_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 25149328Shoek.endfor 25256971Sru_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 25349328Shoek.for ie in ${INSTALLFLAGS_EDIT} 25449328Shoek_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 25549328Shoek.endfor 25649328Shoek 25799362Sru.if !defined(INTERNALLIB) 25895306Srurealinstall: _libinstall 25999343Sru.ORDER: beforeinstall _libinstall 26095306Sru_libinstall: 261172832Sru.if defined(LIB) && !empty(LIB) && ${MK_INSTALLLIB} != "no" 26292980Sdes ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 26349328Shoek ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 26496512Sru.endif 265156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 26692980Sdes ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 26749328Shoek ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 2681638Srgrimes.endif 269116144Sobrien.if defined(SHLIB_NAME) 270100872Sru ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 27149328Shoek ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 27242915Sjdp ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 27342915Sjdp.if defined(SHLIB_LINK) 274235534Sjlh# ${_SHLIBDIRPREFIX} and ${_LDSCRIPTROOT} are both needed when cross-building 275235534Sjlh# and when building 32 bits library shims. ${_SHLIBDIRPREFIX} is the directory 276235534Sjlh# prefix where shared objects will be installed. ${_LDSCRIPTROOT} is the 277235534Sjlh# directory prefix that will be used in generated ld(1) scripts. They cannot 278235534Sjlh# be coalesced because of the way ld(1) handles the sysroot prefix (used in the 279235534Sjlh# cross-toolchain): 280235534Sjlh# - 64 bits libs are located under sysroot, so ${_LDSCRIPTROOT} must be empty. 281235534Sjlh# - 32 bits shims are not, so ${_LDSCRIPTROOT} is used to specify their full 282235534Sjlh# path. Note that ld(1) scripts are generated both during buildworld and 283235534Sjlh# installworld; in the later case ${_LDSCRIPTROOT} must be obviously empty. 284235534Sjlh# On the other hand, the use of ${_SHLIBDIRPREFIX} is more consistent since it 285235534Sjlh# does not involve the logic of a tool we do not own. 286235534Sjlh.if defined(SHLIB_LDSCRIPT) && !empty(SHLIB_LDSCRIPT) && exists(${.CURDIR}/${SHLIB_LDSCRIPT}) 287235534Sjlh sed -e 's,@@SHLIB@@,${_LDSCRIPTROOT}${SHLIBDIR}/${SHLIB_NAME},g' \ 288235534Sjlh -e 's,@@LIBDIR@@,${_LDSCRIPTROOT}${LIBDIR},g' \ 289235534Sjlh ${.CURDIR}/${SHLIB_LDSCRIPT} > lib${LIB}.ld 290235534Sjlh ${INSTALL} -S -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 291235534Sjlh ${_INSTALLFLAGS} lib${LIB}.ld ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 292235534Sjlh.else 293119846Sru.if ${SHLIBDIR} == ${LIBDIR} 294119846Sru ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 295119846Sru.else 296119846Sru ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \ 297119730Speter ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 298119846Sru.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME}) 299119846Sru -chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 300119846Sru rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 3011844Swollman.endif 30228945Speter.endif 303235534Sjlh.endif # SHLIB_LDSCRIPT 304235534Sjlh.endif # SHLIB_LINK 305235534Sjlh.endif # SHIB_NAME 306156813Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no" 307100872Sru ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 30849328Shoek ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 3091844Swollman.endif 310139106Sru.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB) 311100872Sru ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 31296462Sru ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR} 31396462Sru.endif 314144893Sharti.endif # !defined(INTERNALLIB) 31596462Sru 316248350Sbrooks.if !defined(LIBRARIES_ONLY) 317141503Sphantom.include <bsd.nls.mk> 31897769Sru.include <bsd.files.mk> 31996668Sru.include <bsd.incs.mk> 320248350Sbrooks.endif 321248350Sbrooks 32299256Sru.include <bsd.links.mk> 32396462Sru 324248350Sbrooks.if ${MK_MAN} != "no" && !defined(LIBRARIES_ONLY) 32596164Srurealinstall: _maninstall 32699343Sru.ORDER: beforeinstall _maninstall 32796162Sru.endif 32896162Sru 3291638Srgrimes.endif 3301638Srgrimes 3311638Srgrimes.if !target(lint) 33295306Srulint: ${SRCS:M*.c} 333103713Smarkm ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 3341638Srgrimes.endif 3351638Srgrimes 336248350Sbrooks.if ${MK_MAN} != "no" && !defined(LIBRARIES_ONLY) 3371638Srgrimes.include <bsd.man.mk> 33874842Sru.endif 3391844Swollman 3401844Swollman.include <bsd.dep.mk> 34134092Sbde 34299362Sru.if !exists(${.OBJDIR}/${DEPENDFILE}) 34396512Sru.if defined(LIB) && !empty(LIB) 34499362Sru${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 345124637Sru.for _S in ${SRCS:N*.[hly]} 346124637Sru${_S:R}.po: ${_S} 347124637Sru.endfor 34834092Sbde.endif 34999362Sru.if defined(SHLIB_NAME) || \ 35099362Sru defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 35199362Sru${SOBJS}: ${SRCS:M*.h} 352124637Sru.for _S in ${SRCS:N*.[hly]} 353124637Sru${_S:R}.So: ${_S} 354124637Sru.endfor 35596512Sru.endif 35699362Sru.endif 35734092Sbde 358100457Sru.if !target(clean) 359100457Sruclean: 360100457Sru.if defined(CLEANFILES) && !empty(CLEANFILES) 361100457Sru rm -f ${CLEANFILES} 362100457Sru.endif 363100457Sru.if defined(LIB) && !empty(LIB) 364100457Sru rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 365100457Sru.endif 366100457Sru.if !defined(INTERNALLIB) 367156854Sru.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 368100457Sru rm -f ${POBJS} ${POBJS:S/$/.tmp/} 369100457Sru.endif 370100457Sru.if defined(SHLIB_NAME) || \ 371100457Sru defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 372100457Sru rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 373100457Sru.endif 374100457Sru.if defined(SHLIB_NAME) 375100457Sru.if defined(SHLIB_LINK) 376235534Sjlh.if defined(SHLIB_LDSCRIPT) && exists(${.CURDIR}/${SHLIB_LDSCRIPT}) 377235534Sjlh rm -f lib${LIB}.ld 378235534Sjlh.endif 379100457Sru rm -f ${SHLIB_LINK} 380100457Sru.endif 381100457Sru.if defined(LIB) && !empty(LIB) 382100457Sru rm -f lib${LIB}.so.* lib${LIB}.so 383100457Sru.endif 384100457Sru.endif 385100457Sru.if defined(WANT_LINT) && defined(LIB) && !empty(LIB) 386100457Sru rm -f ${LINTOBJS} 387100457Sru.endif 388144893Sharti.endif # !defined(INTERNALLIB) 389100457Sru.if defined(_LIBS) && !empty(_LIBS) 390100457Sru rm -f ${_LIBS} 391100457Sru.endif 392100457Sru.if defined(CLEANDIRS) && !empty(CLEANDIRS) 393100457Sru rm -rf ${CLEANDIRS} 394100457Sru.endif 395157054Sdes.if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS) 396157054Sdes rm -f ${VERSION_MAP} 397100457Sru.endif 398157054Sdes.endif 399100457Sru 40016663Sjkh.include <bsd.obj.mk> 40176861Skris 40276861Skris.include <bsd.sys.mk> 403