bsd.lib.mk revision 99256
198937Sdes# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 298937Sdes# $FreeBSD: head/share/mk/bsd.lib.mk 99256 2002-07-02 12:16:54Z ru $ 398937Sdes# 498937Sdes 598937Sdes.include <bsd.init.mk> 6124208Sdes 7126274Sdes# Set up the variables controlling shared libraries. After this section, 898937Sdes# SHLIB_NAME will be defined only if we are to create a shared library. 998937Sdes# SHLIB_LINK will be defined only if we are to create a link to it. 1098937Sdes# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive. 1198937Sdes.if defined(NOPIC) 12126274Sdes.undef SHLIB_NAME 13106121Sdes.undef INSTALL_PIC_ARCHIVE 1498937Sdes.else 1598937Sdes.if ${OBJFORMAT} == elf 1698937Sdes.if !defined(SHLIB_NAME) && defined(SHLIB_MAJOR) 1798937SdesSHLIB_NAME= lib${LIB}.so.${SHLIB_MAJOR} 1898937SdesSHLIB_LINK?= lib${LIB}.so 19126274Sdes.endif 20126274SdesSONAME?= ${SHLIB_NAME} 21126274Sdes.else 2298937Sdes.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 2398937SdesSHLIB_NAME?= lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 2498937Sdes.endif 2598937Sdes.endif 2698937Sdes.endif 2798937Sdes 2898937Sdes.if defined(DEBUG_FLAGS) 2998937SdesCFLAGS+= ${DEBUG_FLAGS} 3098937Sdes.endif 3198937Sdes 3298937Sdes.if !defined(DEBUG_FLAGS) 3398937SdesSTRIP?= -s 3498937Sdes.endif 3598937Sdes 36124208Sdes.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES) 3798937Sdes.include <bsd.libnames.mk> 3898937Sdes.endif 3998937Sdes 40126274Sdes# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 4198937Sdes# .So used for PIC object files 4298937Sdes.SUFFIXES: 4398937Sdes.SUFFIXES: .out .o .po .So .S .s .asm .c .cc .cpp .cxx .m .C .f .y .l .ln 4498937Sdes 4598937Sdes.if !defined(PICFLAG) 4698937Sdes.if ${MACHINE_ARCH} == "sparc64" 4798937SdesPICFLAG=-fPIC 4898937Sdes.else 4998937SdesPICFLAG=-fpic 5098937Sdes.endif 5198937Sdes.endif 5298937Sdes 5398937Sdes.c.ln: 5498937Sdes ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \ 5598937Sdes touch ${.TARGET} 5698937Sdes 57126274Sdes.cc.ln .C.ln .cpp.ln .cxx.ln: 5898937Sdes ${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \ 5998937Sdes touch ${.TARGET} 6098937Sdes 6198937Sdes.c.o: 6298937Sdes ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 6398937Sdes @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 6498937Sdes @mv ${.TARGET}.tmp ${.TARGET} 6598937Sdes 6698937Sdes.c.po: 6798937Sdes ${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 6898937Sdes @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 6998937Sdes @mv ${.TARGET}.tmp ${.TARGET} 7098937Sdes 7198937Sdes.c.So: 7298937Sdes ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 7398937Sdes @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 7498937Sdes @mv ${.TARGET}.tmp ${.TARGET} 7598937Sdes 76126274Sdes.cc.o .C.o .cpp.o .cxx.o: 7798937Sdes ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 7898937Sdes @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 7998937Sdes @mv ${.TARGET}.tmp ${.TARGET} 8098937Sdes 8198937Sdes.cc.po .C.po .cpp.po .cxx.po: 8298937Sdes ${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 8398937Sdes @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 8498937Sdes @mv ${.TARGET}.tmp ${.TARGET} 8598937Sdes 8698937Sdes.cc.So .C.So .cpp.So .cxx.So: 8798937Sdes ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 8898937Sdes @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 8998937Sdes @mv ${.TARGET}.tmp ${.TARGET} 9098937Sdes 9198937Sdes.f.o: 9298937Sdes ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 9398937Sdes @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 9498937Sdes @mv ${.TARGET}.tmp ${.TARGET} 9598937Sdes 9698937Sdes.f.po: 9798937Sdes ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 9898937Sdes @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 9998937Sdes @mv ${.TARGET}.tmp ${.TARGET} 10098937Sdes 10198937Sdes.f.So: 10298937Sdes ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 10398937Sdes @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 104124208Sdes @mv ${.TARGET}.tmp ${.TARGET} 105124208Sdes 10698937Sdes.m.o: 107126274Sdes ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 108126274Sdes @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 109126274Sdes @mv ${.TARGET}.tmp ${.TARGET} 11098937Sdes 11198937Sdes.m.po: 112126274Sdes ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} 113126274Sdes @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 114126274Sdes @mv ${.TARGET}.tmp ${.TARGET} 11598937Sdes 11698937Sdes.m.So: 117126274Sdes ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 11898937Sdes @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 11998937Sdes @mv ${.TARGET}.tmp ${.TARGET} 12098937Sdes 12198937Sdes.s.o .asm.o: 12298937Sdes ${CC} -x assembler-with-cpp ${CFLAGS} ${AINC} -c \ 123126274Sdes ${.IMPSRC} -o ${.TARGET} 12498937Sdes @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 12598937Sdes @mv ${.TARGET}.tmp ${.TARGET} 126126274Sdes 12798937Sdes.s.po .asm.po: 12898937Sdes ${CC} -x assembler-with-cpp -DPROF ${CFLAGS} ${AINC} -c \ 12998937Sdes ${.IMPSRC} -o ${.TARGET} 13098937Sdes @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET} 13198937Sdes @mv ${.TARGET}.tmp ${.TARGET} 13298937Sdes 133126274Sdes.s.So .asm.So: 134126274Sdes ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ 135126274Sdes ${AINC} -c ${.IMPSRC} -o ${.TARGET} 13698937Sdes @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 137126274Sdes @mv ${.TARGET}.tmp ${.TARGET} 13898937Sdes 13998937Sdes.S.o: 14098937Sdes ${CC} ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 14198937Sdes @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 142126274Sdes @mv ${.TARGET}.tmp ${.TARGET} 14398937Sdes 14498937Sdes.S.po: 14598937Sdes ${CC} -DPROF ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 14698937Sdes @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET} 14798937Sdes @mv ${.TARGET}.tmp ${.TARGET} 14898937Sdes 14998937Sdes.S.So: 15098937Sdes ${CC} ${PICFLAG} -DPIC ${CFLAGS} ${AINC} -c ${.IMPSRC} \ 15198937Sdes -o ${.TARGET} 15298937Sdes @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 15398937Sdes @mv ${.TARGET}.tmp ${.TARGET} 15498937Sdes 15598937Sdesall: objwarn 15698937Sdes 15798937Sdes.if defined(LIB) && !empty(LIB) 15898937Sdes_LIBS= lib${LIB}.a 15998937SdesOBJS+= ${SRCS:N*.h:R:S/$/.o/} 16098937Sdes 16198937Sdeslib${LIB}.a: ${OBJS} ${STATICOBJS} 16298937Sdes @${ECHO} building static ${LIB} library 16398937Sdes @rm -f ${.TARGET} 16498937Sdes @${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 16598937Sdes ${RANLIB} ${.TARGET} 16698937Sdes 16798937Sdes.if !defined(INTERNALLIB) 16898937Sdes 16998937Sdes.if !defined(NOPROFILE) 17098937Sdes_LIBS+= lib${LIB}_p.a 17198937SdesPOBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 172126274Sdes 17398937Sdeslib${LIB}_p.a: ${POBJS} 17498937Sdes @${ECHO} building profiled ${LIB} library 175126274Sdes @rm -f ${.TARGET} 17698937Sdes @${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 17798937Sdes ${RANLIB} ${.TARGET} 17898937Sdes.endif 179126274Sdes 18098937SdesSOBJS+= ${OBJS:.o=.So} 18198937Sdes 18298937Sdes.if defined(SHLIB_NAME) 18398937Sdes_LIBS+= ${SHLIB_NAME} 18498937Sdes 18598937Sdes${SHLIB_NAME}: ${SOBJS} 186126274Sdes @${ECHO} building shared library ${SHLIB_NAME} 18798937Sdes @rm -f ${.TARGET} ${SHLIB_LINK} 18898937Sdes.if defined(SHLIB_LINK) 18998937Sdes @ln -fs ${.TARGET} ${SHLIB_LINK} 19098937Sdes.endif 19198937Sdes.if ${OBJFORMAT} == aout 192126274Sdes @${CC} -shared -Wl,-x,-assert,pure-text \ 19398937Sdes -o ${.TARGET} \ 19498937Sdes `lorder ${SOBJS} | tsort -q` ${LDADD} 19598937Sdes.else 19698937Sdes @${CC} ${LDFLAGS} -shared -Wl,-x \ 19798937Sdes -o ${.TARGET} -Wl,-soname,${SONAME} \ 198126274Sdes `lorder ${SOBJS} | tsort -q` ${LDADD} 19998937Sdes.endif 20098937Sdes.endif 20198937Sdes 20298937Sdes.if defined(INSTALL_PIC_ARCHIVE) 203126274Sdes_LIBS+= lib${LIB}_pic.a 204 205lib${LIB}_pic.a: ${SOBJS} 206 @${ECHO} building special pic ${LIB} library 207 @rm -f ${.TARGET} 208 @${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 209 ${RANLIB} ${.TARGET} 210.endif 211 212.if defined(WANT_LINT) 213LINTLIB= llib-l${LIB}.ln 214_LIBS+= ${LINTLIB} 215LINTOBJS+= ${SRCS:M*.c:.c=.ln} 216 217${LINTLIB}: ${LINTOBJS} 218 @${ECHO} building lint library ${.TARGET} 219 @rm -f ${.TARGET} 220 ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 221.endif 222 223.endif !defined(INTERNALLIB) 224 225all: ${_LIBS} 226 227.endif defined(LIB) && !empty(LIB) 228 229.if !defined(NOMAN) 230all: _manpages 231.endif 232 233.if !target(clean) 234clean: 235.if defined(CLEANFILES) && !empty(CLEANFILES) 236 rm -f ${CLEANFILES} 237.endif 238.if defined(LIB) && !empty(LIB) 239 rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 240.if !defined(INTERNALLIB) 241.if !defined(NOPROFILE) 242 rm -f ${POBJS} ${POBJS:S/$/.tmp/} 243.endif 244 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 245.if defined(SHLIB_NAME) 246 rm -f ${SHLIB_LINK} lib${LIB}.so.* lib${LIB}.so 247.endif 248.if defined(WANT_LINT) 249 rm -f ${LINTOBJS} 250.endif 251.endif !defined(INTERNALLIB) 252 rm -f ${_LIBS} 253.endif defined(LIB) && !empty(LIB) 254.if defined(CLEANDIRS) && !empty(CLEANDIRS) 255 rm -rf ${CLEANDIRS} 256.endif 257.endif 258 259_EXTRADEPEND: 260 @TMP=_depend$$$$; \ 261 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 262 > $$TMP; \ 263 mv $$TMP ${DEPENDFILE} 264.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 265.if ${OBJFORMAT} == aout 266 echo ${SHLIB_NAME}: \ 267 `${CC} -shared -Wl,-f ${LDADD}` \ 268 >> ${DEPENDFILE} 269.else 270.if defined(DPADD) && !empty(DPADD) 271 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 272.endif 273.endif 274.endif 275 276.if !target(install) 277 278.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 279SHLINSTALLFLAGS+= -fschg 280.endif 281 282_INSTALLFLAGS:= ${INSTALLFLAGS} 283.for ie in ${INSTALLFLAGS_EDIT} 284_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 285.endfor 286_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 287.for ie in ${INSTALLFLAGS_EDIT} 288_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 289.endfor 290 291.if defined(LIB) && !empty(LIB) && !defined(INTERNALLIB) 292realinstall: _libinstall 293_libinstall: 294.if !defined(NOINSTALLLIB) 295 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 296 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 297.endif 298.if !defined(NOPROFILE) 299 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 300 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 301.endif 302.if defined(SHLIB_NAME) 303 ${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 304 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 305 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 306.if defined(SHLIB_LINK) 307 ln -fs ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK} 308.endif 309.endif 310.if defined(INSTALL_PIC_ARCHIVE) 311 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 312 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 313.endif 314.if defined(WANT_LINT) 315 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 316 ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR} 317.endif 318.endif defined(LIB) && !empty(LIB) && !defined(INTERNALLIB) 319 320.include <bsd.files.mk> 321.include <bsd.incs.mk> 322.include <bsd.links.mk> 323 324.if !defined(NOMAN) 325realinstall: _maninstall 326.endif 327 328.endif 329 330.if !target(lint) 331lint: ${SRCS:M*.c} 332 ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 333.endif 334 335.if !defined(NOMAN) 336.include <bsd.man.mk> 337.endif 338 339.include <bsd.dep.mk> 340 341.if defined(LIB) && !empty(LIB) 342.if !exists(${.OBJDIR}/${DEPENDFILE}) 343${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h} 344.endif 345.endif 346 347.include <bsd.obj.mk> 348 349.include <bsd.sys.mk> 350