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