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