1# $OpenBSD: bsd.lib.mk,v 1.61 2011/07/16 23:34:21 guenther Exp $ 2# $NetBSD: bsd.lib.mk,v 1.67 1996/01/17 20:39:26 mycroft Exp $ 3# @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 4 5.include <bsd.own.mk> # for 'NOPIC' definition 6 7.if exists(${.CURDIR}/../Makefile.inc) 8.include "${.CURDIR}/../Makefile.inc" 9.endif 10 11.if exists(${.CURDIR}/shlib_version) 12.include "${.CURDIR}/shlib_version" 13.if defined(LIB) && defined(LIB${LIB}_VERSION) 14SHLIB_MAJOR=${LIB${LIB}_VERSION:R} 15SHLIB_MINOR=${LIB${LIB}_VERSION:E} 16.else 17SHLIB_MAJOR=${major} 18SHLIB_MINOR=${minor} 19.endif 20.endif 21 22.MAIN: all 23 24# prefer .S to a .c, add .po, remove stuff not used in the BSD libraries. 25# .so used for PIC object files. .ln used for lint output files. 26# .m for objective c files. 27.SUFFIXES: 28.SUFFIXES: .out .o .go .po .so .S .s .c .cc .C .cxx .f .y .l .ln .m4 .m 29 30.c.o: 31 @echo "${COMPILE.c} ${.IMPSRC} -o ${.TARGET}" 32 @${COMPILE.c} ${.IMPSRC} -o ${.TARGET}.o 33 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 34 @rm -f ${.TARGET}.o 35 36.c.go: 37 @echo "${COMPILE.c} -g ${.IMPSRC} -o ${.TARGET}" 38 @${COMPILE.c} -g ${.IMPSRC} -o ${.TARGET}.o 39 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 40 @rm -f ${.TARGET}.o 41 42.c.po: 43 @echo "${COMPILE.c} -p ${.IMPSRC} -o ${.TARGET}" 44 @${COMPILE.c} -p ${.IMPSRC} -o ${.TARGET}.o 45 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 46 @rm -f ${.TARGET}.o 47 48.c.so: 49 @echo "${COMPILE.c} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}" 50 @${COMPILE.c} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o 51 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 52 @rm -f ${.TARGET}.o 53 54.c.ln: 55 ${LINT} ${LINTFLAGS} ${CFLAGS:M-[IDU]*} ${CPPFLAGS:M-[IDU]*} -i ${.IMPSRC} 56 57.cc.o .C.o .cxx.o: 58 @echo "${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}" 59 @${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}.o 60 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 61 @rm -f ${.TARGET}.o 62 63.cc.go .C.go .cxx.go: 64 @echo "${COMPILE.cc} -g ${.IMPSRC} -o ${.TARGET}" 65 @${COMPILE.cc} -g ${.IMPSRC} -o ${.TARGET}.o 66 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 67 @rm -f ${.TARGET}.o 68 69.cc.po .C.po .cxx.po: 70 @echo "${COMPILE.cc} -p ${.IMPSRC} -o ${.TARGET}" 71 @${COMPILE.cc} -p ${.IMPSRC} -o ${.TARGET}.o 72 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 73 @rm -f ${.TARGET}.o 74 75.cc.so .C.so .cxx.so: 76 @echo "${COMPILE.cc} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}" 77 @${COMPILE.cc} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o 78 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 79 @rm -f ${.TARGET}.o 80 81# Fortran 77 82.f.o: 83 @echo "${COMPILE.f} ${.IMPSRC} -o ${.TARGET}" 84 @${COMPILE.f} ${.IMPSRC} -o ${.TARGET}.o 85 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 86 @rm -f ${.TARGET}.o 87 88.f.go: 89 @echo "${COMPILE.f} -g ${.IMPSRC} -o ${.TARGET}" 90 @${COMPILE.f} -g ${.IMPSRC} -o ${.TARGET}.o 91 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 92 @rm -f ${.TARGET}.o 93 94.f.po: 95 @echo "${COMPILE.f} -p ${.IMPSRC} -o ${.TARGET}" 96 @${COMPILE.f} -p ${.IMPSRC} -o ${.TARGET}.o 97 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 98 @rm -f ${.TARGET}.o 99 100.f.so: 101 @echo "${COMPILE.f} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}" 102 @${COMPILE.f} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o 103 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 104 @rm -f ${.TARGET}.o 105 106.S.o .s.o: 107.if (${MACHINE_ARCH} == "arm") 108 @echo ${COMPILE.S:Q} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} 109 @${COMPILE.S} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o 110.else 111 @echo "${CPP} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 112 ${AS} -o ${.TARGET}" 113 @${CPP} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 114 ${AS} -o ${.TARGET}.o 115.endif 116 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 117 @rm -f ${.TARGET}.o 118 119.S.go .s.go: 120 @echo "${CPP} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} |\ 121 ${AS} -o ${.TARGET}" 122 @${CPP} ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 123 ${AS} -o ${.TARGET}.o 124 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 125 @rm -f ${.TARGET}.o 126 127.S.po .s.po: 128 @echo "${CPP} -DPROF ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} |\ 129 ${AS} -o ${.TARGET}" 130 @${CPP} -DPROF ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 131 ${AS} -o ${.TARGET}.o 132 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 133 @rm -f ${.TARGET}.o 134 135.S.so .s.so: 136 @echo "${CPP} -DPIC ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 137 ${AS} ${ASPICFLAG} -o ${.TARGET}" 138 @${CPP} -DPIC ${CPPFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 139 ${AS} ${ASPICFLAG} -o ${.TARGET}.o 140 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 141 @rm -f ${.TARGET}.o 142 143.if ${WARNINGS:L} == "yes" 144CFLAGS+= ${CDIAGFLAGS} 145CXXFLAGS+= ${CXXDIAGFLAGS} 146.endif 147CFLAGS+= ${COPTS} 148CXXFLAGS+= ${CXXOPTS} 149 150.if ${MACHINE} != "zaurus" 151DEBUG?= -g 152.endif 153 154_LIBS=lib${LIB}.a 155.if (${DEBUGLIBS:L} == "yes") 156_LIBS+=lib${LIB}_g.a 157.endif 158.if !defined(NOPROFILE) 159_LIBS+=lib${LIB}_p.a 160.endif 161 162.if !defined(NOPIC) 163.if (${MACHINE_CPU} != "mips64") 164_LIBS+=lib${LIB}_pic.a 165.endif 166.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 167_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 168.endif 169.endif 170 171.if defined(WANTLINT) && ${WANTLINT:L} != "no" 172_LIBS+=llib-l${LIB}.ln 173.endif 174 175all: ${_LIBS} _SUBDIRUSE 176 177OBJS+= ${SRCS:N*.h:R:S/$/.o/} 178 179lib${LIB}.a:: ${OBJS} 180 @echo building standard ${LIB} library 181 @rm -f lib${LIB}.a 182 @${AR} cq lib${LIB}.a `${LORDER} ${OBJS} | tsort -q` 183 ${RANLIB} lib${LIB}.a 184 185GOBJS+= ${OBJS:.o=.go} 186lib${LIB}_g.a:: ${GOBJS} 187 @echo building debugging ${LIB} library 188 @rm -f lib${LIB}_g.a 189 @${AR} cq lib${LIB}_g.a `${LORDER} ${GOBJS} | tsort -q` 190 ${RANLIB} lib${LIB}_g.a 191 192POBJS+= ${OBJS:.o=.po} 193lib${LIB}_p.a:: ${POBJS} 194 @echo building profiled ${LIB} library 195 @rm -f lib${LIB}_p.a 196 @${AR} cq lib${LIB}_p.a `${LORDER} ${POBJS} | tsort -q` 197 ${RANLIB} lib${LIB}_p.a 198 199SOBJS+= ${OBJS:.o=.so} 200lib${LIB}_pic.a:: ${SOBJS} 201 @echo building shared object ${LIB} library 202 @rm -f lib${LIB}_pic.a 203 @${AR} cq lib${LIB}_pic.a `${LORDER} ${SOBJS} | tsort -q` 204 ${RANLIB} lib${LIB}_pic.a 205 206lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS} ${DPADD} 207 @echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\) 208 @rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 209 ${CC} -shared ${PICFLAG} \ 210 -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \ 211 `${LORDER} ${SOBJS}|tsort -q` ${LDADD} 212 213LOBJS+= ${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln} 214LLIBS?= -lc 215llib-l${LIB}.ln: ${LOBJS} 216 @echo building llib-l${LIB}.ln 217 @rm -f llib-l${LIB}.ln 218 @${LINT} -C${LIB} ${LOBJS} ${LLIBS} 219 220.if !target(clean) 221clean: _SUBDIRUSE 222 rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES} 223 rm -f lib${LIB}.a ${OBJS} 224 rm -f lib${LIB}_g.a ${GOBJS} 225 rm -f lib${LIB}_p.a ${POBJS} 226 rm -f lib${LIB}_pic.a lib${LIB}.so.*.* ${SOBJS} 227 rm -f llib-l${LIB}.ln ${LOBJS} 228.endif 229 230cleandir: _SUBDIRUSE clean 231 232.if defined(SRCS) 233afterdepend: .depend 234 @(TMP=`mktemp -q /tmp/_dependXXXXXXXXXX`; \ 235 if [ $$? -ne 0 ]; then \ 236 echo "$$0: cannot create temp file, exiting..."; \ 237 exit 1; \ 238 fi; \ 239 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' \ 240 < .depend > $$TMP; \ 241 mv $$TMP .depend) 242.endif 243 244.if !target(install) 245.if !target(beforeinstall) 246beforeinstall: 247.endif 248 249realinstall: 250# ranlib lib${LIB}.a 251 ${INSTALL} ${INSTALL_COPY} -S -o ${LIBOWN} -g ${LIBGRP} -m 600 lib${LIB}.a \ 252 ${DESTDIR}${LIBDIR}/lib${LIB}.a 253.if (${INSTALL_COPY} != "-p") 254 ${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}.a 255.endif 256 chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}.a 257.if (${DEBUGLIBS:L} == "yes") 258# ranlib lib${LIB}_g.a 259 ${INSTALL} ${INSTALL_COPY} -S -o ${LIBOWN} -g ${LIBGRP} -m 600 \ 260 lib${LIB}_g.a ${DESTDIR}${LIBDIR}/debug/lib${LIB}.a 261.if (${INSTALL_COPY} != "-p") 262 ${RANLIB} -t ${DESTDIR}${LIBDIR}/debug/lib${LIB}.a 263.endif 264 chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/debug/lib${LIB}.a 265.endif 266.if !defined(NOPROFILE) 267# ranlib lib${LIB}_p.a 268 ${INSTALL} ${INSTALL_COPY} -S -o ${LIBOWN} -g ${LIBGRP} -m 600 \ 269 lib${LIB}_p.a ${DESTDIR}${LIBDIR} 270.if (${INSTALL_COPY} != "-p") 271 ${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 272.endif 273 chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 274.endif 275.if !defined(NOPIC) && (${MACHINE_CPU} != "mips64") 276# ranlib lib${LIB}_pic.a 277 ${INSTALL} ${INSTALL_COPY} -S -o ${LIBOWN} -g ${LIBGRP} -m 600 \ 278 lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 279.if (${INSTALL_COPY} != "-p") 280 ${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 281.endif 282 chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 283.endif 284.if !defined(NOPIC) && defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 285 ${INSTALL} ${INSTALL_COPY} -S -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 286 lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} ${DESTDIR}${LIBDIR} 287.endif 288.if defined(WANTLINT) && ${WANTLINT:L} != "no" 289 ${INSTALL} ${INSTALL_COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 290 llib-l${LIB}.ln ${DESTDIR}${LINTLIBDIR} 291.endif 292.if defined(LINKS) && !empty(LINKS) 293. for lnk file in ${LINKS} 294 @l=${DESTDIR}${lnk}; \ 295 t=${DESTDIR}${file}; \ 296 echo $$t -\> $$l; \ 297 rm -f $$t; ln $$l $$t 298. endfor 299.endif 300 301install: maninstall _SUBDIRUSE 302maninstall: afterinstall 303afterinstall: realinstall 304realinstall: beforeinstall 305.endif 306 307.if !defined(NOMAN) 308.include <bsd.man.mk> 309.endif 310 311.if !defined(NONLS) 312.include <bsd.nls.mk> 313.endif 314 315.include <bsd.obj.mk> 316.include <bsd.dep.mk> 317.include <bsd.subdir.mk> 318.include <bsd.sys.mk> 319