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