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