Annotation of src/share/mk/bsd.lib.mk, Revision 1.106
1.106 ! mycroft 1: # $NetBSD: bsd.lib.mk,v 1.105 1997/05/17 02:01:08 mycroft Exp $
1.92 mikel 2: # @(#)bsd.lib.mk 8.3 (Berkeley) 4/22/94
1.1 cgd 3:
4: .if exists(${.CURDIR}/../Makefile.inc)
5: .include "${.CURDIR}/../Makefile.inc"
6: .endif
1.54 cgd 7:
1.97 mycroft 8: .include <bsd.own.mk>
9:
1.94 mycroft 10: .MAIN: all
1.96 mycroft 11: .PHONY: cleanlib libinstall
1.103 mycroft 12: realinstall: libinstall
1.98 mycroft 13: clean cleandir: cleanlib
1.1 cgd 14:
1.35 pk 15: .if exists(${.CURDIR}/shlib_version)
1.37 cgd 16: SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
17: SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
1.35 pk 18: .endif
1.1 cgd 19:
1.101 mycroft 20: # add additional suffixes not exported.
21: # .po is used for profiling object files.
22: # .so is used for PIC object files.
1.105 mycroft 23: .SUFFIXES: .out .a .ln .so .po .o .s .S .c .cc .C .F .f .r .y .l .cl .p .h .sh .m4
1.82 mikel 24:
1.86 jonathan 25:
26: # Set PICFLAGS to cc flags for producing position-independent code,
27: # if not already set. Includes -DPIC, if required.
28:
29: # Data-driven table using make variables to control how shared libraries
30: # are built for different platforms and object formats.
31: # SHLIB_TYPE: currently either "ELF" or "a.out".
32: # SHLIB_SOVERSION: version number to be compiled into a shared library
33: # via -soname. Usualy ${SHLIB_MAJOR} on ELF.
34: # NetBSD/pmax used to use ${SHLIB_MAJOR}.{SHLIB-MINOR}.
35: # SHLIB_LDSTARTFILE: ???
36: # SHLIB_LDENDTILE: ??
37: # CPICFLAGS: flags to compile .c files for .so objects.
38: # APICFLAGS: flags to assemble .S files for .so objects.
39:
40: .if (${MACHINE_ARCH} == "alpha")
41:
42: SHLIB_TYPE=ELF
43: SHLIB_LDSTARTFILE= ${DESTDIR}/usr/lib/crtbeginS.o
44: SHLIB_LDENDFILE= ${DESTDIR}/usr/lib/crtendS.o
45: SHLIB_SOVERSION=${SHLIB_MAJOR}
46: CPICFLAGS ?= -fpic -DPIC
47: APICFLAGS ?= -DPIC
48:
49: .elif (${MACHINE_ARCH} == "mips")
50:
51: SHLIB_TYPE=ELF
52: # still use gnu-derived ld.so on pmax; don't have or need lib<>.so support.
53: SHLIB_LDSTARTFILE=
54: SHLIB_LDENDFILE=
55: SHLIB_SOVERSION=${SHLIB_MAJOR}
56:
57: # On mips, all libs need to be compiled with ABIcalls, not just sharedlibs.
58: CPICFLAGS?=
59: APICFLAGS?=
60: #CPICFLAGS?= -fpic -DPIC
61: #APICFLAGS?= -DPIC
62:
63: # so turn shlib PIC flags on for ${CPP}, ${CC}, and ${AS} as follows:
64: AINC+=-DPIC -DABICALLS
65: COPTS+= -fPIC ${AINC}
66: AFLAGS+= -fPIC
67: AS+= -KPIC
68:
69: .else
70:
71: SHLIB_TYPE=a.out
1.88 cgd 72: SHLIB_LDSTARTFILE=
73: SHLIB_LDENDFILE=
1.86 jonathan 74: SHLIB_SOVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR}
75: CPICFLAGS?= -fpic -DPIC
76: APICFLAGS?= -fpic -DPIC
77:
78: .endif
79:
80:
1.82 mikel 81: CFLAGS+= ${COPTS}
1.1 cgd 82:
83: .c.o:
1.80 christos 84: @echo ${COMPILE.c:Q} ${.IMPSRC}
1.62 christos 85: @${COMPILE.c} ${.IMPSRC} -o ${.TARGET}.o
86: @${LD} -x -r ${.TARGET}.o -o ${.TARGET}
87: @rm -f ${.TARGET}.o
1.1 cgd 88:
89: .c.po:
1.80 christos 90: @echo ${COMPILE.c:Q} -pg ${.IMPSRC} -o ${.TARGET}
1.68 cgd 91: @${COMPILE.c} -pg ${.IMPSRC} -o ${.TARGET}.o
1.62 christos 92: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
93: @rm -f ${.TARGET}.o
1.17 mycroft 94:
1.27 pk 95: .c.so:
1.86 jonathan 96: @echo ${COMPILE.c:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}
97: @${COMPILE.c} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o
1.62 christos 98: @${LD} -x -r ${.TARGET}.o -o ${.TARGET}
99: @rm -f ${.TARGET}.o
1.27 pk 100:
1.58 cgd 101: .c.ln:
102: ${LINT} ${LINTFLAGS} ${CFLAGS:M-[IDU]*} -i ${.IMPSRC}
103:
1.18 mycroft 104: .cc.o .C.o:
1.80 christos 105: @echo ${COMPILE.cc:Q} ${.IMPSRC}
1.62 christos 106: @${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}.o
1.63 jtc 107: @${LD} -x -r ${.TARGET}.o -o ${.TARGET}
1.62 christos 108: @rm -f ${.TARGET}.o
1.17 mycroft 109:
1.18 mycroft 110: .cc.po .C.po:
1.80 christos 111: @echo ${COMPILE.cc:Q} -pg ${.IMPSRC} -o ${.TARGET}
1.68 cgd 112: @${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET}.o
1.62 christos 113: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
114: @rm -f ${.TARGET}.o
1.28 cgd 115:
116: .cc.so .C.so:
1.86 jonathan 117: @echo ${COMPILE.cc:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}
118: @${COMPILE.cc} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o
1.62 christos 119: @${LD} -x -r ${.TARGET}.o -o ${.TARGET}
120: @rm -f ${.TARGET}.o
1.1 cgd 121:
1.40 cgd 122: .S.o .s.o:
1.80 christos 123: @echo ${COMPILE.S:Q} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC}
1.69 jtc 124: @${COMPILE.S} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
1.62 christos 125: @${LD} -x -r ${.TARGET}.o -o ${.TARGET}
126: @rm -f ${.TARGET}.o
1.1 cgd 127:
1.40 cgd 128: .S.po .s.po:
1.80 christos 129: @echo ${COMPILE.S:Q} -DGPROF -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}
1.75 jtc 130: @${COMPILE.S} -DGPROF -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
1.62 christos 131: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
132: @rm -f ${.TARGET}.o
1.1 cgd 133:
1.40 cgd 134: .S.so .s.so:
1.86 jonathan 135: @echo ${COMPILE.S:Q} ${APICFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}
136: @${COMPILE.S} ${APICFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
1.62 christos 137: @${LD} -x -r ${.TARGET}.o -o ${.TARGET}
138: @rm -f ${.TARGET}.o
1.27 pk 139:
1.58 cgd 140:
1.1 cgd 141: .if !defined(NOPROFILE)
142: _LIBS=lib${LIB}.a lib${LIB}_p.a
143: .else
144: _LIBS=lib${LIB}.a
145: .endif
146:
1.27 pk 147: .if !defined(NOPIC)
148: _LIBS+=lib${LIB}_pic.a
1.37 cgd 149: .if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
150: _LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
1.27 pk 151: .endif
1.35 pk 152: .endif
1.27 pk 153:
1.58 cgd 154: .if !defined(NOLINT)
155: _LIBS+=llib-l${LIB}.ln
1.27 pk 156: .endif
157:
1.102 mycroft 158: all: ${SRCS} ${_LIBS}
1.1 cgd 159:
1.90 christos 160: __archivebuild: .USE
1.89 christos 161: @rm -f ${.TARGET}
1.93 thorpej 162: @${AR} cq ${.TARGET} `NM=${NM} lorder ${.ALLSRC} | tsort -q`
1.89 christos 163: ${RANLIB} ${.TARGET}
164:
165: __archiveinstall: .USE
166: ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m 600 ${.ALLSRC} \
167: ${.TARGET}
168: ${RANLIB} -t ${.TARGET}
169: chmod ${LIBMODE} ${.TARGET}
170:
1.104 mycroft 171: DPSRCS+= ${SRCS:M*.l:.l=.c} ${SRCS:M*.y:.y=.c}
1.103 mycroft 172: CLEANFILES+= ${DPSRCS}
173:
174: OBJS+= ${SRCS:N*.h:N*.sh:R:S/$/.o/g}
1.89 christos 175: lib${LIB}.a:: ${OBJS} __archivebuild
1.1 cgd 176: @echo building standard ${LIB} library
177:
1.103 mycroft 178: POBJS+= ${OBJS:.o=.po}
1.89 christos 179: lib${LIB}_p.a:: ${POBJS} __archivebuild
1.1 cgd 180: @echo building profiled ${LIB} library
181:
1.103 mycroft 182: SOBJS+= ${OBJS:.o=.so}
1.89 christos 183: lib${LIB}_pic.a:: ${SOBJS} __archivebuild
1.27 pk 184: @echo building shared object ${LIB} library
185:
1.88 cgd 186: lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: lib${LIB}_pic.a ${DPADD} \
187: ${SHLIB_LDSTARTFILE} ${SHLIB_LDENDFILE}
1.38 cgd 188: @echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
1.37 cgd 189: @rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
1.86 jonathan 190: .if (${SHLIB_TYPE} == "a.out")
1.53 pk 191: $(LD) -x -Bshareable -Bforcearchive \
1.89 christos 192: -o ${.TARGET} lib${LIB}_pic.a ${LDADD}
1.86 jonathan 193: .elif (${SHLIB_TYPE} == "ELF")
1.89 christos 194: $(LD) -x -shared -o ${.TARGET} \
1.86 jonathan 195: -soname lib${LIB}.so.${SHLIB_SOVERSION} ${SHLIB_LDSTARTFILE} \
1.77 cgd 196: --whole-archive lib${LIB}_pic.a --no-whole-archive ${LDADD} \
1.86 jonathan 197: ${SHLIB_LDENDFILE}
1.72 cgd 198: .endif
1.35 pk 199:
1.103 mycroft 200: LOBJS+= ${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln}
201: LLIBS?= -lc
1.58 cgd 202: llib-l${LIB}.ln: ${LOBJS}
203: @echo building llib-l${LIB}.ln
204: @rm -f llib-l${LIB}.ln
205: @${LINT} -C${LIB} ${LOBJS} ${LLIBS}
1.1 cgd 206:
1.81 cgd 207: cleanlib:
1.48 mycroft 208: rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES}
1.59 cgd 209: rm -f lib${LIB}.a ${OBJS}
210: rm -f lib${LIB}_p.a ${POBJS}
1.61 cgd 211: rm -f lib${LIB}_pic.a lib${LIB}.so.*.* ${SOBJS}
1.59 cgd 212: rm -f llib-l${LIB}.ln ${LOBJS}
1.1 cgd 213:
1.26 mycroft 214: .if defined(SRCS)
1.64 christos 215: afterdepend: .depend
1.1 cgd 216: @(TMP=/tmp/_depend$$$$; \
1.79 cgd 217: sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so \1.ln:/' \
1.58 cgd 218: < .depend > $$TMP; \
1.1 cgd 219: mv $$TMP .depend)
1.26 mycroft 220: .endif
1.1 cgd 221:
1.97 mycroft 222: .if !target(libinstall)
1.89 christos 223: libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}.a
224: .if !defined(UPDATE)
225: .PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}.a
226: .endif
227: .if !defined(BUILD)
228: ${DESTDIR}${LIBDIR}/lib${LIB}.a: .MADE
229: .endif
230:
1.95 mycroft 231: .PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}.a
1.89 christos 232: ${DESTDIR}${LIBDIR}/lib${LIB}.a: lib${LIB}.a __archiveinstall
233:
1.12 cgd 234: .if !defined(NOPROFILE)
1.89 christos 235: libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
236: .if !defined(UPDATE)
237: .PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
1.32 pk 238: .endif
1.89 christos 239: .if !defined(BUILD)
240: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a: .MADE
241: .endif
242:
1.95 mycroft 243: .PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
1.89 christos 244: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a: lib${LIB}_p.a __archiveinstall
245: .endif
246:
1.39 pk 247: .if !defined(NOPIC)
1.89 christos 248: libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
249: .if !defined(UPDATE)
250: .PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
251: .endif
252: .if !defined(BUILD)
253: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: .MADE
1.33 pk 254: .endif
1.89 christos 255:
1.95 mycroft 256: .PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
1.89 christos 257: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}_pic.a __archiveinstall
258: .endif
259:
1.37 cgd 260: .if !defined(NOPIC) && defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
1.89 christos 261: libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
262: .if !defined(UPDATE)
263: .PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
264: .endif
265: .if !defined(BUILD)
266: ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: .MADE
267: .endif
1.92 mikel 268:
1.95 mycroft 269: .PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
1.89 christos 270: ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
271: ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} ${.ALLSRC} \
272: ${.TARGET}
1.86 jonathan 273: .if (${SHLIB_TYPE} == "ELF")
1.83 cgd 274: rm -f ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}
275: ln -s lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
276: ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}
277: rm -f ${DESTDIR}${LIBDIR}/lib${LIB}.so
278: ln -s lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
279: ${DESTDIR}${LIBDIR}/lib${LIB}.so
280: .endif
1.12 cgd 281: .endif
1.89 christos 282:
1.58 cgd 283: .if !defined(NOLINT)
1.89 christos 284: libinstall:: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln
285: .if !defined(UPDATE)
286: .PHONY: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln
287: .endif
288: .if !defined(BUILD)
289: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: .MADE
290: .endif
291:
1.95 mycroft 292: .PRECIOUS: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln
293: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: llib-l${LIB}.ln
1.73 thorpej 294: ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
1.58 cgd 295: llib-l${LIB}.ln ${DESTDIR}${LINTLIBDIR}
296: .endif
1.1 cgd 297: .endif
298:
1.10 mycroft 299: .if !defined(NOMAN)
1.1 cgd 300: .include <bsd.man.mk>
1.57 jtc 301: .endif
302:
303: .if !defined(NONLS)
304: .include <bsd.nls.mk>
1.10 mycroft 305: .endif
306:
1.22 mycroft 307: .include <bsd.obj.mk>
1.91 christos 308: .include <bsd.files.mk>
1.89 christos 309: .include <bsd.inc.mk>
1.106 ! mycroft 310: .include <bsd.links.mk>
1.24 mycroft 311: .include <bsd.dep.mk>
1.49 cgd 312: .include <bsd.subdir.mk>
1.66 christos 313: .include <bsd.sys.mk>
CVSweb <webmaster@jp.NetBSD.org>