Annotation of src/share/mk/bsd.lib.mk, Revision 1.102
1.102 ! robert 1: # $OpenBSD: bsd.lib.mk,v 1.101 2020/05/26 17:44:23 tb Exp $
1.5 mickey 2: # $NetBSD: bsd.lib.mk,v 1.67 1996/01/17 20:39:26 mycroft Exp $
1.1 deraadt 3: # @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91
4:
1.25 mickey 5: .include <bsd.own.mk> # for 'NOPIC' definition
6:
1.1 deraadt 7: .if exists(${.CURDIR}/../Makefile.inc)
8: .include "${.CURDIR}/../Makefile.inc"
9: .endif
10:
11: .if exists(${.CURDIR}/shlib_version)
1.33 espie 12: .include "${.CURDIR}/shlib_version"
1.55 bernd 13: .if defined(LIB) && defined(LIB${LIB}_VERSION)
14: SHLIB_MAJOR=${LIB${LIB}_VERSION:R}
15: SHLIB_MINOR=${LIB${LIB}_VERSION:E}
1.52 espie 16: .else
1.34 espie 17: SHLIB_MAJOR=${major}
18: SHLIB_MINOR=${minor}
1.52 espie 19: .endif
1.1 deraadt 20: .endif
21:
22: .MAIN: all
23:
24: # prefer .S to a .c, add .po, remove stuff not used in the BSD libraries.
1.62 jsg 25: # .so used for PIC object files.
1.70 guenther 26: # .do used for distrib "crunchgen" object files
1.20 espie 27: # .m for objective c files.
1.1 deraadt 28: .SUFFIXES:
1.77 guenther 29: .SUFFIXES: .out .o .po .so .do .S .s .c .cc .cpp .C .cxx .f .y .l .m4 .m
1.68 kettenis 30:
31: .if defined(NOPIE)
32: CFLAGS+= ${NOPIE_FLAGS}
1.72 jsg 33: CXXFLAGS+= ${NOPIE_FLAGS}
1.68 kettenis 34: AFLAGS+= ${NOPIE_FLAGS}
35: .endif
1.70 guenther 36:
1.1 deraadt 37: .c.o:
1.57 otto 38: @echo "${COMPILE.c} ${.IMPSRC} -o ${.TARGET}"
1.85 espie 39: @${COMPILE.c} ${DFLAGS} ${.IMPSRC} -o ${.TARGET}.o
40: @-mv $@.d $*.d
1.49 kettenis 41: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
1.1 deraadt 42: @rm -f ${.TARGET}.o
43:
44: .c.po:
1.49 kettenis 45: @echo "${COMPILE.c} -p ${.IMPSRC} -o ${.TARGET}"
1.85 espie 46: @${COMPILE.c} ${DFLAGS} -p ${.IMPSRC} -o ${.TARGET}.o
47: @-mv $@.d $*.d
1.1 deraadt 48: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
49: @rm -f ${.TARGET}.o
50:
51: .c.so:
1.49 kettenis 52: @echo "${COMPILE.c} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}"
1.85 espie 53: @${COMPILE.c} ${DFLAGS} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o
54: @-mv $@.d $*.d
1.49 kettenis 55: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
1.1 deraadt 56: @rm -f ${.TARGET}.o
57:
1.70 guenther 58: .c.do:
59: @echo "${COMPILE.c} ${DIST_CFLAGS} ${.IMPSRC} -o ${.TARGET}"
1.85 espie 60: @${COMPILE.c} ${DFLAGS} ${DIST_CFLAGS} ${.IMPSRC} -o ${.TARGET}.o
61: @-mv $@.d $*.d
1.70 guenther 62: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
63: @rm -f ${.TARGET}.o
64:
1.69 mpi 65: .cc.o .cpp.o .C.o .cxx.o:
1.49 kettenis 66: @echo "${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}"
1.85 espie 67: @${COMPILE.cc} ${DFLAGS} ${.IMPSRC} -o ${.TARGET}.o
68: @-mv $@.d $*.d
1.49 kettenis 69: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
1.1 deraadt 70: @rm -f ${.TARGET}.o
71:
1.69 mpi 72: .cc.po .cpp.po .C.po .cxx.po:
1.51 kettenis 73: @echo "${COMPILE.cc} -p ${.IMPSRC} -o ${.TARGET}"
1.85 espie 74: @${COMPILE.cc} ${DFLAGS} -p ${.IMPSRC} -o ${.TARGET}.o
75: @-mv $@.d $*.d
1.1 deraadt 76: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
77: @rm -f ${.TARGET}.o
78:
1.69 mpi 79: .cc.so .cpp.so .C.so .cxx.so:
1.49 kettenis 80: @echo "${COMPILE.cc} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}"
1.85 espie 81: @${COMPILE.cc} ${DFLAGS} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o
82: @-mv $@.d $*.d
1.49 kettenis 83: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
1.46 steven 84: @rm -f ${.TARGET}.o
85:
86: # Fortran 77
87: .f.o:
1.49 kettenis 88: @echo "${COMPILE.f} ${.IMPSRC} -o ${.TARGET}"
1.85 espie 89: @${COMPILE.f} ${DFLAGS} ${.IMPSRC} -o ${.TARGET}.o
90: @-mv $@.d $*.d
1.49 kettenis 91: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
1.46 steven 92: @rm -f ${.TARGET}.o
93:
94: .f.po:
1.49 kettenis 95: @echo "${COMPILE.f} -p ${.IMPSRC} -o ${.TARGET}"
1.85 espie 96: @${COMPILE.f} ${DFLAGS} -p ${.IMPSRC} -o ${.TARGET}.o
97: @-mv $@.d $*.d
1.46 steven 98: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
99: @rm -f ${.TARGET}.o
100:
101: .f.so:
1.49 kettenis 102: @echo "${COMPILE.f} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}"
1.85 espie 103: @${COMPILE.f} ${DFLAGS} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o
104: @-mv $@.d $*.d
1.49 kettenis 105: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
1.1 deraadt 106: @rm -f ${.TARGET}.o
107:
108: .S.o .s.o:
1.65 pascal 109: @echo "${COMPILE.S} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}"
1.85 espie 110: @${COMPILE.S} ${DFLAGS} -MF $@.d ${CFLAGS:M-[IDM]*} ${AINC} \
111: ${.IMPSRC} -o ${.TARGET}.o
112: @-mv $@.d $*.d
1.49 kettenis 113: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
1.1 deraadt 114: @rm -f ${.TARGET}.o
115:
116: .S.po .s.po:
1.65 pascal 117: @echo "${COMPILE.S} -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} \
118: -o ${.TARGET}"
1.85 espie 119: @${COMPILE.S} ${DFLAGS} -MF $@.d -DPROF ${CFLAGS:M-[IDM]*} ${AINC} \
120: ${.IMPSRC} -o ${.TARGET}.o
121: @-mv $@.d $*.d
1.1 deraadt 122: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
123: @rm -f ${.TARGET}.o
124:
125: .S.so .s.so:
1.95 guenther 126: @echo "${COMPILE.S} ${PICFLAG} -DSOLIB ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} \
1.65 pascal 127: -o ${.TARGET}"
1.95 guenther 128: @${COMPILE.S} ${DFLAGS} -MF $@.d ${PICFLAG} -DSOLIB ${CFLAGS:M-[IDM]*} \
1.85 espie 129: ${AINC} ${.IMPSRC} -o ${.TARGET}.o
130: @-mv $@.d $*.d
1.49 kettenis 131: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
1.1 deraadt 132: @rm -f ${.TARGET}.o
1.7 deraadt 133:
1.70 guenther 134: .S.do .s.do:
135: @echo "${COMPILE.S} ${CFLAGS:M-[ID]*} ${AINC} ${DIST_CFLAGS} \
136: ${.IMPSRC} -o ${.TARGET}"
1.85 espie 137: @${COMPILE.S} ${DFLAGS} -MF $@.d ${CFLAGS:M-[IDM]*} ${AINC} \
138: ${DIST_CFLAGS} ${.IMPSRC} -o ${.TARGET}.o
139: @-mv $@.d $*.d
1.70 guenther 140: @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
141: @rm -f ${.TARGET}.o
142:
1.30 espie 143: .if ${WARNINGS:L} == "yes"
144: CFLAGS+= ${CDIAGFLAGS}
145: CXXFLAGS+= ${CXXDIAGFLAGS}
146: .endif
1.18 millert 147: CFLAGS+= ${COPTS}
1.30 espie 148: CXXFLAGS+= ${CXXOPTS}
1.47 kettenis 149:
1.49 kettenis 150: DEBUG?= -g
1.39 pvalchev 151:
1.21 niklas 152: _LIBS=lib${LIB}.a
1.1 deraadt 153: .if !defined(NOPROFILE)
1.21 niklas 154: _LIBS+=lib${LIB}_p.a
1.1 deraadt 155: .endif
156:
157: .if !defined(NOPIC)
1.35 espie 158: .if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
1.73 guenther 159: FULLSHLIBNAME=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
160: _LIBS+=${FULLSHLIBNAME}
161: .endif
162:
1.75 deraadt 163: .if defined(LIBREBUILD)
164: _LIBS+=${FULLSHLIBNAME}.a
165:
166: .if exists(${.CURDIR}/Symbols.list)
167: SYMBOLSMAP=Symbols.map
168: .endif
169:
170: .endif
171:
1.73 guenther 172: .if defined(VERSION_SCRIPT)
173: ${FULLSHLIBNAME}: ${VERSION_SCRIPT}
174: LDADD+= -Wl,--version-script=${VERSION_SCRIPT}
1.1 deraadt 175: .endif
176: .endif
177:
178: all: ${_LIBS} _SUBDIRUSE
179:
1.84 espie 180: BUILDAFTER += ${_LIBS}
181:
1.61 guenther 182: OBJS+= ${SRCS:N*.h:R:S/$/.o/}
1.86 espie 183: DEPS+= ${OBJS:R:S/$/.d/}
1.87 espie 184:
185: _LEXINTM?=${SRCS:M*.l:.l=.c}
186: _YACCINTM?=${SRCS:M*.y:.y=.c}
187:
1.84 espie 188: BUILDAFTER += ${OBJS}
1.1 deraadt 189:
1.64 espie 190: lib${LIB}.a: ${OBJS}
1.1 deraadt 191: @echo building standard ${LIB} library
192: @rm -f lib${LIB}.a
1.80 guenther 193: @${AR} cqD lib${LIB}.a `${LORDER} ${OBJS} | tsort -q`
1.1 deraadt 194: ${RANLIB} lib${LIB}.a
195:
196: POBJS+= ${OBJS:.o=.po}
1.84 espie 197: BUILDAFTER += ${POBJS}
1.85 espie 198:
1.64 espie 199: lib${LIB}_p.a: ${POBJS}
1.1 deraadt 200: @echo building profiled ${LIB} library
201: @rm -f lib${LIB}_p.a
1.80 guenther 202: @${AR} cqD lib${LIB}_p.a `${LORDER} ${POBJS} | tsort -q`
1.1 deraadt 203: ${RANLIB} lib${LIB}_p.a
204:
205: SOBJS+= ${OBJS:.o=.so}
1.84 espie 206: BUILDAFTER += ${SOBJS}
1.85 espie 207:
1.97 robert 208: # exclude from readelf(1) output for syspatch building
1.101 tb 209: EXCLUDE_REGEX:= "(cmll-586|(comparetf|libgcc|unwind-dw)2| \
1.97 robert 210: mul(t|d|s|x)(c|f)3|crt(begin|end)S| \
1.101 tb 211: (div|umod|mod)(d|t)i3|emutls|(add|div|sub)tf3| \
1.97 robert 212: (fixtf|float|extend|trunctf)(d|s)(ftf2|i|itf|f2)| \
1.101 tb 213: floatunsitf|udivmodti4|AMDGPURegAsmNames|clear_cache)"
1.97 robert 214:
1.73 guenther 215: ${FULLSHLIBNAME}: ${SOBJS} ${DPADD}
1.35 espie 216: @echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
1.73 guenther 217: @rm -f ${.TARGET}
1.88 robert 218: .if defined(SYSPATCH_PATH)
1.92 kettenis 219: ${CC} -shared -Wl,-soname,${FULLSHLIBNAME} ${PICFLAG} -o ${.TARGET} \
1.88 robert 220: `readelf -Ws ${SYSPATCH_PATH}${LIBDIR}/${.TARGET} | \
1.90 robert 221: awk '/ FILE/{sub(".*/", "", $$NF); gsub(/\..*/, ".so", $$NF); print $$NF}' | \
1.97 robert 222: egrep -v ${EXCLUDE_REGEX:C/[[:blank:]]//g} | awk '!x[$$0]++'` ${LDADD}
1.81 robert 223: .else
1.92 kettenis 224: ${CC} -shared -Wl,-soname,${FULLSHLIBNAME} ${PICFLAG} -o ${.TARGET} \
1.75 deraadt 225: `echo ${SOBJS} | tr ' ' '\n' | sort -R` ${LDADD}
1.81 robert 226: .endif
1.75 deraadt 227:
228: ${FULLSHLIBNAME}.a: ${SOBJS}
229: @echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\) ar
230: @rm -f ${.TARGET}
1.92 kettenis 231: @echo -Wl,-soname,${FULLSHLIBNAME} ${PICFLAG} ${LDADD} > .ldadd
1.80 guenther 232: ar cqD ${FULLSHLIBNAME}.a ${SOBJS} .ldadd ${SYMBOLSMAP}
1.1 deraadt 233:
1.70 guenther 234: # all .do files...
235: DOBJS+= ${OBJS:.o=.do}
1.84 espie 236: BUILDAFTER += ${DOBJS}
1.70 guenther 237:
238: # .do files that we actually need for where this dist lib will be used
239: .if defined(DIST_OBJS)
240: SELECTED_DOBJS=${DIST_OBJS:.o=.do}
241: .else
242: SELECTED_DOBJS?=${DOBJS}
243: .endif
244:
245: DIST_LIB?=lib${LIB}_d.a
246: ${DIST_LIB}: ${SELECTED_DOBJS}
247: @echo building distrib ${DIST_LIB} library from ${SELECTED_DOBJS}
248: @rm -f ${DIST_LIB}
249: .if !empty(SELECTED_DOBJS)
1.80 guenther 250: @${AR} cqD ${DIST_LIB} `${LORDER} ${SELECTED_DOBJS} | tsort -q`
1.70 guenther 251: .else
1.80 guenther 252: @${AR} cqD ${DIST_LIB}
1.70 guenther 253: .endif
254: ${RANLIB} ${DIST_LIB}
255:
1.1 deraadt 256: .if !target(clean)
257: clean: _SUBDIRUSE
1.87 espie 258: rm -f a.out [Ee]rrs mklog *.core y.tab.h \
259: ${_LEXINTM} ${_YACCINTM} ${CLEANFILES}
1.1 deraadt 260: rm -f lib${LIB}.a ${OBJS}
1.21 niklas 261: rm -f lib${LIB}_g.a ${GOBJS}
1.1 deraadt 262: rm -f lib${LIB}_p.a ${POBJS}
1.76 guenther 263: rm -f lib${LIB}.so.*.* ${SOBJS} .ldadd
1.70 guenther 264: rm -f ${DIST_LIB} ${DOBJS}
1.1 deraadt 265: .endif
266:
267: cleandir: _SUBDIRUSE clean
268:
269:
270: .if !target(install)
271: .if !target(beforeinstall)
272: beforeinstall:
273: .endif
274:
275: realinstall:
1.100 deraadt 276: .if !defined(NOLIBSTATIC)
1.98 kn 277: ${INSTALL} ${INSTALL_COPY} -o ${LIBOWN} -g ${LIBGRP} -m 600 lib${LIB}.a \
1.44 espie 278: ${DESTDIR}${LIBDIR}/lib${LIB}.a
1.1 deraadt 279: chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}.a
1.100 deraadt 280: .endif
1.1 deraadt 281: .if !defined(NOPROFILE)
1.98 kn 282: ${INSTALL} ${INSTALL_COPY} -o ${LIBOWN} -g ${LIBGRP} -m 600 \
1.1 deraadt 283: lib${LIB}_p.a ${DESTDIR}${LIBDIR}
284: chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
285: .endif
1.35 espie 286: .if !defined(NOPIC) && defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
1.98 kn 287: ${INSTALL} ${INSTALL_COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
1.73 guenther 288: ${FULLSHLIBNAME} ${DESTDIR}${LIBDIR}
1.75 deraadt 289: .if defined(LIBREBUILD)
1.96 deraadt 290: .if !defined(DESTDIR)
291: @echo cleaning out old relink libraries to conserve disk space
292: rm -f /usr/share/relink/${LIBDIR}/lib${LIB}.*.a
293: .endif
1.91 rpe 294: ${INSTALL} -d -o ${LIBOWN} -g ${LIBGRP} -m 755 \
295: ${DESTDIR}/usr/share/relink/${LIBDIR}
1.98 kn 296: ${INSTALL} ${INSTALL_COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
1.91 rpe 297: ${FULLSHLIBNAME}.a ${DESTDIR}/usr/share/relink/${LIBDIR}
1.75 deraadt 298: .endif
1.1 deraadt 299: .endif
300: .if defined(LINKS) && !empty(LINKS)
1.33 espie 301: . for lnk file in ${LINKS}
302: @l=${DESTDIR}${lnk}; \
303: t=${DESTDIR}${file}; \
304: echo $$t -\> $$l; \
305: rm -f $$t; ln $$l $$t
306: . endfor
1.1 deraadt 307: .endif
308:
309: install: maninstall _SUBDIRUSE
310: maninstall: afterinstall
311: afterinstall: realinstall
312: realinstall: beforeinstall
313: .endif
314:
315: .if !defined(NOMAN)
316: .include <bsd.man.mk>
317: .endif
318:
319: .include <bsd.obj.mk>
320: .include <bsd.dep.mk>
321: .include <bsd.subdir.mk>
1.2 deraadt 322: .include <bsd.sys.mk>