1# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2# $FreeBSD$ 3# 4 5.include <bsd.init.mk> 6.include <bsd.compiler.mk> 7.include <bsd.linker.mk> 8 9__<bsd.lib.mk>__: 10 11.if defined(LIB_CXX) || defined(SHLIB_CXX) 12_LD= ${CXX} 13.else 14_LD= ${CC} 15.endif 16.if defined(LIB_CXX) 17LIB= ${LIB_CXX} 18.endif 19.if defined(SHLIB_CXX) 20SHLIB= ${SHLIB_CXX} 21.endif 22 23LIB_PRIVATE= ${PRIVATELIB:Dprivate} 24# Set up the variables controlling shared libraries. After this section, 25# SHLIB_NAME will be defined only if we are to create a shared library. 26# SHLIB_LINK will be defined only if we are to create a link to it. 27# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive. 28# BUILD_NOSSP_PIC_ARCHIVE will be defined only if we are to create a PIC archive. 29.if defined(NO_PIC) 30.undef SHLIB_NAME 31.undef INSTALL_PIC_ARCHIVE 32.undef BUILD_NOSSP_PIC_ARCHIVE 33.else 34.if !defined(SHLIB) && defined(LIB) 35SHLIB= ${LIB} 36.endif 37.if !defined(SHLIB_NAME) && defined(SHLIB) && defined(SHLIB_MAJOR) 38SHLIB_NAME= lib${LIB_PRIVATE}${SHLIB}.so.${SHLIB_MAJOR} 39.endif 40.if defined(SHLIB_NAME) && !empty(SHLIB_NAME:M*.so.*) 41SHLIB_LINK?= ${SHLIB_NAME:R} 42.endif 43SONAME?= ${SHLIB_NAME} 44.endif 45 46.if defined(CRUNCH_CFLAGS) 47CFLAGS+= ${CRUNCH_CFLAGS} 48.endif 49 50.if ${MK_ASSERT_DEBUG} == "no" 51CFLAGS+= -DNDEBUG 52# XXX: shouldn't we ensure that !asserts marks potentially unused variables as 53# __unused instead of disabling -Werror globally? 54MK_WERROR= no 55.endif 56 57.if defined(DEBUG_FLAGS) 58CFLAGS+= ${DEBUG_FLAGS} 59 60.if ${MK_CTF} != "no" && ${DEBUG_FLAGS:M-g} != "" 61CTFFLAGS+= -g 62.endif 63.else 64STRIP?= -s 65.endif 66 67.if ${SHLIBDIR:M*lib32*} 68TAGS+= lib32 69.endif 70 71.if defined(NO_ROOT) 72.if !defined(TAGS) || ! ${TAGS:Mpackage=*} 73TAGS+= package=${PACKAGE:Uutilities} 74.endif 75TAG_ARGS= -T ${TAGS:[*]:S/ /,/g} 76.endif 77 78# ELF hardening knobs 79.if ${MK_BIND_NOW} != "no" 80LDFLAGS+= -Wl,-znow 81.endif 82.if ${LINKER_TYPE} != "mac" 83.if ${MK_RELRO} == "no" 84LDFLAGS+= -Wl,-znorelro 85.else 86LDFLAGS+= -Wl,-zrelro 87.endif 88.endif 89.if ${MK_RETPOLINE} != "no" 90.if ${COMPILER_FEATURES:Mretpoline} && ${LINKER_FEATURES:Mretpoline} 91CFLAGS+= -mretpoline 92CXXFLAGS+= -mretpoline 93LDFLAGS+= -Wl,-zretpolineplt 94.else 95.warning Retpoline requested but not supported by compiler or linker 96.endif 97.endif 98# LLD sensibly defaults to -znoexecstack, so do the same for BFD 99LDFLAGS.bfd+= -Wl,-znoexecstack 100 101# Initialize stack variables on function entry 102.if ${MK_INIT_ALL_ZERO} == "yes" 103.if ${COMPILER_FEATURES:Minit-all} 104CFLAGS+= -ftrivial-auto-var-init=zero 105CXXFLAGS+= -ftrivial-auto-var-init=zero 106.if ${COMPILER_TYPE} == "clang" && ${COMPILER_VERSION} < 160000 107CFLAGS+= -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang 108CXXFLAGS+= -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang 109.endif 110.else 111.warning InitAll (zeros) requested but not supported by compiler 112.endif 113.elif ${MK_INIT_ALL_PATTERN} == "yes" 114.if ${COMPILER_FEATURES:Minit-all} 115CFLAGS+= -ftrivial-auto-var-init=pattern 116CXXFLAGS+= -ftrivial-auto-var-init=pattern 117.else 118.warning InitAll (pattern) requested but not supported by compiler 119.endif 120.endif 121 122# bsd.sanitizer.mk is not installed, so don't require it (e.g. for ports). 123.sinclude "bsd.sanitizer.mk" 124 125.if ${MK_DEBUG_FILES} != "no" && empty(DEBUG_FLAGS:M-g) && \ 126 empty(DEBUG_FLAGS:M-gdwarf*) 127.if !${COMPILER_FEATURES:Mcompressed-debug} 128CFLAGS+= ${DEBUG_FILES_CFLAGS:N-gz*} 129CXXFLAGS+= ${DEBUG_FILES_CFLAGS:N-gz*} 130.else 131CFLAGS+= ${DEBUG_FILES_CFLAGS} 132CXXFLAGS+= ${DEBUG_FILES_CFLAGS} 133.endif 134CTFFLAGS+= -g 135.endif 136 137.if ${MACHINE_CPUARCH} == "riscv" && ${LINKER_FEATURES:Mriscv-relaxations} == "" 138CFLAGS += -mno-relax 139.endif 140 141.include <bsd.libnames.mk> 142 143# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 144# .pico used for PIC object files 145# .nossppico used for NOSSP PIC object files 146# .pieo used for PIE object files 147.SUFFIXES: .out .o .bc .ll .po .pico .nossppico .pieo .S .asm .s .c .cc .cpp .cxx .C .f .y .l .ln 148 149.if !defined(PICFLAG) 150PICFLAG=-fpic 151PIEFLAG=-fpie 152.endif 153 154PO_FLAG=-pg 155 156.c.po: 157 ${CC} ${PO_FLAG} ${STATIC_CFLAGS} ${PO_CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 158 ${CTFCONVERT_CMD} 159 160.c.pico: 161 ${CC} ${PICFLAG} -DPIC ${SHARED_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 162 ${CTFCONVERT_CMD} 163 164.c.nossppico: 165 ${CC} ${PICFLAG} -DPIC ${SHARED_CFLAGS:C/^-fstack-protector.*$//:C/^-fsanitize.*$//} ${CFLAGS:C/^-fstack-protector.*$//:C/^-fsanitize.*$//} -c ${.IMPSRC} -o ${.TARGET} 166 ${CTFCONVERT_CMD} 167 168.c.pieo: 169 ${CC} ${PIEFLAG} -DPIC ${SHARED_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 170 ${CTFCONVERT_CMD} 171 172.cc.po .C.po .cpp.po .cxx.po: 173 ${CXX} ${PO_FLAG} ${STATIC_CXXFLAGS} ${PO_CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 174 175.cc.pico .C.pico .cpp.pico .cxx.pico: 176 ${CXX} ${PICFLAG} -DPIC ${SHARED_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 177 178.cc.nossppico .C.nossppico .cpp.nossppico .cxx.nossppico: 179 ${CXX} ${PICFLAG} -DPIC ${SHARED_CXXFLAGS:C/^-fstack-protector.*$//:C/^-fsanitize.*$//} ${CXXFLAGS:C/^-fstack-protector.*$//:C/^-fsanitize.*$//} -c ${.IMPSRC} -o ${.TARGET} 180 181.cc.pieo .C.pieo .cpp.pieo .cxx.pieo: 182 ${CXX} ${PIEFLAG} ${SHARED_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 183 184.f.po: 185 ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 186 ${CTFCONVERT_CMD} 187 188.f.pico: 189 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 190 ${CTFCONVERT_CMD} 191 192.f.nossppico: 193 ${FC} ${PICFLAG} -DPIC ${FFLAGS:C/^-fstack-protector.*$//} -o ${.TARGET} -c ${.IMPSRC} 194 ${CTFCONVERT_CMD} 195 196.s.po .s.pico .s.nossppico .s.pieo: 197 ${CC:N${CCACHE_BIN}} -x assembler ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET} 198 ${CTFCONVERT_CMD} 199 200.asm.po: 201 ${CC:N${CCACHE_BIN}} -x assembler-with-cpp -DPROF ${PO_CFLAGS} \ 202 ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET} 203 ${CTFCONVERT_CMD} 204 205.asm.pico: 206 ${CC:N${CCACHE_BIN}} -x assembler-with-cpp ${PICFLAG} -DPIC \ 207 ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET} 208 ${CTFCONVERT_CMD} 209 210.asm.nossppico: 211 ${CC:N${CCACHE_BIN}} -x assembler-with-cpp ${PICFLAG} -DPIC \ 212 ${CFLAGS:C/^-fstack-protector.*$//} ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET} 213 ${CTFCONVERT_CMD} 214 215.asm.pieo: 216 ${CC:N${CCACHE_BIN}} -x assembler-with-cpp ${PIEFLAG} -DPIC \ 217 ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC} -o ${.TARGET} 218 ${CTFCONVERT_CMD} 219 220.S.po: 221 ${CC:N${CCACHE_BIN}} -DPROF ${PO_CFLAGS} ${ACFLAGS} -c ${.IMPSRC} \ 222 -o ${.TARGET} 223 ${CTFCONVERT_CMD} 224 225.S.pico: 226 ${CC:N${CCACHE_BIN}} ${PICFLAG} -DPIC ${CFLAGS} ${ACFLAGS} \ 227 -c ${.IMPSRC} -o ${.TARGET} 228 ${CTFCONVERT_CMD} 229 230.S.nossppico: 231 ${CC:N${CCACHE_BIN}} ${PICFLAG} -DPIC ${CFLAGS:C/^-fstack-protector.*$//} ${ACFLAGS} \ 232 -c ${.IMPSRC} -o ${.TARGET} 233 ${CTFCONVERT_CMD} 234 235.S.pieo: 236 ${CC:N${CCACHE_BIN}} ${PIEFLAG} -DPIC ${CFLAGS} ${ACFLAGS} \ 237 -c ${.IMPSRC} -o ${.TARGET} 238 ${CTFCONVERT_CMD} 239 240_LIBDIR:=${LIBDIR} 241_SHLIBDIR:=${SHLIBDIR} 242 243.if defined(SHLIB_NAME) 244.if ${MK_DEBUG_FILES} != "no" 245SHLIB_NAME_FULL=${SHLIB_NAME}.full 246# Use ${DEBUGDIR} for base system debug files, else .debug subdirectory 247.if ${_SHLIBDIR} == "/boot" ||\ 248 ${SHLIBDIR:C%/lib(/.*)?$%/lib%} == "/lib" ||\ 249 ${SHLIBDIR:C%/usr/(tests/)?lib(32|exec)?(/.*)?%/usr/lib%} == "/usr/lib" 250DEBUGFILEDIR=${DEBUGDIR}${_SHLIBDIR} 251.else 252DEBUGFILEDIR=${_SHLIBDIR}/.debug 253.endif 254.if !exists(${DESTDIR}${DEBUGFILEDIR}) 255DEBUGMKDIR= 256.endif 257.else 258SHLIB_NAME_FULL=${SHLIB_NAME} 259.endif 260.endif 261 262.include <bsd.symver.mk> 263 264# Allow libraries to specify their own version map or have it 265# automatically generated (see bsd.symver.mk above). 266.if !empty(VERSION_MAP) 267${SHLIB_NAME_FULL}: ${VERSION_MAP} 268LDFLAGS+= -Wl,--version-script=${VERSION_MAP} 269 270# lld >= 16 turned on --no-undefined-version by default, but we have several 271# symbols in our version maps that may or may not exist, depending on 272# compile-time defines. 273.if ${LINKER_TYPE} == "lld" && ${LINKER_VERSION} >= 160000 274LDFLAGS+= -Wl,--undefined-version 275.endif 276.endif 277 278.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 279OBJS+= ${SRCS:N*.h:${OBJS_SRCS_FILTER:ts:}:S/$/.o/} 280BCOBJS+= ${SRCS:N*.[hsS]:N*.asm:${OBJS_SRCS_FILTER:ts:}:S/$/.bco/g} 281LLOBJS+= ${SRCS:N*.[hsS]:N*.asm:${OBJS_SRCS_FILTER:ts:}:S/$/.llo/g} 282CLEANFILES+= ${OBJS} ${BCOBJS} ${LLOBJS} ${STATICOBJS} 283.endif 284 285.if defined(LIB) && !empty(LIB) 286.if defined(STATIC_LDSCRIPT) 287_STATICLIB_SUFFIX= _real 288.endif 289_LIBS= lib${LIB_PRIVATE}${LIB}${_STATICLIB_SUFFIX}.a 290 291lib${LIB_PRIVATE}${LIB}${_STATICLIB_SUFFIX}.a: ${OBJS} ${STATICOBJS} 292 @${ECHO} building static ${LIB} library 293 @rm -f ${.TARGET} 294 ${AR} ${ARFLAGS} ${.TARGET} ${OBJS} ${STATICOBJS} ${ARADD} 295.endif 296 297.if !defined(INTERNALLIB) 298 299.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB) 300_LIBS+= lib${LIB_PRIVATE}${LIB}_p.a 301POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 302DEPENDOBJS+= ${POBJS} 303CLEANFILES+= ${POBJS} 304 305lib${LIB_PRIVATE}${LIB}_p.a: ${POBJS} 306 @${ECHO} building profiled ${LIB} library 307 @rm -f ${.TARGET} 308 ${AR} ${ARFLAGS} ${.TARGET} ${POBJS} ${ARADD} 309.endif 310 311.if defined(LLVM_LINK) 312lib${LIB_PRIVATE}${LIB}.bc: ${BCOBJS} 313 ${LLVM_LINK} -o ${.TARGET} ${BCOBJS} 314 315lib${LIB_PRIVATE}${LIB}.ll: ${LLOBJS} 316 ${LLVM_LINK} -S -o ${.TARGET} ${LLOBJS} 317 318CLEANFILES+= lib${LIB_PRIVATE}${LIB}.bc lib${LIB_PRIVATE}${LIB}.ll 319.endif 320 321.if defined(SHLIB_NAME) || \ 322 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 323SOBJS+= ${OBJS:.o=.pico} 324DEPENDOBJS+= ${SOBJS} 325CLEANFILES+= ${SOBJS} 326.endif 327 328.if defined(SHLIB_NAME) 329_LIBS+= ${SHLIB_NAME} 330 331SOLINKOPTS+= -shared -Wl,-x 332.if defined(LD_FATAL_WARNINGS) && ${LD_FATAL_WARNINGS} == "no" 333SOLINKOPTS+= -Wl,--no-fatal-warnings 334.else 335SOLINKOPTS+= -Wl,--fatal-warnings 336.endif 337SOLINKOPTS+= -Wl,--warn-shared-textrel 338 339.if target(beforelinking) 340beforelinking: ${SOBJS} 341${SHLIB_NAME_FULL}: beforelinking 342.endif 343 344.if defined(SHLIB_LINK) 345.if defined(SHLIB_LDSCRIPT) && !empty(SHLIB_LDSCRIPT) && exists(${.CURDIR}/${SHLIB_LDSCRIPT}) 346${SHLIB_LINK:R}.ld: ${.CURDIR}/${SHLIB_LDSCRIPT} 347 sed -e 's,@@SHLIB@@,${_SHLIBDIR}/${SHLIB_NAME},g' \ 348 -e 's,@@LIBDIR@@,${_LIBDIR},g' \ 349 ${.ALLSRC} > ${.TARGET} 350 351${SHLIB_NAME_FULL}: ${SHLIB_LINK:R}.ld 352CLEANFILES+= ${SHLIB_LINK:R}.ld 353.endif 354CLEANFILES+= ${SHLIB_LINK} 355.endif 356 357${SHLIB_NAME_FULL}: ${SOBJS} 358 @${ECHO} building shared library ${SHLIB_NAME} 359 @rm -f ${SHLIB_NAME} ${SHLIB_LINK} 360.if defined(SHLIB_LINK) && !commands(${SHLIB_LINK:R}.ld) && ${MK_DEBUG_FILES} == "no" 361 # Note: This uses ln instead of ${INSTALL_LIBSYMLINK} since we are in OBJDIR 362 @${LN:Uln} -fs ${SHLIB_NAME} ${SHLIB_LINK} 363.endif 364 ${_LD:N${CCACHE_BIN}} ${LDFLAGS} ${SSP_CFLAGS} ${SOLINKOPTS} \ 365 -o ${.TARGET} -Wl,-soname,${SONAME} ${SOBJS} ${LDADD} 366.if ${MK_CTF} != "no" 367 ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SOBJS} 368.endif 369 370.if ${MK_DEBUG_FILES} != "no" 371CLEANFILES+= ${SHLIB_NAME_FULL} ${SHLIB_NAME}.debug 372${SHLIB_NAME}: ${SHLIB_NAME_FULL} ${SHLIB_NAME}.debug 373 ${OBJCOPY} --strip-debug --add-gnu-debuglink=${SHLIB_NAME}.debug \ 374 ${SHLIB_NAME_FULL} ${.TARGET} 375.if defined(SHLIB_LINK) && !commands(${SHLIB_LINK:R}.ld) 376 # Note: This uses ln instead of ${INSTALL_LIBSYMLINK} since we are in OBJDIR 377 @${LN:Uln} -fs ${SHLIB_NAME} ${SHLIB_LINK} 378.endif 379 380${SHLIB_NAME}.debug: ${SHLIB_NAME_FULL} 381 ${OBJCOPY} --only-keep-debug ${SHLIB_NAME_FULL} ${.TARGET} 382.endif 383.endif #defined(SHLIB_NAME) 384 385.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 386_LIBS+= lib${LIB_PRIVATE}${LIB}_pic.a 387 388lib${LIB_PRIVATE}${LIB}_pic.a: ${SOBJS} 389 @${ECHO} building special pic ${LIB} library 390 @rm -f ${.TARGET} 391 ${AR} ${ARFLAGS} ${.TARGET} ${SOBJS} ${ARADD} 392.endif 393 394.if defined(BUILD_NOSSP_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 395NOSSPSOBJS+= ${OBJS:.o=.nossppico} 396DEPENDOBJS+= ${NOSSPSOBJS} 397CLEANFILES+= ${NOSSPSOBJS} 398_LIBS+= lib${LIB_PRIVATE}${LIB}_nossp_pic.a 399 400lib${LIB_PRIVATE}${LIB}_nossp_pic.a: ${NOSSPSOBJS} 401 @${ECHO} building special nossp pic ${LIB} library 402 @rm -f ${.TARGET} 403 ${AR} ${ARFLAGS} ${.TARGET} ${NOSSPSOBJS} ${ARADD} 404.endif 405 406.endif # !defined(INTERNALLIB) 407 408.if defined(INTERNALLIB) && ${MK_PIE} != "no" && defined(LIB) && !empty(LIB) 409PIEOBJS+= ${OBJS:.o=.pieo} 410DEPENDOBJS+= ${PIEOBJS} 411CLEANFILES+= ${PIEOBJS} 412 413_LIBS+= lib${LIB_PRIVATE}${LIB}_pie.a 414 415lib${LIB_PRIVATE}${LIB}_pie.a: ${PIEOBJS} 416 @${ECHO} building pie ${LIB} library 417 @rm -f ${.TARGET} 418 ${AR} ${ARFLAGS} ${.TARGET} ${PIEOBJS} ${ARADD} 419.endif 420 421.if defined(_SKIP_BUILD) 422all: 423.else 424.if defined(_LIBS) && !empty(_LIBS) 425all: ${_LIBS} 426.endif 427 428.if ${MK_MAN} != "no" && !defined(LIBRARIES_ONLY) 429all: all-man 430.endif 431.endif 432 433CLEANFILES+= ${_LIBS} 434 435_EXTRADEPEND: 436.if !defined(NO_EXTRADEPEND) && defined(SHLIB_NAME) 437.if defined(DPADD) && !empty(DPADD) 438 echo ${SHLIB_NAME_FULL}: ${DPADD} >> ${DEPENDFILE} 439.endif 440.endif 441 442.if !target(install) 443 444.if defined(PRECIOUSLIB) 445.if !defined(NO_FSCHG) 446SHLINSTALLFLAGS+= -fschg 447.endif 448.endif 449# Install libraries with -S to avoid risk of modifying in-use libraries when 450# installing to a running system. It is safe to avoid this for NO_ROOT builds 451# that are only creating an image. 452# 453# XXX: Since Makefile.inc1 ends up building lib/libc both as part of 454# _startup_libs and as part of _generic_libs it ends up getting installed a 455# second time during the parallel build, and although the .WAIT in lib/Makefile 456# stops that mattering for lib, other directories like secure/lib are built in 457# parallel at the top level and are unaffected by that, so can sometimes race 458# with the libc.so.7 reinstall and see a missing or corrupt file. Ideally the 459# build system would be fixed to not build/install libc to WORLDTMP the second 460# time round, but for now using -S ensures the install is atomic and thus we 461# never see a broken intermediate state, so use it even for NO_ROOT builds. 462.if !defined(NO_SAFE_LIBINSTALL) #&& !defined(NO_ROOT) 463SHLINSTALLFLAGS+= -S 464SHLINSTALLSYMLINKFLAGS+= -S 465.endif 466 467_INSTALLFLAGS:= ${INSTALLFLAGS} 468.for ie in ${INSTALLFLAGS_EDIT} 469_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 470.endfor 471_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 472_SHLINSTALLSYMLINKFLAGS:= ${SHLINSTALLSYMLINKFLAGS} 473.for ie in ${INSTALLFLAGS_EDIT} 474_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 475.endfor 476 477.if defined(PCFILES) 478.for pcfile in ${PCFILES} 479installpcfiles: installpcfiles-${pcfile} 480 481installpcfiles-${pcfile}: ${pcfile} 482 ${INSTALL} ${TAG_ARGS:D${TAG_ARGS},dev} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 483 ${_INSTALLFLAGS} \ 484 ${.ALLSRC} ${DESTDIR}${LIBDATADIR}/pkgconfig/ 485.endfor 486.endif 487installpcfiles: .PHONY 488 489.if !defined(INTERNALLIB) 490realinstall: _libinstall installpcfiles 491.ORDER: beforeinstall _libinstall 492_libinstall: 493.if defined(LIB) && !empty(LIB) && ${MK_INSTALLLIB} != "no" 494 ${INSTALL} ${TAG_ARGS:D${TAG_ARGS},dev} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 495 ${_INSTALLFLAGS} lib${LIB_PRIVATE}${LIB}${_STATICLIB_SUFFIX}.a ${DESTDIR}${_LIBDIR}/ 496.if ${MK_PROFILE} != "no" 497 ${INSTALL} ${TAG_ARGS:D${TAG_ARGS},dev} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 498 ${_INSTALLFLAGS} lib${LIB_PRIVATE}${LIB}_p.a ${DESTDIR}${_LIBDIR}/ 499.endif 500.endif 501.if defined(SHLIB_NAME) 502 ${INSTALL} ${TAG_ARGS} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 503 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 504 ${SHLIB_NAME} ${DESTDIR}${_SHLIBDIR}/ 505.if ${MK_DEBUG_FILES} != "no" 506.if defined(DEBUGMKDIR) 507 ${INSTALL} ${TAG_ARGS:D${TAG_ARGS},dbg} -d ${DESTDIR}${DEBUGFILEDIR}/ 508.endif 509 ${INSTALL} ${TAG_ARGS:D${TAG_ARGS},dbg} -o ${LIBOWN} -g ${LIBGRP} -m ${DEBUGMODE} \ 510 ${_INSTALLFLAGS} \ 511 ${SHLIB_NAME}.debug ${DESTDIR}${DEBUGFILEDIR}/ 512.endif 513.if defined(SHLIB_LINK) 514.if commands(${SHLIB_LINK:R}.ld) 515 ${INSTALL} ${TAG_ARGS:D${TAG_ARGS},dev} -S -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 516 ${_INSTALLFLAGS} ${SHLIB_LINK:R}.ld \ 517 ${DESTDIR}${_LIBDIR}/${SHLIB_LINK} 518.for _SHLIB_LINK_LINK in ${SHLIB_LDSCRIPT_LINKS} 519 ${INSTALL_LIBSYMLINK} ${_SHLINSTALLSYMLINKFLAGS} ${TAG_ARGS} ${SHLIB_LINK} \ 520 ${DESTDIR}${_LIBDIR}/${_SHLIB_LINK_LINK} 521.endfor 522.else 523.if ${_SHLIBDIR} == ${_LIBDIR} 524.if ${SHLIB_LINK:Mlib*} 525 ${INSTALL_RSYMLINK} ${_SHLINSTALLSYMLINKFLAGS} ${TAG_ARGS:D${TAG_ARGS},dev} \ 526 ${SHLIB_NAME} ${DESTDIR}${_LIBDIR}/${SHLIB_LINK} 527.else 528 ${INSTALL_RSYMLINK} ${_SHLINSTALLSYMLINKFLAGS} ${TAG_ARGS} ${DESTDIR}${_SHLIBDIR}/${SHLIB_NAME} \ 529 ${DESTDIR}${_LIBDIR}/${SHLIB_LINK} 530.endif 531.else 532.if ${SHLIB_LINK:Mlib*} 533 ${INSTALL_RSYMLINK} ${_SHLINSTALLSYMLINKFLAGS} ${TAG_ARGS:D${TAG_ARGS},dev} \ 534 ${DESTDIR}${_SHLIBDIR}/${SHLIB_NAME} ${DESTDIR}${_LIBDIR}/${SHLIB_LINK} 535.else 536 ${INSTALL_RSYMLINK} ${_SHLINSTALLSYMLINKFLAGS} ${TAG_ARGS} \ 537 ${DESTDIR}${_SHLIBDIR}/${SHLIB_NAME} ${DESTDIR}${_LIBDIR}/${SHLIB_LINK} 538.endif 539.if exists(${DESTDIR}${_LIBDIR}/${SHLIB_NAME}) 540 -chflags noschg ${DESTDIR}${_LIBDIR}/${SHLIB_NAME} 541 rm -f ${DESTDIR}${_LIBDIR}/${SHLIB_NAME} 542.endif 543.endif # _SHLIBDIR == _LIBDIR 544.endif # SHLIB_LDSCRIPT 545.endif # SHLIB_LINK 546.endif # SHIB_NAME 547.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 548 ${INSTALL} ${TAG_ARGS:D${TAG_ARGS},dev} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 549 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${_LIBDIR}/ 550.endif 551.endif # !defined(INTERNALLIB) 552 553.if !defined(LIBRARIES_ONLY) 554.include <bsd.nls.mk> 555.include <bsd.confs.mk> 556.include <bsd.files.mk> 557#No need to install header for INTERNALLIB 558.if !defined(INTERNALLIB) 559.include <bsd.incs.mk> 560.endif 561.endif 562 563LINKOWN?= ${LIBOWN} 564LINKGRP?= ${LIBGRP} 565LINKMODE?= ${LIBMODE} 566SYMLINKOWN?= ${LIBOWN} 567SYMLINKGRP?= ${LIBGRP} 568.include <bsd.links.mk> 569 570.if ${MK_MAN} != "no" && !defined(LIBRARIES_ONLY) 571realinstall: maninstall 572.ORDER: beforeinstall maninstall 573.endif 574 575.endif 576 577.if ${MK_MAN} != "no" && !defined(LIBRARIES_ONLY) 578.include <bsd.man.mk> 579.endif 580 581.if defined(LIB) && !empty(LIB) 582OBJS_DEPEND_GUESS+= ${SRCS:M*.h} 583.for _S in ${SRCS:N*.[hly]} 584OBJS_DEPEND_GUESS.${_S:${OBJS_SRCS_FILTER:ts:}}.po+= ${_S} 585.endfor 586.endif 587.if defined(SHLIB_NAME) || \ 588 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 589.for _S in ${SRCS:N*.[hly]} 590OBJS_DEPEND_GUESS.${_S:${OBJS_SRCS_FILTER:ts:}}.pico+= ${_S} 591.endfor 592.endif 593.if defined(BUILD_NOSSP_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 594.for _S in ${SRCS:N*.[hly]} 595OBJS_DEPEND_GUESS.${_S:${OBJS_SRCS_FILTER:ts:}}.nossppico+= ${_S} 596.endfor 597.endif 598 599.if defined(HAS_TESTS) 600MAKE+= MK_MAKE_CHECK_USE_SANDBOX=yes 601SUBDIR_TARGETS+= check 602TESTS_LD_LIBRARY_PATH+= ${.OBJDIR} 603.endif 604 605.include <bsd.dep.mk> 606.include <bsd.clang-analyze.mk> 607.include <bsd.obj.mk> 608.include <bsd.sys.mk> 609