bsd.lib.mk revision 99362
1# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2# $FreeBSD: head/share/mk/bsd.lib.mk 99362 2002-07-03 16:22:43Z ru $ 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 ${OBJFORMAT} == elf 16.if !defined(SHLIB_NAME) && defined(LIB) && defined(SHLIB_MAJOR) 17SHLIB_NAME= lib${LIB}.so.${SHLIB_MAJOR} 18SHLIB_LINK?= lib${LIB}.so 19.endif 20SONAME?= ${SHLIB_NAME} 21.else 22.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 23SHLIB_NAME?= lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 24.endif 25.endif 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.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES) 37.include <bsd.libnames.mk> 38.endif 39 40# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 41# .So used for PIC object files 42.SUFFIXES: 43.SUFFIXES: .out .o .po .So .S .s .asm .c .cc .cpp .cxx .m .C .f .y .l .ln 44 45.if !defined(PICFLAG) 46.if ${MACHINE_ARCH} == "sparc64" 47PICFLAG=-fPIC 48.else 49PICFLAG=-fpic 50.endif 51.endif 52 53.c.ln: 54 ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \ 55 touch ${.TARGET} 56 57.cc.ln .C.ln .cpp.ln .cxx.ln: 58 ${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \ 59 touch ${.TARGET} 60 61.c.o: 62 ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 63 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 64 @mv ${.TARGET}.tmp ${.TARGET} 65 66.c.po: 67 ${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 68 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 69 @mv ${.TARGET}.tmp ${.TARGET} 70 71.c.So: 72 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 73 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 74 @mv ${.TARGET}.tmp ${.TARGET} 75 76.cc.o .C.o .cpp.o .cxx.o: 77 ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 78 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 79 @mv ${.TARGET}.tmp ${.TARGET} 80 81.cc.po .C.po .cpp.po .cxx.po: 82 ${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 83 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 84 @mv ${.TARGET}.tmp ${.TARGET} 85 86.cc.So .C.So .cpp.So .cxx.So: 87 ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 88 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 89 @mv ${.TARGET}.tmp ${.TARGET} 90 91.f.o: 92 ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 93 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 94 @mv ${.TARGET}.tmp ${.TARGET} 95 96.f.po: 97 ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 98 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 99 @mv ${.TARGET}.tmp ${.TARGET} 100 101.f.So: 102 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 103 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 104 @mv ${.TARGET}.tmp ${.TARGET} 105 106.m.o: 107 ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 108 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 109 @mv ${.TARGET}.tmp ${.TARGET} 110 111.m.po: 112 ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} 113 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 114 @mv ${.TARGET}.tmp ${.TARGET} 115 116.m.So: 117 ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 118 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 119 @mv ${.TARGET}.tmp ${.TARGET} 120 121.s.o .asm.o: 122 ${CC} -x assembler-with-cpp ${CFLAGS} ${AINC} -c \ 123 ${.IMPSRC} -o ${.TARGET} 124 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 125 @mv ${.TARGET}.tmp ${.TARGET} 126 127.s.po .asm.po: 128 ${CC} -x assembler-with-cpp -DPROF ${CFLAGS} ${AINC} -c \ 129 ${.IMPSRC} -o ${.TARGET} 130 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET} 131 @mv ${.TARGET}.tmp ${.TARGET} 132 133.s.So .asm.So: 134 ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ 135 ${AINC} -c ${.IMPSRC} -o ${.TARGET} 136 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 137 @mv ${.TARGET}.tmp ${.TARGET} 138 139.S.o: 140 ${CC} ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 141 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 142 @mv ${.TARGET}.tmp ${.TARGET} 143 144.S.po: 145 ${CC} -DPROF ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 146 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET} 147 @mv ${.TARGET}.tmp ${.TARGET} 148 149.S.So: 150 ${CC} ${PICFLAG} -DPIC ${CFLAGS} ${AINC} -c ${.IMPSRC} \ 151 -o ${.TARGET} 152 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 153 @mv ${.TARGET}.tmp ${.TARGET} 154 155all: objwarn 156 157.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 158OBJS+= ${SRCS:N*.h:R:S/$/.o/} 159.endif 160 161.if defined(LIB) && !empty(LIB) 162_LIBS= lib${LIB}.a 163 164lib${LIB}.a: ${OBJS} ${STATICOBJS} 165 @${ECHO} building static ${LIB} library 166 @rm -f ${.TARGET} 167 @${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 168 ${RANLIB} ${.TARGET} 169.endif 170 171.if !defined(INTERNALLIB) 172 173.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 174_LIBS+= lib${LIB}_p.a 175POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 176 177lib${LIB}_p.a: ${POBJS} 178 @${ECHO} building profiled ${LIB} library 179 @rm -f ${.TARGET} 180 @${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 181 ${RANLIB} ${.TARGET} 182.endif 183 184.if defined(SHLIB_NAME) || \ 185 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 186SOBJS+= ${OBJS:.o=.So} 187.endif 188 189.if defined(SHLIB_NAME) 190_LIBS+= ${SHLIB_NAME} 191 192${SHLIB_NAME}: ${SOBJS} 193 @${ECHO} building shared library ${SHLIB_NAME} 194 @rm -f ${.TARGET} ${SHLIB_LINK} 195.if defined(SHLIB_LINK) 196 @ln -fs ${.TARGET} ${SHLIB_LINK} 197.endif 198.if ${OBJFORMAT} == aout 199 @${CC} -shared -Wl,-x,-assert,pure-text \ 200 -o ${.TARGET} \ 201 `lorder ${SOBJS} | tsort -q` ${LDADD} 202.else 203 @${CC} ${LDFLAGS} -shared -Wl,-x \ 204 -o ${.TARGET} -Wl,-soname,${SONAME} \ 205 `lorder ${SOBJS} | tsort -q` ${LDADD} 206.endif 207.endif 208 209.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 210_LIBS+= lib${LIB}_pic.a 211 212lib${LIB}_pic.a: ${SOBJS} 213 @${ECHO} building special pic ${LIB} library 214 @rm -f ${.TARGET} 215 @${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 216 ${RANLIB} ${.TARGET} 217.endif 218 219.if defined(WANT_LINT) && defined(LIB) && !empty(LIB) 220LINTLIB= llib-l${LIB}.ln 221_LIBS+= ${LINTLIB} 222LINTOBJS+= ${SRCS:M*.c:.c=.ln} 223 224${LINTLIB}: ${LINTOBJS} 225 @${ECHO} building lint library ${.TARGET} 226 @rm -f ${.TARGET} 227 ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 228.endif 229 230.endif !defined(INTERNALLIB) 231 232all: ${_LIBS} 233 234.if !defined(NOMAN) 235all: _manpages 236.endif 237 238.if !target(clean) 239clean: 240.if defined(CLEANFILES) && !empty(CLEANFILES) 241 rm -f ${CLEANFILES} 242.endif 243.if defined(LIB) && !empty(LIB) 244 rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 245.endif 246.if !defined(INTERNALLIB) 247.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 248 rm -f ${POBJS} ${POBJS:S/$/.tmp/} 249.endif 250.if defined(SHLIB_NAME) || \ 251 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 252 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 253.endif 254.if defined(SHLIB_NAME) 255.if defined(SHLIB_LINK) 256 rm -f ${SHLIB_LINK} 257.endif 258.if defined(LIB) && !empty(LIB) 259 rm -f lib${LIB}.so.* lib${LIB}.so 260.endif 261.endif 262.if defined(WANT_LINT) && defined(LIB) && !empty(LIB) 263 rm -f ${LINTOBJS} 264.endif 265.endif !defined(INTERNALLIB) 266.if defined(_LIBS) && !empty(_LIBS) 267 rm -f ${_LIBS} 268.endif 269.if defined(CLEANDIRS) && !empty(CLEANDIRS) 270 rm -rf ${CLEANDIRS} 271.endif 272.endif 273 274_EXTRADEPEND: 275 @TMP=_depend$$$$; \ 276 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 277 > $$TMP; \ 278 mv $$TMP ${DEPENDFILE} 279.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 280.if ${OBJFORMAT} == aout 281 echo ${SHLIB_NAME}: \ 282 `${CC} -shared -Wl,-f ${LDADD}` \ 283 >> ${DEPENDFILE} 284.else 285.if defined(DPADD) && !empty(DPADD) 286 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 287.endif 288.endif 289.endif 290 291.if !target(install) 292 293.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 294SHLINSTALLFLAGS+= -fschg 295.endif 296 297_INSTALLFLAGS:= ${INSTALLFLAGS} 298.for ie in ${INSTALLFLAGS_EDIT} 299_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 300.endfor 301_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 302.for ie in ${INSTALLFLAGS_EDIT} 303_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 304.endfor 305 306.if !defined(INTERNALLIB) 307realinstall: _libinstall 308.ORDER: beforeinstall _libinstall 309_libinstall: 310.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB) 311 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 312 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 313.endif 314.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 315 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 316 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 317.endif 318.if defined(SHLIB_NAME) 319 ${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 320 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 321 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 322.if defined(SHLIB_LINK) 323 ln -fs ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK} 324.endif 325.endif 326.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 327 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 328 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 329.endif 330.if defined(WANT_LINT) && defined(LIB) && !empty(LIB) 331 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 332 ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR} 333.endif 334.endif !defined(INTERNALLIB) 335 336.include <bsd.files.mk> 337.include <bsd.incs.mk> 338.include <bsd.links.mk> 339 340.if !defined(NOMAN) 341realinstall: _maninstall 342.ORDER: beforeinstall _maninstall 343.endif 344 345.endif 346 347.if !target(lint) 348lint: ${SRCS:M*.c} 349 ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 350.endif 351 352.if !defined(NOMAN) 353.include <bsd.man.mk> 354.endif 355 356.include <bsd.dep.mk> 357 358.if !exists(${.OBJDIR}/${DEPENDFILE}) 359.if defined(LIB) && !empty(LIB) 360${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 361.endif 362.if defined(SHLIB_NAME) || \ 363 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 364${SOBJS}: ${SRCS:M*.h} 365.endif 366.endif 367 368.include <bsd.obj.mk> 369 370.include <bsd.sys.mk> 371