bsd.lib.mk revision 127027
1# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2# $FreeBSD: head/share/mk/bsd.lib.mk 127027 2004-03-15 17:01:31Z trhodes $ 3# 4 5.include <bsd.init.mk> 6 7# Set up the variables controlling shared libraries. After this section, 8# SHLIB_NAME will be defined only if we are to create a shared library. 9# SHLIB_LINK will be defined only if we are to create a link to it. 10# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive. 11.if defined(NOPIC) 12.undef SHLIB_NAME 13.undef INSTALL_PIC_ARCHIVE 14.else 15.if !defined(SHLIB_NAME) && defined(LIB) && defined(SHLIB_MAJOR) 16SHLIB_NAME= lib${LIB}.so.${SHLIB_MAJOR} 17.endif 18.if defined(SHLIB_NAME) && !empty(SHLIB_NAME:M*.so.*) 19SHLIB_LINK?= ${SHLIB_NAME:R} 20.endif 21SONAME?= ${SHLIB_NAME} 22.endif 23 24.if defined(CRUNCH_CFLAGS) 25CFLAGS+= ${CRUNCH_CFLAGS} 26.endif 27 28.if defined(DEBUG_FLAGS) 29CFLAGS+= ${DEBUG_FLAGS} 30.endif 31 32.if !defined(DEBUG_FLAGS) 33STRIP?= -s 34.endif 35 36.include <bsd.libnames.mk> 37 38# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 39# .So used for PIC object files 40.SUFFIXES: 41.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .m .C .f .y .l .ln 42 43.if !defined(PICFLAG) 44.if ${MACHINE_ARCH} == "sparc64" 45PICFLAG=-fPIC 46.else 47PICFLAG=-fpic 48.endif 49.endif 50 51.if ${CC} == "icc" 52PO_FLAG=-p 53.else 54PO_FLAG=-pg 55.endif 56 57.c.po: 58 ${CC} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 59 60.c.So: 61 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 62 63.cc.po .C.po .cpp.po .cxx.po: 64 ${CXX} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 65 66.cc.So .C.So .cpp.So .cxx.So: 67 ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 68 69.f.po: 70 ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 71 72.f.So: 73 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 74 75.m.po: 76 ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} 77 78.m.So: 79 ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 80 81.s.po .s.So: 82 ${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC} 83 84.asm.po: 85 ${CC} -x assembler-with-cpp -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 86 87.asm.So: 88 ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ 89 -c ${.IMPSRC} -o ${.TARGET} 90 91.S.po: 92 ${CC} -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 93 94.S.So: 95 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 96 97all: objwarn 98 99.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 100OBJS+= ${SRCS:N*.h:R:S/$/.o/} 101.endif 102 103.if defined(LIB) && !empty(LIB) 104_LIBS= lib${LIB}.a 105 106lib${LIB}.a: ${OBJS} ${STATICOBJS} 107 @${ECHO} building static ${LIB} library 108 @rm -f ${.TARGET} 109 @${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 110 ${RANLIB} ${.TARGET} 111.endif 112 113.if !defined(INTERNALLIB) 114 115.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 116_LIBS+= lib${LIB}_p.a 117POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 118 119lib${LIB}_p.a: ${POBJS} 120 @${ECHO} building profiled ${LIB} library 121 @rm -f ${.TARGET} 122 @${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 123 ${RANLIB} ${.TARGET} 124.endif 125 126.if defined(SHLIB_NAME) || \ 127 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 128SOBJS+= ${OBJS:.o=.So} 129.endif 130 131.if defined(SHLIB_NAME) 132_LIBS+= ${SHLIB_NAME} 133 134${SHLIB_NAME}: ${SOBJS} 135 @${ECHO} building shared library ${SHLIB_NAME} 136 @rm -f ${.TARGET} ${SHLIB_LINK} 137.if defined(SHLIB_LINK) 138 @ln -fs ${.TARGET} ${SHLIB_LINK} 139.endif 140 @${CC} ${LDFLAGS} -shared -Wl,-x \ 141 -o ${.TARGET} -Wl,-soname,${SONAME} \ 142 `lorder ${SOBJS} | tsort -q` ${LDADD} 143.endif 144 145.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 146_LIBS+= lib${LIB}_pic.a 147 148lib${LIB}_pic.a: ${SOBJS} 149 @${ECHO} building special pic ${LIB} library 150 @rm -f ${.TARGET} 151 @${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 152 ${RANLIB} ${.TARGET} 153.endif 154 155.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB) 156LINTLIB= llib-l${LIB}.ln 157_LIBS+= ${LINTLIB} 158LINTOBJS+= ${SRCS:M*.c:.c=.ln} 159 160${LINTLIB}: ${LINTOBJS} 161 @${ECHO} building lint library ${.TARGET} 162 @rm -f ${.TARGET} 163 ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 164.endif 165 166.endif !defined(INTERNALLIB) 167 168all: ${_LIBS} 169 170.if !defined(NOMAN) 171all: _manpages 172.endif 173 174_EXTRADEPEND: 175 @TMP=_depend$$$$; \ 176 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 177 > $$TMP; \ 178 mv $$TMP ${DEPENDFILE} 179.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 180.if defined(DPADD) && !empty(DPADD) 181 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 182.endif 183.endif 184 185.if !target(install) 186 187.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 188SHLINSTALLFLAGS+= -fschg 189.endif 190 191_INSTALLFLAGS:= ${INSTALLFLAGS} 192.for ie in ${INSTALLFLAGS_EDIT} 193_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 194.endfor 195_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 196.for ie in ${INSTALLFLAGS_EDIT} 197_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 198.endfor 199 200.if !defined(INTERNALLIB) 201realinstall: _libinstall 202.ORDER: beforeinstall _libinstall 203_libinstall: 204.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB) 205 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 206 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 207.endif 208.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 209 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 210 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 211.endif 212.if defined(SHLIB_NAME) 213 ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 214 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 215 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 216.if defined(SHLIB_LINK) 217.if ${SHLIBDIR} == ${LIBDIR} 218 ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 219.else 220 ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \ 221 ${DESTDIR}${LIBDIR}/${SHLIB_LINK} 222.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME}) 223 -chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 224 rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME} 225.endif 226.endif 227.endif 228.endif 229.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 230 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 231 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 232.endif 233.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB) 234 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 235 ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR} 236.endif 237.endif !defined(INTERNALLIB) 238 239.include <bsd.files.mk> 240.include <bsd.incs.mk> 241.include <bsd.links.mk> 242 243.if !defined(NOMAN) 244realinstall: _maninstall 245.ORDER: beforeinstall _maninstall 246.endif 247 248.endif 249 250.if !target(lint) 251lint: ${SRCS:M*.c} 252 ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 253.endif 254 255.if !defined(NOMAN) 256.include <bsd.man.mk> 257.endif 258 259.include <bsd.dep.mk> 260 261.if !exists(${.OBJDIR}/${DEPENDFILE}) 262.if defined(LIB) && !empty(LIB) 263${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 264.for _S in ${SRCS:N*.[hly]} 265${_S:R}.po: ${_S} 266.endfor 267.endif 268.if defined(SHLIB_NAME) || \ 269 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 270${SOBJS}: ${SRCS:M*.h} 271.for _S in ${SRCS:N*.[hly]} 272${_S:R}.So: ${_S} 273.endfor 274.endif 275.endif 276 277.if !target(clean) 278clean: 279.if defined(CLEANFILES) && !empty(CLEANFILES) 280 rm -f ${CLEANFILES} 281.endif 282.if defined(LIB) && !empty(LIB) 283 rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 284.endif 285.if !defined(INTERNALLIB) 286.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 287 rm -f ${POBJS} ${POBJS:S/$/.tmp/} 288.endif 289.if defined(SHLIB_NAME) || \ 290 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 291 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 292.endif 293.if defined(SHLIB_NAME) 294.if defined(SHLIB_LINK) 295 rm -f ${SHLIB_LINK} 296.endif 297.if defined(LIB) && !empty(LIB) 298 rm -f lib${LIB}.so.* lib${LIB}.so 299.endif 300.endif 301.if defined(WANT_LINT) && defined(LIB) && !empty(LIB) 302 rm -f ${LINTOBJS} 303.endif 304.endif !defined(INTERNALLIB) 305.if defined(_LIBS) && !empty(_LIBS) 306 rm -f ${_LIBS} 307.endif 308.if defined(CLEANDIRS) && !empty(CLEANDIRS) 309 rm -rf ${CLEANDIRS} 310.endif 311.endif 312 313.include <bsd.obj.mk> 314 315.include <bsd.sys.mk> 316