1# $NetBSD: bsd.lib.mk,v 1.281 2008/05/03 14:48:31 lukem Exp $ 2# @(#)bsd.lib.mk 8.3 (Berkeley) 4/22/94 3 4.include <bsd.init.mk> 5.include <bsd.shlib.mk> 6.include <bsd.gcc.mk> 7# Pull in <bsd.sys.mk> here so we can override its .c.o rule 8.include <bsd.sys.mk> 9 10LIBISPRIVATE?= no 11 12.if ${LIBISPRIVATE} != "no" 13MKDEBUGLIB:= no 14MKLINT:= no 15MKPIC:= no 16MKPROFILE:= no 17.endif 18 19##### Basic targets 20.PHONY: checkver libinstall 21realinstall: checkver libinstall 22clean: cleanlib 23 24##### LIB specific flags. 25COPTS+= ${COPTS.lib${LIB}} 26CPPFLAGS+= ${CPPFLAGS.lib${LIB}} 27CXXFLAGS+= ${CXXFLAGS.lib${LIB}} 28OBJCOPTS+= ${OBJCOPTS.lib${LIB}} 29LDADD+= ${LDADD.lib${LIB}} 30LDFLAGS+= ${LDFLAGS.lib${LIB}} 31LDSTATIC+= ${LDSTATIC.lib${LIB}} 32 33##### Libraries that this may depend upon. 34.if defined(LIBDPLIBS) && ${MKPIC} != "no" # { 35.for _lib _dir in ${LIBDPLIBS} 36.if !defined(LIBDO.${_lib}) 37LIBDO.${_lib}!= cd ${_dir} && ${PRINTOBJDIR} 38.MAKEOVERRIDES+=LIBDO.${_lib} 39.endif 40LDADD+= -L${LIBDO.${_lib}} -l${_lib} 41DPADD+= ${LIBDO.${_lib}}/lib${_lib}.so 42.endfor 43.endif # } 44 45##### Build and install rules 46MKDEP_SUFFIXES?= .o .po .so .ln 47CPPFLAGS+= ${DESTDIR:D-nostdinc ${CPPFLAG_ISYSTEM} ${DESTDIR}/usr/include} 48CXXFLAGS+= ${DESTDIR:D-nostdinc++ ${CPPFLAG_ISYSTEMXX} ${DESTDIR}/usr/include/g++} 49 50.if !defined(SHLIB_MAJOR) && exists(${SHLIB_VERSION_FILE}) # { 51SHLIB_MAJOR != . ${SHLIB_VERSION_FILE} ; echo $$major 52SHLIB_MINOR != . ${SHLIB_VERSION_FILE} ; echo $$minor 53SHLIB_TEENY != . ${SHLIB_VERSION_FILE} ; echo $$teeny 54 55# Check for higher installed library versions. 56.if !defined(NOCHECKVER) && !defined(NOCHECKVER_${LIB}) && \ 57 exists(${NETBSDSRCDIR}/lib/checkver) 58checkver: 59 @(cd ${.CURDIR} && \ 60 ${HOST_SH} ${NETBSDSRCDIR}/lib/checkver -v ${SHLIB_VERSION_FILE} \ 61 -d ${DESTDIR}${_LIBSODIR} ${LIB}) 62.endif 63.endif # } 64 65.if !target(checkver) 66checkver: 67.endif 68 69print-shlib-major: 70.if defined(SHLIB_MAJOR) && ${MKPIC} != "no" 71 @echo ${SHLIB_MAJOR} 72.else 73 @false 74.endif 75 76print-shlib-minor: 77.if defined(SHLIB_MINOR) && ${MKPIC} != "no" 78 @echo ${SHLIB_MINOR} 79.else 80 @false 81.endif 82 83print-shlib-teeny: 84.if defined(SHLIB_TEENY) && ${MKPIC} != "no" 85 @echo ${SHLIB_TEENY} 86.else 87 @false 88.endif 89 90.if defined(SHLIB_MAJOR) && !empty(SHLIB_MAJOR) # { 91.if defined(SHLIB_MINOR) && !empty(SHLIB_MINOR) 92.if defined(SHLIB_TEENY) && !empty(SHLIB_TEENY) 93SHLIB_FULLVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR}.${SHLIB_TEENY} 94.else 95SHLIB_FULLVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} 96.endif 97.else 98SHLIB_FULLVERSION=${SHLIB_MAJOR} 99.endif 100.endif # } 101 102# add additional suffixes not exported. 103# .po is used for profiling object files. 104# .so is used for PIC object files. 105.SUFFIXES: .out .a .ln .so .po .go .o .s .S .c .cc .cpp .cxx .C .m .F .f .r .y .l .cl .p .h 106.SUFFIXES: .sh .m4 .m 107 108 109# Set PICFLAGS to cc flags for producing position-independent code, 110# if not already set. Includes -DPIC, if required. 111 112# Data-driven table using make variables to control how shared libraries 113# are built for different platforms and object formats. 114# OBJECT_FMT: currently either "ELF" or "a.out", from <bsd.own.mk> 115# SHLIB_SOVERSION: version number to be compiled into a shared library 116# via -soname. Usualy ${SHLIB_MAJOR} on ELF. 117# NetBSD/pmax used to use ${SHLIB_MAJOR}[.${SHLIB_MINOR} 118# [.${SHLIB_TEENY}]] 119# SHLIB_SHFLAGS: Flags to tell ${LD} to emit shared library. 120# with ELF, also set shared-lib version for ld.so. 121# SHLIB_LDSTARTFILE: support .o file, call C++ file-level constructors 122# SHLIB_LDENDFILE: support .o file, call C++ file-level destructors 123# FPICFLAGS: flags for ${FC} to compile .[fF] files to .so objects. 124# CPPPICFLAGS: flags for ${CPP} to preprocess .[sS] files for ${AS} 125# CPICFLAGS: flags for ${CC} to compile .[cC] files to pic objects. 126# CSHLIBFLAGS: flags for ${CC} to compile .[cC] files to .so objects. 127# (usually includes ${CPICFLAGS}) 128# CAPICFLAGS: flags for ${CC} to compiling .[Ss] files 129# (usually just ${CPPPICFLAGS} ${CPICFLAGS}) 130# APICFLAGS: flags for ${AS} to assemble .[sS] to .so objects. 131 132.if ${MACHINE_ARCH} == "alpha" # { 133 134FPICFLAGS ?= -fPIC 135CPICFLAGS ?= -fPIC -DPIC 136CPPPICFLAGS?= -DPIC 137CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS} 138APICFLAGS ?= 139 140.elif (${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64") && \ 141 ${OBJECT_FMT} == "ELF" # } { 142 143# If you use -fPIC you need to define BIGPIC to turn on 32-bit 144# relocations in asm code 145FPICFLAGS ?= -fPIC 146CPICFLAGS ?= -fPIC -DPIC 147CPPPICFLAGS?= -DPIC -DBIGPIC 148CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS} 149APICFLAGS ?= -KPIC 150 151.else # } { 152 153# Platform-independent flags for NetBSD shared libraries 154SHLIB_SOVERSION=${SHLIB_FULLVERSION} 155SHLIB_SHFLAGS= 156FPICFLAGS ?= -fPIC 157CPICFLAGS?= -fPIC -DPIC 158CPPPICFLAGS?= -DPIC 159CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS} 160APICFLAGS?= -k 161 162.endif # } 163 164.if ${MKPICLIB} != "no" 165CSHLIBFLAGS+= ${CPICFLAGS} 166.endif 167 168.if defined(CSHLIBFLAGS) && !empty(CSHLIBFLAGS) 169MKSHLIBOBJS= yes 170.else 171MKSHLIBOBJS= no 172.endif 173 174# Platform-independent linker flags for ELF shared libraries 175.if ${OBJECT_FMT} == "ELF" 176SHLIB_SOVERSION= ${SHLIB_MAJOR} 177SHLIB_SHFLAGS= -Wl,-soname,lib${LIB}.so.${SHLIB_SOVERSION} 178SHLIB_SHFLAGS+= -Wl,--warn-shared-textrel 179SHLIB_LDSTARTFILE?= ${DESTDIR}/usr/lib/crti.o ${_GCC_CRTBEGINS} 180SHLIB_LDENDFILE?= ${_GCC_CRTENDS} ${DESTDIR}/usr/lib/crtn.o 181.endif 182 183CFLAGS+= ${COPTS} 184OBJCFLAGS+= ${OBJCOPTS} 185AFLAGS+= ${COPTS} 186FFLAGS+= ${FOPTS} 187 188.c.o: 189 ${_MKTARGET_COMPILE} 190 ${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 191.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) 192 ${OBJCOPY} -x ${.TARGET} 193.endif 194 195.c.po: 196 ${_MKTARGET_COMPILE} 197 ${COMPILE.c} ${PROFFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} -pg ${.IMPSRC} -o ${.TARGET} 198.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) 199 ${OBJCOPY} -X ${.TARGET} 200.endif 201 202.c.go: 203 ${_MKTARGET_COMPILE} 204 ${COMPILE.c} ${DEBUGFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} -g ${.IMPSRC} -o ${.TARGET} 205 206.c.so: 207 ${_MKTARGET_COMPILE} 208 ${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${CSHLIBFLAGS} ${.IMPSRC} -o ${.TARGET} 209.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) 210 ${OBJCOPY} -x ${.TARGET} 211.endif 212 213.cc.o .cpp.o .cxx.o .C.o: 214 ${_MKTARGET_COMPILE} 215 ${COMPILE.cc} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 216.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) 217 ${OBJCOPY} -x ${.TARGET} 218.endif 219 220.cc.po .cpp.po .cxx.po .C.po: 221 ${_MKTARGET_COMPILE} 222 ${COMPILE.cc} ${PROFFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} -pg ${.IMPSRC} -o ${.TARGET} 223.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) 224 ${OBJCOPY} -X ${.TARGET} 225.endif 226 227.cc.go .cpp.go .cxx.go .C.go: 228 ${_MKTARGET_COMPILE} 229 ${COMPILE.cc} ${DEBUGFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} -g ${.IMPSRC} -o ${.TARGET} 230 231.cc.so .cpp.so .cxx.so .C.so: 232 ${_MKTARGET_COMPILE} 233 ${COMPILE.cc} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${CSHLIBFLAGS} ${.IMPSRC} -o ${.TARGET} 234.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) 235 ${OBJCOPY} -x ${.TARGET} 236.endif 237 238.f.o: 239 ${_MKTARGET_COMPILE} 240 ${COMPILE.f} ${.IMPSRC} -o ${.TARGET} 241.if !defined(FOPTS) || empty(FOPTS:M*-g*) 242 ${OBJCOPY} -x ${.TARGET} 243.endif 244 245.f.po: 246 ${_MKTARGET_COMPILE} 247 ${COMPILE.f} ${PROFFLAGS} -pg ${.IMPSRC} -o ${.TARGET} 248.if !defined(FOPTS) || empty(FOPTS:M*-g*) 249 ${OBJCOPY} -X ${.TARGET} 250.endif 251 252.f.go: 253 ${_MKTARGET_COMPILE} 254 ${COMPILE.f} ${DEBUGFLAGS} -g ${.IMPSRC} -o ${.TARGET} 255 256.f.so: 257 ${_MKTARGET_COMPILE} 258 ${COMPILE.f} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET} 259.if !defined(FOPTS) || empty(FOPTS:M*-g*) 260 ${OBJCOPY} -x ${.TARGET} 261.endif 262 263.f.ln: 264 ${_MKTARGET_COMPILE} 265 @echo Skipping lint for Fortran libraries. 266 267.m.o: 268 ${_MKTARGET_COMPILE} 269 ${COMPILE.m} ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 270.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) 271 ${OBJCOPY} -x ${.TARGET} 272.endif 273 274.m.po: 275 ${_MKTARGET_COMPILE} 276 ${COMPILE.m} ${PROFFLAGS} -pg ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 277.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) 278 ${OBJCOPY} -X ${.TARGET} 279.endif 280 281.m.go: 282 ${_MKTARGET_COMPILE} 283 ${COMPILE.m} ${DEBUGFLAGS} -g ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 284.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) 285 ${OBJCOPY} -X ${.TARGET} 286.endif 287 288.m.so: 289 ${_MKTARGET_COMPILE} 290 ${COMPILE.m} ${CSHLIBFLAGS} ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 291.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) 292 ${OBJCOPY} -x ${.TARGET} 293.endif 294 295.s.o: 296 ${_MKTARGET_COMPILE} 297 ${COMPILE.s} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 298 ${OBJCOPY} -x ${.TARGET} 299 300.S.o: 301 ${_MKTARGET_COMPILE} 302 ${COMPILE.S} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 303 ${OBJCOPY} -x ${.TARGET} 304 305.s.po: 306 ${_MKTARGET_COMPILE} 307 ${COMPILE.s} ${PROFFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 308 ${OBJCOPY} -X ${.TARGET} 309 310.S.po: 311 ${_MKTARGET_COMPILE} 312 ${COMPILE.S} ${PROFFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 313 ${OBJCOPY} -X ${.TARGET} 314 315.s.go: 316 ${_MKTARGET_COMPILE} 317 ${COMPILE.s} ${DEBUGFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 318 319.S.go: 320 ${_MKTARGET_COMPILE} 321 ${COMPILE.S} ${DEBUGFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 322 323.s.so: 324 ${_MKTARGET_COMPILE} 325 ${COMPILE.s} ${CAPICFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 326 ${OBJCOPY} -x ${.TARGET} 327 328.S.so: 329 ${_MKTARGET_COMPILE} 330 ${COMPILE.S} ${CAPICFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} 331 ${OBJCOPY} -x ${.TARGET} 332 333.if defined(LIB) # { 334.if (${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ 335 || ${MKLINKLIB} != "no") && ${MKSTATICLIB} != "no" 336_LIBS=lib${LIB}.a 337.else 338_LIBS= 339.endif 340 341OBJS+=${SRCS:N*.h:N*.sh:R:S/$/.o/g} 342 343STOBJS+=${OBJS} 344 345LOBJS+=${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln} 346 347.if ${LIBISPRIVATE} != "no" 348# No installation is required 349libinstall:: 350.else # ${LIBISPRIVATE} == "no" # { 351 352.if ${MKDEBUGLIB} != "no" 353_LIBS+=lib${LIB}_g.a 354GOBJS+=${OBJS:.o=.go} 355DEBUGFLAGS?=-DDEBUG 356.endif 357 358.if ${MKPROFILE} != "no" 359_LIBS+=lib${LIB}_p.a 360POBJS+=${OBJS:.o=.po} 361PROFFLAGS?=-DGPROF -DPROF 362.endif 363 364.if ${MKPIC} != "no" # { 365.if ${MKPICLIB} == "no" 366.if ${MKSHLIBOBJS} != "no" 367# make _pic.a, which isn't really pic, 368# since it's needed for making shared lib. 369# but don't install it. 370SOLIB=lib${LIB}_pic.a 371SOBJS+=${OBJS:.o=.so} 372.else 373SOLIB=lib${LIB}.a 374.endif 375.else 376SOLIB=lib${LIB}_pic.a 377_LIBS+=${SOLIB} 378SOBJS+=${OBJS:.o=.so} 379.endif 380.if defined(SHLIB_FULLVERSION) 381_LIBS+=lib${LIB}.so.${SHLIB_FULLVERSION} 382.endif 383.endif # } 384 385.if ${MKLINT} != "no" && !empty(LOBJS) 386_LIBS+=llib-l${LIB}.ln 387.endif 388 389.endif # ${LIBISPRIVATE} == "no" # } 390 391ALLOBJS= 392.if (${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ 393 || ${MKLINKLIB} != "no") && ${MKSTATICLIB} != "no" 394ALLOBJS+=${STOBJS} 395.endif 396ALLOBJS+=${POBJS} ${SOBJS} 397.if ${MKLINT} != "no" && !empty(LOBJS) 398ALLOBJS+=${LOBJS} 399.endif 400.else # !defined(LIB) # } { 401LOBJS= 402SOBJS= 403.endif # !defined(LIB) # } 404 405_YLSRCS= ${SRCS:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS:M*.y:.y=.h}} 406 407.NOPATH: ${ALLOBJS} ${_LIBS} ${_YLSRCS} 408 409realall: ${SRCS} ${ALLOBJS:O} ${_LIBS} 410 411.if !target(__archivebuild) 412__archivebuild: .USE 413 ${_MKTARGET_BUILD} 414 rm -f ${.TARGET} 415 ${AR} cq ${.TARGET} `NM=${NM} ${LORDER} ${.ALLSRC:M*o} | ${TSORT}` 416 ${RANLIB} ${.TARGET} 417.endif 418 419.if !target(__archiveinstall) 420__archiveinstall: .USE 421 ${_MKTARGET_INSTALL} 422 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 423 ${empty(PRESERVE):?-a "${RANLIB} -t":} ${.ALLSRC} ${.TARGET} 424.endif 425 426__archivesymlinkpic: .USE 427 ${_MKTARGET_INSTALL} 428 ${INSTALL_SYMLINK} ${.ALLSRC} ${.TARGET} 429 430DPSRCS+= ${_YLSRCS} 431CLEANFILES+= ${_YLSRCS} 432 433${STOBJS} ${POBJS} ${GOBJS} ${SOBJS} ${LOBJS}: ${DPSRCS} 434 435lib${LIB}.a:: ${STOBJS} __archivebuild 436 437lib${LIB}_p.a:: ${POBJS} __archivebuild 438 439lib${LIB}_pic.a:: ${SOBJS} __archivebuild 440 441lib${LIB}_g.a:: ${GOBJS} __archivebuild 442 443 444_LIBLDOPTS= 445.if ${SHLIBDIR} != "/usr/lib" 446_LIBLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBDIR}:${DESTDIR}/usr/lib \ 447 -R${SHLIBDIR} \ 448 -L${DESTDIR}${SHLIBDIR} 449.elif ${SHLIBINSTALLDIR} != "/usr/lib" 450_LIBLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR}:${DESTDIR}/usr/lib \ 451 -L${DESTDIR}${SHLIBINSTALLDIR} 452.endif 453 454# gcc -shared now adds -lc automatically. For libraries other than libc and 455# libgcc* we add as a dependency the installed shared libc. For libc and 456# libgcc* we avoid adding libc as a dependency by using -nostdlib. Note that 457# -Xl,-nostdlib is not enough because we want to tell the compiler-driver not 458# to add standard libraries, not the linker. 459.if !defined(LIB) 460DPLIBC ?= ${DESTDIR}${LIBC_SO} 461.else 462.if ${LIB} != "c" && ${LIB:Mgcc*} == "" 463DPLIBC ?= ${DESTDIR}${LIBC_SO} 464.else 465LDLIBC ?= -nodefaultlibs 466.if ${LIB} == "c" 467LDADD+= -lgcc_pic 468.endif 469.endif 470.endif 471 472lib${LIB}.so.${SHLIB_FULLVERSION}: ${SOLIB} ${DPADD} ${DPLIBC} \ 473 ${SHLIB_LDSTARTFILE} ${SHLIB_LDENDFILE} 474 ${_MKTARGET_BUILD} 475 rm -f lib${LIB}.so.${SHLIB_FULLVERSION} 476.if defined(DESTDIR) 477 ${CC} ${LDLIBC} -Wl,-nostdlib -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \ 478 ${_LIBLDOPTS} \ 479 -Wl,-x -shared ${SHLIB_SHFLAGS} ${LDFLAGS} -o ${.TARGET} \ 480 -Wl,--whole-archive ${SOLIB} \ 481 -Wl,--no-whole-archive ${LDADD} \ 482 -L${_GCC_LIBGCCDIR} 483.else 484 ${CC} ${LDLIBC} -Wl,-x -shared ${SHLIB_SHFLAGS} ${LDFLAGS} \ 485 -o ${.TARGET} ${_LIBLDOPTS} \ 486 -Wl,--whole-archive ${SOLIB} -Wl,--no-whole-archive ${LDADD} 487.endif 488.if ${OBJECT_FMT} == "ELF" 489# We don't use INSTALL_SYMLINK here because this is just 490# happening inside the build directory/objdir. XXX Why does 491# this spend so much effort on libraries that aren't live??? XXX 492 ${HOST_LN} -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.${SHLIB_MAJOR}.tmp 493 mv -f lib${LIB}.so.${SHLIB_MAJOR}.tmp lib${LIB}.so.${SHLIB_MAJOR} 494 ${HOST_LN} -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.tmp 495 mv -f lib${LIB}.so.tmp lib${LIB}.so 496.endif 497 498.if !empty(LOBJS) # { 499LLIBS?= -lc 500llib-l${LIB}.ln: ${LOBJS} 501 ${_MKTARGET_COMPILE} 502 rm -f llib-l${LIB}.ln 503.if defined(DESTDIR) 504 ${LINT} -C${LIB} ${.ALLSRC} -L${DESTDIR}/usr/libdata ${LLIBS} 505.else 506 ${LINT} -C${LIB} ${.ALLSRC} ${LLIBS} 507.endif 508.endif # } 509 510lint: ${LOBJS} 511.if defined(LOBJS) && !empty(LOBJS) 512 ${LINT} ${LINTFLAGS} ${LOBJS} 513.endif 514 515cleanlib: .PHONY 516 rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES} 517 rm -f lib${LIB}.a ${STOBJS} 518 rm -f lib${LIB}_p.a ${POBJS} 519 rm -f lib${LIB}_g.a ${GOBJS} 520 rm -f lib${LIB}_pic.a lib${LIB}.so.* lib${LIB}.so ${SOBJS} 521 rm -f ${STOBJS:=.tmp} ${POBJS:=.tmp} ${SOBJS:=.tmp} ${GOBJS:=.tmp} 522 rm -f llib-l${LIB}.ln ${LOBJS} 523 524 525.if !target(libinstall) # { 526# Make sure it gets defined, in case MKPIC==no && MKLINKLIB==no 527libinstall:: 528 529.if ${MKLINKLIB} != "no" && ${MKSTATICLIB} != "no" 530libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}.a 531.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}.a 532 533.if ${MKUPDATE} == "no" 534.if !defined(BUILD) && !make(all) && !make(lib${LIB}.a) 535${DESTDIR}${LIBDIR}/lib${LIB}.a! .MADE 536.endif 537${DESTDIR}${LIBDIR}/lib${LIB}.a! lib${LIB}.a __archiveinstall 538.else 539.if !defined(BUILD) && !make(all) && !make(lib${LIB}.a) 540${DESTDIR}${LIBDIR}/lib${LIB}.a: .MADE 541.endif 542${DESTDIR}${LIBDIR}/lib${LIB}.a: lib${LIB}.a __archiveinstall 543.endif 544.endif 545 546.if ${MKPROFILE} != "no" 547libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 548.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 549 550.if ${MKUPDATE} == "no" 551.if !defined(BUILD) && !make(all) && !make(lib${LIB}_p.a) 552${DESTDIR}${LIBDIR}/lib${LIB}_p.a! .MADE 553.endif 554${DESTDIR}${LIBDIR}/lib${LIB}_p.a! lib${LIB}_p.a __archiveinstall 555.else 556.if !defined(BUILD) && !make(all) && !make(lib${LIB}_p.a) 557${DESTDIR}${LIBDIR}/lib${LIB}_p.a: .MADE 558.endif 559${DESTDIR}${LIBDIR}/lib${LIB}_p.a: lib${LIB}_p.a __archiveinstall 560.endif 561.endif 562 563.if ${MKDEBUGLIB} != "no" 564libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_g.a 565.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_g.a 566 567.if ${MKUPDATE} == "no" 568.if !defined(BUILD) && !make(all) && !make(lib${LIB}_g.a) 569${DESTDIR}${LIBDIR}/lib${LIB}_g.a! .MADE 570.endif 571${DESTDIR}${LIBDIR}/lib${LIB}_g.a! lib${LIB}_g.a __archiveinstall 572.else 573.if !defined(BUILD) && !make(all) && !make(lib${LIB}_g.a) 574${DESTDIR}${LIBDIR}/lib${LIB}_g.a: .MADE 575.endif 576${DESTDIR}${LIBDIR}/lib${LIB}_g.a: lib${LIB}_g.a __archiveinstall 577.endif 578.endif 579 580.if ${MKPIC} != "no" && ${MKPICINSTALL} != "no" 581libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 582.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 583 584.if ${MKUPDATE} == "no" 585.if !defined(BUILD) && !make(all) && !make(lib${LIB}_pic.a) 586${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! .MADE 587.endif 588.if ${MKPICLIB} == "no" 589${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! lib${LIB}.a __archivesymlinkpic 590.else 591${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! lib${LIB}_pic.a __archiveinstall 592.endif 593.else 594.if !defined(BUILD) && !make(all) && !make(lib${LIB}_pic.a) 595${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: .MADE 596.endif 597.if ${MKPICLIB} == "no" 598${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}.a __archivesymlinkpic 599.else 600${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}_pic.a __archiveinstall 601.endif 602.endif 603.endif 604 605.if ${MKPIC} != "no" && defined(SHLIB_FULLVERSION) 606libinstall:: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 607.PRECIOUS: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 608 609.if ${MKUPDATE} == "no" 610.if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION}) 611${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}! .MADE 612.endif 613${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}! lib${LIB}.so.${SHLIB_FULLVERSION} 614.else 615.if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION}) 616${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: .MADE 617.endif 618${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: lib${LIB}.so.${SHLIB_FULLVERSION} 619.endif 620 ${_MKTARGET_INSTALL} 621 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 622 ${.ALLSRC} ${.TARGET} 623.if ${_LIBSODIR} != ${LIBDIR} 624 ${INSTALL_SYMLINK} \ 625 -l r ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 626 ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 627.endif 628.if ${OBJECT_FMT} == "a.out" && !defined(DESTDIR) 629 /sbin/ldconfig -m ${_LIBSODIR} ${LIBDIR} 630.endif 631.if ${OBJECT_FMT} == "ELF" 632 ${INSTALL_SYMLINK} \ 633 lib${LIB}.so.${SHLIB_FULLVERSION} \ 634 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_MAJOR} 635.if ${_LIBSODIR} != ${LIBDIR} 636 ${INSTALL_SYMLINK} \ 637 -l r ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 638 ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR} 639.endif 640.if ${MKLINKLIB} != "no" 641 ${INSTALL_SYMLINK} \ 642 lib${LIB}.so.${SHLIB_FULLVERSION} \ 643 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so 644.if ${_LIBSODIR} != ${LIBDIR} 645 ${INSTALL_SYMLINK} \ 646 -l r ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 647 ${DESTDIR}${LIBDIR}/lib${LIB}.so 648.endif 649.endif 650.endif 651.endif 652 653.if ${MKLINT} != "no" && !empty(LOBJS) 654libinstall:: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln 655.PRECIOUS: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln 656 657.if ${MKUPDATE} == "no" 658.if !defined(BUILD) && !make(all) && !make(llib-l${LIB}.ln) 659${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln! .MADE 660.endif 661${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln! llib-l${LIB}.ln 662.else 663.if !defined(BUILD) && !make(all) && !make(llib-l${LIB}.ln) 664${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: .MADE 665.endif 666${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: llib-l${LIB}.ln 667.endif 668 ${_MKTARGET_INSTALL} 669 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 670 ${.ALLSRC} ${DESTDIR}${LINTLIBDIR} 671.endif 672.endif # !target(libinstall) # } 673 674##### Pull in related .mk logic 675.include <bsd.man.mk> 676.include <bsd.nls.mk> 677.include <bsd.files.mk> 678.include <bsd.inc.mk> 679.include <bsd.links.mk> 680.include <bsd.dep.mk> 681 682${TARGETS}: # ensure existence 683