bsd.lib.mk revision 228124
11558Srgrimes# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2187814Srwatson# $FreeBSD: head/share/mk/bsd.lib.mk 228124 2011-11-29 08:38:47Z fjoe $ 3187814Srwatson# 4187814Srwatson 5187814Srwatson.include <bsd.init.mk> 6187814Srwatson 7187814Srwatson# Set up the variables controlling shared libraries. After this section, 898542Smckusick# SHLIB_NAME will be defined only if we are to create a shared library. 998542Smckusick# SHLIB_LINK will be defined only if we are to create a link to it. 1098542Smckusick# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive. 1198542Smckusick.if defined(NO_PIC) 1298542Smckusick.undef SHLIB_NAME 1398542Smckusick.undef INSTALL_PIC_ARCHIVE 1498542Smckusick.else 15110884Smckusick.if !defined(SHLIB) && defined(LIB) 1698542SmckusickSHLIB= ${LIB} 171558Srgrimes.endif 181558Srgrimes.if !defined(SHLIB_NAME) && defined(SHLIB) && defined(SHLIB_MAJOR) 191558SrgrimesSHLIB_NAME= lib${SHLIB}.so.${SHLIB_MAJOR} 201558Srgrimes.endif 211558Srgrimes.if defined(SHLIB_NAME) && !empty(SHLIB_NAME:M*.so.*) 221558SrgrimesSHLIB_LINK?= ${SHLIB_NAME:R} 231558Srgrimes.endif 241558SrgrimesSONAME?= ${SHLIB_NAME} 251558Srgrimes.endif 261558Srgrimes 271558Srgrimes.if defined(CRUNCH_CFLAGS) 281558SrgrimesCFLAGS+= ${CRUNCH_CFLAGS} 291558Srgrimes.endif 301558Srgrimes 311558Srgrimes.if ${MK_ASSERT_DEBUG} == "no" 321558SrgrimesCFLAGS+= -DNDEBUG 331558SrgrimesNO_WERROR= 341558Srgrimes.endif 351558Srgrimes 361558Srgrimes# Enable CTF conversion on request. 371558Srgrimes.if defined(WITH_CTF) 381558Srgrimes.undef NO_CTF 391558Srgrimes.endif 401558Srgrimes 411558Srgrimes.if defined(DEBUG_FLAGS) 421558SrgrimesCFLAGS+= ${DEBUG_FLAGS} 431558Srgrimes 441558Srgrimes.if !defined(NO_CTF) && (${DEBUG_FLAGS:M-g} != "") 451558SrgrimesCTFFLAGS+= -g 4636998Scharnier.endif 471558Srgrimes.endif 481558Srgrimes 491558Srgrimes.if !defined(DEBUG_FLAGS) 501558SrgrimesSTRIP?= -s 511558Srgrimes.endif 5236998Scharnier 5323673Speter.include <bsd.libnames.mk> 5436998Scharnier 5536998Scharnier# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 5650476Speter# .So used for PIC object files 571558Srgrimes.SUFFIXES: 581558Srgrimes.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .C .f .y .l .ln 591558Srgrimes 601558Srgrimes.if !defined(PICFLAG) 6196478Sphk.if ${MACHINE_CPUARCH} == "sparc64" 621558SrgrimesPICFLAG=-fPIC 6398542Smckusick.else 641558SrgrimesPICFLAG=-fpic 651558Srgrimes.endif 6623673Speter.endif 67105741Sjmallett 681558SrgrimesPO_FLAG=-pg 691558Srgrimes 7099826Sjmallett.c.o: 71224025Sdelphij ${CC} ${STATIC_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 72109525Sjmallett @[ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || \ 731558Srgrimes (${ECHO} ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} && \ 741558Srgrimes ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}) 7523673Speter 761558Srgrimes.c.po: 7799826Sjmallett ${CC} ${PO_FLAG} ${STATIC_CFLAGS} ${PO_CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 78109510Sjmallett.if !defined(NO_CTF) 791558Srgrimes ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 8099826Sjmallett.endif 811558Srgrimes 8292839Simp.c.So: 83224004Sdelphij ${CC} ${PICFLAG} -DPIC ${SHARED_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 84109519Sjmallett.if !defined(NO_CTF) 85187814Srwatson ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 86187814Srwatson.endif 87109525Sjmallett 8892839Simp.cc.o: 89187814Srwatson ${CXX} ${STATIC_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 90109525Sjmallett 9192839Simp.cc.po .C.po .cpp.po .cxx.po: 921558Srgrimes ${CXX} ${PO_FLAG} ${STATIC_CXXFLAGS} ${PO_CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 931558Srgrimes 9492839Simp.cc.So .C.So .cpp.So .cxx.So: 951558Srgrimes ${CXX} ${PICFLAG} -DPIC ${SHARED_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 96109525Sjmallett 97224004Sdelphij.f.po: 981558Srgrimes ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 99224004Sdelphij.if !defined(NO_CTF) 100109507Sjmallett ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 101224004Sdelphij.endif 102109525Sjmallett 103187814Srwatson.f.So: 104187814Srwatson ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 105187814Srwatson.if !defined(NO_CTF) 106109525Sjmallett ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 107109525Sjmallett.endif 108109525Sjmallett 109224004Sdelphij.s.po .s.So: 110224004Sdelphij ${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC} 111224004Sdelphij.if !defined(NO_CTF) 112109525Sjmallett ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 113109525Sjmallett.endif 114109525Sjmallett 115109525Sjmallett.asm.po: 116109525Sjmallett ${CC} -x assembler-with-cpp -DPROF ${PO_CFLAGS} ${ACFLAGS} \ 1171558Srgrimes -c ${.IMPSRC} -o ${.TARGET} 1181558Srgrimes.if !defined(NO_CTF) 1191558Srgrimes ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 1201558Srgrimes.endif 1211558Srgrimes 122187814Srwatson.asm.So: 123187814Srwatson ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} ${ACFLAGS} \ 124187814Srwatson -c ${.IMPSRC} -o ${.TARGET} 125187814Srwatson.if !defined(NO_CTF) 1261558Srgrimes ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 127109525Sjmallett.endif 128109525Sjmallett 129109525Sjmallett.S.po: 130109525Sjmallett ${CC} -DPROF ${PO_CFLAGS} ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET} 131109525Sjmallett.if !defined(NO_CTF) 132109525Sjmallett ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 133187814Srwatson.endif 134187814Srwatson 135187814Srwatson.S.So: 136109525Sjmallett ${CC} ${PICFLAG} -DPIC ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET} 137224004Sdelphij.if !defined(NO_CTF) 138224004Sdelphij ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 139109525Sjmallett.endif 140109525Sjmallett 141109525Sjmallettall: objwarn 142109525Sjmallett 1431558Srgrimes.include <bsd.symver.mk> 1441558Srgrimes 1451558Srgrimes# Allow libraries to specify their own version map or have it 1461558Srgrimes# automatically generated (see bsd.symver.mk above). 147224004Sdelphij.if ${MK_SYMVER} == "yes" && !empty(VERSION_MAP) 148224004Sdelphij${SHLIB_NAME}: ${VERSION_MAP} 149224004SdelphijLDFLAGS+= -Wl,--version-script=${VERSION_MAP} 150224025Sdelphij.endif 151224004Sdelphij 152224004Sdelphij.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 153224004SdelphijOBJS+= ${SRCS:N*.h:R:S/$/.o/} 154224004Sdelphij.endif 15592839Simp 1561558Srgrimes.if defined(LIB) && !empty(LIB) 157109532Sjmallett_LIBS= lib${LIB}.a 15898542Smckusick 159109767Snjllib${LIB}.a: ${OBJS} ${STATICOBJS} 16099827Sjmallett @${ECHO} building static ${LIB} library 1611558Srgrimes @rm -f ${.TARGET} 162101688Sjmallett.if !defined(NM) 163101688Sjmallett @${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 16498542Smckusick.else 165109532Sjmallett @${AR} cq ${.TARGET} `NM='${NM}' lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 16698542Smckusick.endif 167109532Sjmallett ${RANLIB} ${.TARGET} 168122670Sjohan.endif 169122670Sjohan 170122670Sjohan.if !defined(INTERNALLIB) 171122670Sjohan 172101688Sjmallett.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 173101688Sjmallett_LIBS+= lib${LIB}_p.a 17498542SmckusickPOBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 175109532Sjmallett 17698542Smckusicklib${LIB}_p.a: ${POBJS} 177109532Sjmallett @${ECHO} building profiled ${LIB} library 178201647Sgavin @rm -f ${.TARGET} 179122670Sjohan.if !defined(NM) 180122670Sjohan @${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 181101688Sjmallett.else 182101688Sjmallett @${AR} cq ${.TARGET} `NM='${NM}' lorder ${POBJS} | tsort -q` ${ARADD} 183109532Sjmallett.endif 18498542Smckusick ${RANLIB} ${.TARGET} 1851558Srgrimes.endif 1861558Srgrimes 1871558Srgrimes.if defined(SHLIB_NAME) || \ 1881558Srgrimes defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 1891558SrgrimesSOBJS+= ${OBJS:.o=.So} 1901558Srgrimes.endif 19198542Smckusick 1921558Srgrimes.if defined(SHLIB_NAME) 19398542Smckusick_LIBS+= ${SHLIB_NAME} 194101688Sjmallett 195101688Sjmallett.if target(beforelinking) 19698542Smckusick${SHLIB_NAME}: ${SOBJS} beforelinking 19798542Smckusick.else 19898542Smckusick${SHLIB_NAME}: ${SOBJS} 199122670Sjohan.endif 200122670Sjohan @${ECHO} building shared library ${SHLIB_NAME} 201122670Sjohan @rm -f ${.TARGET} ${SHLIB_LINK} 202122670Sjohan.if defined(SHLIB_LINK) 203122670Sjohan @ln -fs ${.TARGET} ${SHLIB_LINK} 204163844Spjd.endif 205163844Spjd.if !defined(NM) 206163844Spjd @${CC} ${LDFLAGS} ${SSP_CFLAGS} -shared -Wl,-x \ 207122670Sjohan -o ${.TARGET} -Wl,-soname,${SONAME} \ 208122670Sjohan `lorder ${SOBJS} | tsort -q` ${LDADD} 209122670Sjohan.else 210109532Sjmallett @${CC} ${LDFLAGS} ${SSP_CFLAGS} -shared -Wl,-x \ 211109532Sjmallett -o ${.TARGET} -Wl,-soname,${SONAME} \ 212109532Sjmallett `NM='${NM}' lorder ${SOBJS} | tsort -q` ${LDADD} 213101688Sjmallett.endif 214101688Sjmallett.if !defined(NO_CTF) 21598542Smckusick ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SOBJS} 21698542Smckusick.endif 21798542Smckusick.endif 21898542Smckusick 21998542Smckusick.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no" 22098542Smckusick_LIBS+= lib${LIB}_pic.a 22198542Smckusick 22298542Smckusicklib${LIB}_pic.a: ${SOBJS} 223122670Sjohan @${ECHO} building special pic ${LIB} library 22498542Smckusick @rm -f ${.TARGET} 225122670Sjohan @${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 22698542Smckusick ${RANLIB} ${.TARGET} 22798542Smckusick.endif 22898542Smckusick 22998542Smckusick.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB) 23098542SmckusickLINTLIB= llib-l${LIB}.ln 23198542Smckusick_LIBS+= ${LINTLIB} 23298542SmckusickLINTOBJS+= ${SRCS:M*.c:.c=.ln} 23398542Smckusick 23498542Smckusick${LINTLIB}: ${LINTOBJS} 23598542Smckusick @${ECHO} building lint library ${.TARGET} 236101688Sjmallett @rm -f ${.TARGET} 237101688Sjmallett ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 238109532Sjmallett.endif 23998542Smckusick 2401558Srgrimes.endif # !defined(INTERNALLIB) 2411558Srgrimes 2422154Sdgall: ${_LIBS} 2432154Sdg 244123219Struckman.if ${MK_MAN} != "no" 245123219Struckmanall: _manpages 24648875Smpp.endif 247109767Snjl 248109767Snjl_EXTRADEPEND: 249109767Snjl @TMP=_depend$$$$; \ 250109767Snjl sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 251109767Snjl > $$TMP; \ 25248875Smpp mv $$TMP ${DEPENDFILE} 253109767Snjl.if !defined(NO_EXTRADEPEND) && defined(SHLIB_NAME) 254109767Snjl.if defined(DPADD) && !empty(DPADD) 255109767Snjl echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 256207141Sjeff.endif 257109767Snjl.endif 258109767Snjl 259109767Snjl.if !target(install) 260109767Snjl 261109767Snjl.if defined(PRECIOUSLIB) 262109767Snjl.if !defined(NO_FSCHG) 263109767SnjlSHLINSTALLFLAGS+= -fschg 264109767Snjl.endif 265163844SpjdSHLINSTALLFLAGS+= -S 266163844Spjd.endif 267109767Snjl 268109767Snjl_INSTALLFLAGS:= ${INSTALLFLAGS} 269200796Strasz.for ie in ${INSTALLFLAGS_EDIT} 270200796Strasz_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 271216798Skib.endfor 272216798Skib_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 273109767Snjl.for ie in ${INSTALLFLAGS_EDIT} 274200796Strasz_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 275216798Skib.endfor 276109767Snjl 277109767Snjl.if !defined(INTERNALLIB) 27848875Smpprealinstall: _libinstall 279110174Sgordon.ORDER: beforeinstall _libinstall 280122670Sjohan_libinstall: 281122670Sjohan.if defined(LIB) && !empty(LIB) && ${MK_INSTALLLIB} != "no" 2821558Srgrimes ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 28371073Siedowse ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 284101688Sjmallett.endif 28598542Smckusick.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 2861558Srgrimes ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 2871558Srgrimes ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 2881558Srgrimes.endif 2891558Srgrimes.if defined(SHLIB_NAME) 2901558Srgrimes ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 2911558Srgrimes ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 2921558Srgrimes ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 2931558Srgrimes.if defined(SHLIB_LINK) 29498542Smckusick.if ${SHLIBDIR} == ${LIBDIR} 295101688Sjmallett ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 29698542Smckusick.else 29798542Smckusick ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \ 29898542Smckusick ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 299109532Sjmallett.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME}) 300109532Sjmallett -chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 3011558Srgrimes rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 302109519Sjmallett.endif 303109519Sjmallett.endif 3041558Srgrimes.endif 305109519Sjmallett.endif 3061558Srgrimes.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no" 3071558Srgrimes ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 308109525Sjmallett ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 3091558Srgrimes.endif 31099827Sjmallett.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB) 3111558Srgrimes ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 3121558Srgrimes ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR} 313109519Sjmallett.endif 3141558Srgrimes.endif # !defined(INTERNALLIB) 315109532Sjmallett 3161558Srgrimes.include <bsd.nls.mk> 3171558Srgrimes.include <bsd.files.mk> 3181558Srgrimes.include <bsd.incs.mk> 319109519Sjmallett.include <bsd.links.mk> 320109519Sjmallett 321101688Sjmallett.if ${MK_MAN} != "no" 322101688Sjmallettrealinstall: _maninstall 323109532Sjmallett.ORDER: beforeinstall _maninstall 324122670Sjohan.endif 325122670Sjohan 326163844Spjd.endif 327163844Spjd 328163844Spjd.if !target(lint) 329101688Sjmallettlint: ${SRCS:M*.c} 330101688Sjmallett ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 331109532Sjmallett.endif 332122670Sjohan 333122670Sjohan.if ${MK_MAN} != "no" 33498542Smckusick.include <bsd.man.mk> 33598542Smckusick.endif 33698542Smckusick 337101688Sjmallett.include <bsd.dep.mk> 338101688Sjmallett 339101688Sjmallett.if !exists(${.OBJDIR}/${DEPENDFILE}) 34098542Smckusick.if defined(LIB) && !empty(LIB) 3411558Srgrimes${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 3421558Srgrimes.for _S in ${SRCS:N*.[hly]} 3431558Srgrimes${_S:R}.po: ${_S} 3441558Srgrimes.endfor 3451558Srgrimes.endif 3461558Srgrimes.if defined(SHLIB_NAME) || \ 3471558Srgrimes defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 3481558Srgrimes${SOBJS}: ${SRCS:M*.h} 3491558Srgrimes.for _S in ${SRCS:N*.[hly]} 3501558Srgrimes${_S:R}.So: ${_S} 3511558Srgrimes.endfor 3521558Srgrimes.endif 3531558Srgrimes.endif 3541558Srgrimes 3551558Srgrimes.if !target(clean) 3561558Srgrimesclean: 3571558Srgrimes.if defined(CLEANFILES) && !empty(CLEANFILES) 3581558Srgrimes rm -f ${CLEANFILES} 3591558Srgrimes.endif 3601558Srgrimes.if defined(LIB) && !empty(LIB) 3611558Srgrimes rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 3621558Srgrimes.endif 3631558Srgrimes.if !defined(INTERNALLIB) 3641558Srgrimes.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 3651558Srgrimes rm -f ${POBJS} ${POBJS:S/$/.tmp/} 36698542Smckusick.endif 3671558Srgrimes.if defined(SHLIB_NAME) || \ 36898542Smckusick defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 3691558Srgrimes rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 3701558Srgrimes.endif 37199827Sjmallett.if defined(SHLIB_NAME) 3721558Srgrimes.if defined(SHLIB_LINK) 373109525Sjmallett rm -f ${SHLIB_LINK} 374187814Srwatson.endif 375187814Srwatson.if defined(LIB) && !empty(LIB) 376187814Srwatson rm -f lib${LIB}.so.* lib${LIB}.so 377187814Srwatson.endif 378187814Srwatson.endif 379187814Srwatson.if defined(WANT_LINT) && defined(LIB) && !empty(LIB) 380187814Srwatson rm -f ${LINTOBJS} 381187814Srwatson.endif 382187814Srwatson.endif # !defined(INTERNALLIB) 383187814Srwatson.if defined(_LIBS) && !empty(_LIBS) 384187814Srwatson rm -f ${_LIBS} 385187814Srwatson.endif 386187814Srwatson.if defined(CLEANDIRS) && !empty(CLEANDIRS) 387187814Srwatson rm -rf ${CLEANDIRS} 388187814Srwatson.endif 389187814Srwatson.if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS) 390187814Srwatson rm -f ${VERSION_MAP} 391187814Srwatson.endif 392187814Srwatson.endif 393187814Srwatson 394187814Srwatson.include <bsd.obj.mk> 395187814Srwatson 396187814Srwatson.include <bsd.sys.mk> 397187814Srwatson