bsd.lib.mk revision 156854
1238384Sjkim# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2238384Sjkim# $FreeBSD: head/share/mk/bsd.lib.mk 156854 2006-03-18 21:37:05Z ru $ 3238384Sjkim# 4238384Sjkim 5238384Sjkim.include <bsd.init.mk> 6238384Sjkim 7238384Sjkim# Set up the variables controlling shared libraries. After this section, 8238384Sjkim# SHLIB_NAME will be defined only if we are to create a shared library. 9280297Sjkim# SHLIB_LINK will be defined only if we are to create a link to it. 10238384Sjkim# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive. 11238384Sjkim.if defined(NO_PIC) 12238384Sjkim.undef SHLIB_NAME 13238384Sjkim.undef INSTALL_PIC_ARCHIVE 14238384Sjkim.else 15238384Sjkim.if !defined(SHLIB) && defined(LIB) 16238384SjkimSHLIB= ${LIB} 17238384Sjkim.endif 18238384Sjkim.if !defined(SHLIB_NAME) && defined(SHLIB) && defined(SHLIB_MAJOR) 19238384SjkimSHLIB_NAME= lib${SHLIB}.so.${SHLIB_MAJOR} 20238384Sjkim.endif 21238384Sjkim.if defined(SHLIB_NAME) && !empty(SHLIB_NAME:M*.so.*) 22238384SjkimSHLIB_LINK?= ${SHLIB_NAME:R} 23238384Sjkim.endif 24238384SjkimSONAME?= ${SHLIB_NAME} 25238384Sjkim.endif 26238384Sjkim 27238384Sjkim.if defined(CRUNCH_CFLAGS) 28238384SjkimCFLAGS+= ${CRUNCH_CFLAGS} 29238384Sjkim.endif 30238384Sjkim 31238384Sjkim.if defined(DEBUG_FLAGS) 32238384SjkimCFLAGS+= ${DEBUG_FLAGS} 33238384Sjkim.endif 34238384Sjkim 35238384Sjkim.if !defined(DEBUG_FLAGS) 36238384SjkimSTRIP?= -s 37238384Sjkim.endif 38238384Sjkim 39238384Sjkim.include <bsd.libnames.mk> 40238384Sjkim 41238384Sjkim# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 42238384Sjkim# .So used for PIC object files 43238384Sjkim.SUFFIXES: 44238384Sjkim.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .m .C .f .y .l .ln 45238384Sjkim 46238384Sjkim.if !defined(PICFLAG) 47238384Sjkim.if ${MACHINE_ARCH} == "sparc64" 48238384SjkimPICFLAG=-fPIC 49238384Sjkim.else 50238384SjkimPICFLAG=-fpic 51238384Sjkim.endif 52238384Sjkim.endif 53238384Sjkim 54238384Sjkim.if ${CC} == "icc" 55238384SjkimPO_FLAG=-p 56238384Sjkim.else 57238384SjkimPO_FLAG=-pg 58238384Sjkim.endif 59238384Sjkim 60238384Sjkim.c.po: 61238384Sjkim ${CC} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 62280297Sjkim 63280297Sjkim.c.So: 64280297Sjkim ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 65280297Sjkim 66238384Sjkim.cc.po .C.po .cpp.po .cxx.po: 67238384Sjkim ${CXX} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 68280297Sjkim 69280297Sjkim.cc.So .C.So .cpp.So .cxx.So: 70280297Sjkim ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 71238384Sjkim 72238384Sjkim.f.po: 73238384Sjkim ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 74238384Sjkim 75238384Sjkim.f.So: 76238384Sjkim ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 77238384Sjkim 78238384Sjkim.m.po: 79238384Sjkim ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} 80238384Sjkim 81280297Sjkim.m.So: 82280297Sjkim ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 83280297Sjkim 84280297Sjkim.s.po .s.So: 85280297Sjkim ${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC} 86280297Sjkim 87280297Sjkim.asm.po: 88280297Sjkim ${CC} -x assembler-with-cpp -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 89280297Sjkim 90280297Sjkim.asm.So: 91280297Sjkim ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ 92280297Sjkim -c ${.IMPSRC} -o ${.TARGET} 93280297Sjkim 94280297Sjkim.S.po: 95280297Sjkim ${CC} -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 96280297Sjkim 97280297Sjkim.S.So: 98280297Sjkim ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 99280297Sjkim 100280297Sjkimall: objwarn 101280297Sjkim 102280297Sjkim# Generate the version map given the version definitions 103280297Sjkim# and symbol maps. 104280297Sjkim.if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS) 105280297Sjkim# Find the awk script that generates the version map. 106280297SjkimVERSION_GEN?= version_gen.awk 107280297SjkimVERSION_MAP?= Version.map 108280297Sjkim 109280297Sjkim# Compute the make's -m path. 110280297Sjkim_mpath= 111280297Sjkim_oarg= 112280297Sjkim.for _arg in ${.MAKEFLAGS} 113280297Sjkim.if ${_oarg} == "-m" 114280297Sjkim_mpath+= ${_arg} 115280297Sjkim.endif 116238384Sjkim_oarg= ${_arg} 117280297Sjkim.endfor 118280297Sjkim_mpath+= /usr/share/mk 119280297Sjkim 120280297Sjkim# Look up ${VERSION_GEN} in ${_mpath}. 121280297Sjkim_vgen= 122280297Sjkim.for path in ${_mpath} 123280297Sjkim.if empty(_vgen) 124280297Sjkim.if exists(${path}/${VERSION_GEN}) 125280297Sjkim_vgen= ${path}/${VERSION_GEN} 126238384Sjkim.endif 127238384Sjkim.endif 128280297Sjkim.endfor 129280297Sjkim 130280297Sjkim${VERSION_MAP}: 131280297Sjkim awk -v vfile=${VERSION_DEF} -f ${_vgen} ${SYMBOL_MAPS} \ 132280297Sjkim > ${.TARGET} 133280297Sjkim.endif # !empty(VERSION_DEF) && !empty(SYMBOL_MAPS) 134280297Sjkim 135280297Sjkim# Allow librararies to specify their own version map or have it 136280297Sjkim# automatically generated (see above). 137280297Sjkim.if !empty(VERSION_MAP) 138280297Sjkim${SHLIB_NAME}: ${VERSION_MAP} 139280297SjkimLDFLAGS+= -Wl,--version-script=${VERSION_MAP} 140280297Sjkim.endif 141280297Sjkim 142280297Sjkim.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 143280297SjkimOBJS+= ${SRCS:N*.h:R:S/$/.o/} 144280297Sjkim.endif 145280297Sjkim 146280297Sjkim.if defined(LIB) && !empty(LIB) 147280297Sjkim_LIBS= lib${LIB}.a 148280297Sjkim 149280297Sjkimlib${LIB}.a: ${OBJS} ${STATICOBJS} 150280297Sjkim @${ECHO} building static ${LIB} library 151280297Sjkim @rm -f ${.TARGET} 152280297Sjkim @${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 153280297Sjkim ${RANLIB} ${.TARGET} 154280297Sjkim.endif 155280297Sjkim 156280297Sjkim.if !defined(INTERNALLIB) 157280297Sjkim 158280297Sjkim.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 159280297Sjkim_LIBS+= lib${LIB}_p.a 160280297SjkimPOBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 161280297Sjkim 162280297Sjkimlib${LIB}_p.a: ${POBJS} 163280297Sjkim @${ECHO} building profiled ${LIB} library 164280297Sjkim @rm -f ${.TARGET} 165280297Sjkim @${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 166280297Sjkim ${RANLIB} ${.TARGET} 167280297Sjkim.endif 168238384Sjkim 169280297Sjkim.if defined(SHLIB_NAME) || \ 170280297Sjkim defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 171280297SjkimSOBJS+= ${OBJS:.o=.So} 172280297Sjkim.endif 173280297Sjkim 174280297Sjkim.if defined(SHLIB_NAME) 175280297Sjkim_LIBS+= ${SHLIB_NAME} 176280297Sjkim 177280297Sjkim${SHLIB_NAME}: ${SOBJS} 178280297Sjkim @${ECHO} building shared library ${SHLIB_NAME} 179280297Sjkim @rm -f ${.TARGET} ${SHLIB_LINK} 180238384Sjkim.if defined(SHLIB_LINK) 181238384Sjkim @ln -fs ${.TARGET} ${SHLIB_LINK} 182238384Sjkim.endif 183280297Sjkim @${CC} ${LDFLAGS} -shared -Wl,-x \ 184280297Sjkim -o ${.TARGET} -Wl,-soname,${SONAME} \ 185280297Sjkim `lorder ${SOBJS} | tsort -q` ${LDADD} 186280297Sjkim.endif 187280297Sjkim 188280297Sjkim.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no" 189280297Sjkim_LIBS+= lib${LIB}_pic.a 190280297Sjkim 191238384Sjkimlib${LIB}_pic.a: ${SOBJS} 192280297Sjkim @${ECHO} building special pic ${LIB} library 193280297Sjkim @rm -f ${.TARGET} 194280297Sjkim @${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 195238384Sjkim ${RANLIB} ${.TARGET} 196280297Sjkim.endif 197280297Sjkim 198238384Sjkim.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB) 199280297SjkimLINTLIB= llib-l${LIB}.ln 200280297Sjkim_LIBS+= ${LINTLIB} 201280297SjkimLINTOBJS+= ${SRCS:M*.c:.c=.ln} 202280297Sjkim 203280297Sjkim${LINTLIB}: ${LINTOBJS} 204280297Sjkim @${ECHO} building lint library ${.TARGET} 205280297Sjkim @rm -f ${.TARGET} 206280297Sjkim ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 207280297Sjkim.endif 208280297Sjkim 209280297Sjkim.endif # !defined(INTERNALLIB) 210280297Sjkim 211280297Sjkimall: ${_LIBS} 212280297Sjkim 213280297Sjkim.if ${MK_MAN} != "no" 214280297Sjkimall: _manpages 215280297Sjkim.endif 216280297Sjkim 217280297Sjkim_EXTRADEPEND: 218238384Sjkim @TMP=_depend$$$$; \ 219238384Sjkim sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 220238384Sjkim > $$TMP; \ 221238384Sjkim mv $$TMP ${DEPENDFILE} 222238384Sjkim.if !defined(NO_EXTRADEPEND) && defined(SHLIB_NAME) 223238384Sjkim.if defined(DPADD) && !empty(DPADD) 224280297Sjkim echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 225280297Sjkim.endif 226280297Sjkim.endif 227238384Sjkim 228238384Sjkim.if !target(install) 229280297Sjkim 230238384Sjkim.if defined(PRECIOUSLIB) 231238384Sjkim.if !defined(NO_FSCHG) 232238384SjkimSHLINSTALLFLAGS+= -fschg 233238384Sjkim.endif 234280297SjkimSHLINSTALLFLAGS+= -S 235280297Sjkim.endif 236280297Sjkim 237280297Sjkim_INSTALLFLAGS:= ${INSTALLFLAGS} 238280297Sjkim.for ie in ${INSTALLFLAGS_EDIT} 239280297Sjkim_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 240238384Sjkim.endfor 241238384Sjkim_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 242238384Sjkim.for ie in ${INSTALLFLAGS_EDIT} 243280297Sjkim_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 244280297Sjkim.endfor 245280297Sjkim 246238384Sjkim.if !defined(INTERNALLIB) 247238384Sjkimrealinstall: _libinstall 248238384Sjkim.ORDER: beforeinstall _libinstall 249238384Sjkim_libinstall: 250238384Sjkim.if defined(LIB) && !empty(LIB) && !defined(NO_INSTALLLIB) 251238384Sjkim ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 252280297Sjkim ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 253280297Sjkim.endif 254238384Sjkim.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 255 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 256 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 257.endif 258.if defined(SHLIB_NAME) 259 ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 260 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 261 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 262.if defined(SHLIB_LINK) 263.if ${SHLIBDIR} == ${LIBDIR} 264 ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 265.else 266 ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \ 267 ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 268.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME}) 269 -chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 270 rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 271.endif 272.endif 273.endif 274.endif 275.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no" 276 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 277 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 278.endif 279.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB) 280 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 281 ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR} 282.endif 283.endif # !defined(INTERNALLIB) 284 285.include <bsd.nls.mk> 286.include <bsd.files.mk> 287.include <bsd.incs.mk> 288.include <bsd.links.mk> 289 290.if ${MK_MAN} != "no" 291realinstall: _maninstall 292.ORDER: beforeinstall _maninstall 293.endif 294 295.endif 296 297.if !target(lint) 298lint: ${SRCS:M*.c} 299 ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 300.endif 301 302.if ${MK_MAN} != "no" 303.include <bsd.man.mk> 304.endif 305 306.include <bsd.dep.mk> 307 308.if !exists(${.OBJDIR}/${DEPENDFILE}) 309.if defined(LIB) && !empty(LIB) 310${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 311.for _S in ${SRCS:N*.[hly]} 312${_S:R}.po: ${_S} 313.endfor 314.endif 315.if defined(SHLIB_NAME) || \ 316 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 317${SOBJS}: ${SRCS:M*.h} 318.for _S in ${SRCS:N*.[hly]} 319${_S:R}.So: ${_S} 320.endfor 321.endif 322.endif 323 324.if !target(clean) 325clean: 326.if defined(CLEANFILES) && !empty(CLEANFILES) 327 rm -f ${CLEANFILES} 328.endif 329.if defined(LIB) && !empty(LIB) 330 rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 331.endif 332.if !defined(INTERNALLIB) 333.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 334 rm -f ${POBJS} ${POBJS:S/$/.tmp/} 335.endif 336.if defined(SHLIB_NAME) || \ 337 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 338 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 339.endif 340.if defined(SHLIB_NAME) 341.if defined(SHLIB_LINK) 342 rm -f ${SHLIB_LINK} 343.endif 344.if defined(LIB) && !empty(LIB) 345 rm -f lib${LIB}.so.* lib${LIB}.so 346.endif 347.endif 348.if defined(WANT_LINT) && defined(LIB) && !empty(LIB) 349 rm -f ${LINTOBJS} 350.endif 351.endif # !defined(INTERNALLIB) 352.if defined(_LIBS) && !empty(_LIBS) 353 rm -f ${_LIBS} 354.endif 355.if defined(CLEANDIRS) && !empty(CLEANDIRS) 356 rm -rf ${CLEANDIRS} 357.endif 358.endif 359 360.include <bsd.obj.mk> 361 362.include <bsd.sys.mk> 363