1*9c33d0a3Sriastradh# $NetBSD: bsd.prog.mk,v 1.354 2025/01/14 19:45:53 riastradh Exp $ 276cfd073Smikel# @(#)bsd.prog.mk 8.2 (Berkeley) 4/2/94 361f28255Scgd 403a26b2cSlukem.ifndef HOSTPROG 503a26b2cSlukem 61129ed4aStv.include <bsd.init.mk> 709a0767aSthorpej.include <bsd.shlib.mk> 8000836e0Sthorpej.include <bsd.gcc.mk> 91a5f018bSkamil.include <bsd.sanitizer.mk> 101e9e9266Smycroft 1164a497deSkamil##### Sanitizer specific flags. 1264a497deSkamil 13031cfa7fSkamilCFLAGS+= ${SANITIZERFLAGS} ${LIBCSANITIZERFLAGS} 14031cfa7fSkamilCXXFLAGS+= ${SANITIZERFLAGS} ${LIBCSANITIZERFLAGS} 1564a497deSkamilLDFLAGS+= ${SANITIZERFLAGS} 1664a497deSkamil 1712408017Sjmmv# 1812408017Sjmmv# Definitions and targets shared among all programs built by a single 1912408017Sjmmv# Makefile. 2012408017Sjmmv# 21fef715f4Schristos 221129ed4aStv##### Basic targets 234e5d05c9Smycroftrealinstall: proginstall scriptsinstall 24bb8827f7Smycroft 2512408017Sjmmv.gdbinit: 2612408017Sjmmv rm -f .gdbinit 2712408017Sjmmv.if defined(DESTDIR) && !empty(DESTDIR) 2812408017Sjmmv echo "set solib-absolute-prefix ${DESTDIR}" > .gdbinit 2912408017Sjmmv.else 3012408017Sjmmv touch .gdbinit 3112408017Sjmmv.endif 3212408017Sjmmv.for __gdbinit in ${GDBINIT} 3312408017Sjmmv echo "source ${__gdbinit}" >> .gdbinit 3412408017Sjmmv.endfor 3512408017Sjmmv 36386a389aSapbCLEANFILES+= a.out [Ee]rrs mklog core *.core .gdbinit 3712408017Sjmmv 38dc084e40Schristos.if defined(MKPIE) && (${MKPIE} != "no") && !defined(NOPIE) 3918c51ff0SchristosCFLAGS+= ${PIE_CFLAGS} 4081dd08dfSchristosAFLAGS+= ${PIE_AFLAGS} 41a3bc99b8SjoergLDFLAGS+= ${"${LDSTATIC.${.TARGET}}" == "-static" :? : ${PIE_LDFLAGS}} 421269d9a5Schristos.endif 431269d9a5Schristos 4461f28255ScgdCFLAGS+= ${COPTS} 456c0101deSchristos.if ${MKDEBUG:Uno} != "no" && !defined(NODEBUG) 46aa675a73SchristosCFLAGS+= -g 47aa675a73Schristos.endif 481ed40e7cSmrgOBJCFLAGS+= ${OBJCOPTS} 496830ef87SerhMKDEP_SUFFIXES?= .o .ln .d 5061f28255Scgd 5161fb3737Sdarran# CTF preserve debug symbols 521339b2ccSozaki-r.if (${MKCTF:Uno} != "no") && (${CFLAGS:M-g} != "") 5361fb3737SdarranCTFFLAGS+= -g 5461fb3737SdarranCTFMFLAGS+= -g 55e2bee468Smrg.if defined(HAVE_GCC) 56199409cfSchristos#CFLAGS+=-gdwarf-2 57aca5beabSchristos.endif 5861fb3737Sdarran.endif 5961fb3737Sdarran 606dba3a74Sthorpej# ELF platforms depend on crti.o, crtbegin.o, crtend.o, and crtn.o 619d602b9cSpk.ifndef LIBCRTBEGIN 626811dc67SmattLIBCRTBEGIN= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crti.o ${_GCC_CRTBEGIN} 63e7f0a978Schristos.MADE: ${LIBCRTBEGIN} 649d602b9cSpk.endif 659d602b9cSpk.ifndef LIBCRTEND 666811dc67SmattLIBCRTEND= ${_GCC_CRTEND} ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crtn.o 67e7f0a978Schristos.MADE: ${LIBCRTEND} 689d602b9cSpk.endif 69efcc9a4cSlukem_SHLINKER= ${SHLINKDIR}/ld.elf_so 70985170dbSthorpej 719d602b9cSpk.ifndef LIBCRT0 726811dc67SmattLIBCRT0= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crt0.o 73e7f0a978Schristos.MADE: ${LIBCRT0} 749d602b9cSpk.endif 7508d3e70eSross 76d0f0da0fSjoerg.ifndef LIBCRTI 776811dc67SmattLIBCRTI= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crti.o 78d0f0da0fSjoerg.MADE: ${LIBCRTI} 79d0f0da0fSjoerg.endif 80d0f0da0fSjoerg 81a606b4afSlukem##### Installed system library definitions 82a606b4afSlukem# 83a606b4afSlukem# E.g. 84a606b4afSlukem# LIBC?=${DESTDIR}/usr/lib/libc.a 856f734b82Smrg# LIBX11?=${DESTDIR}/usr/X11R7/lib/libX11.a 86a606b4afSlukem# etc.. 87fa86ae90Schristos# NB: If you are a library here, add it in bsd.README 88a606b4afSlukem 899b2c7d65Schristos_LIBLIST=\ 90c4fb05f7Schristos archive \ 91c4fb05f7Schristos asn1 \ 92fa86ae90Schristos atf_c \ 93fa86ae90Schristos atf_cxx \ 94c4fb05f7Schristos bind9 \ 952f0bfbf3Schristos blocklist \ 96c4fb05f7Schristos bluetooth \ 97c4fb05f7Schristos bsdmalloc \ 98c4fb05f7Schristos bz2 \ 99c4fb05f7Schristos c \ 100c4fb05f7Schristos c_pic \ 1017acab15bSchristos cbor \ 102c4fb05f7Schristos com_err \ 103c4fb05f7Schristos compat \ 104c4fb05f7Schristos crypt \ 105c4fb05f7Schristos crypto \ 106c4fb05f7Schristos curses \ 1070b097c4bSrin cxx \ 108c4fb05f7Schristos des \ 109c4fb05f7Schristos dns \ 110c4fb05f7Schristos edit \ 111c4fb05f7Schristos event \ 1129b2c7d65Schristos event_openssl \ 1139b2c7d65Schristos event_pthreads \ 1140bc53a58Sjoerg execinfo \ 1159b2c7d65Schristos expat \ 116c4fb05f7Schristos fetch \ 117c4fb05f7Schristos fl \ 1187acab15bSchristos fido2 \ 119c4fb05f7Schristos form \ 120c4fb05f7Schristos gcc \ 1210916a772Schristos gnuctf \ 122c4fb05f7Schristos gnumalloc \ 123c4fb05f7Schristos gssapi \ 124c4fb05f7Schristos hdb \ 125c4fb05f7Schristos heimbase \ 126c4fb05f7Schristos heimntlm \ 127c4fb05f7Schristos hx509 \ 128c4fb05f7Schristos intl \ 129c4fb05f7Schristos ipsec \ 130c4fb05f7Schristos isc \ 131c4fb05f7Schristos isccc \ 132c4fb05f7Schristos isccfg \ 133c4fb05f7Schristos kadm5clnt \ 134c4fb05f7Schristos kadm5srv \ 135c4fb05f7Schristos kafs \ 136c4fb05f7Schristos krb5 \ 137c4fb05f7Schristos kvm \ 138c4fb05f7Schristos l \ 139c4fb05f7Schristos lber \ 140c4fb05f7Schristos ldap \ 141c4fb05f7Schristos ldap_r \ 142c4fb05f7Schristos lua \ 143c4fb05f7Schristos m \ 144c4fb05f7Schristos magic \ 145c4fb05f7Schristos menu \ 1466a14b8a2Sjoerg netpgpverify \ 1479b2c7d65Schristos ns \ 148c4fb05f7Schristos objc \ 149c4fb05f7Schristos ossaudio \ 1509b2c7d65Schristos panel \ 151c4fb05f7Schristos pam \ 152c4fb05f7Schristos pcap \ 153c4fb05f7Schristos pci \ 154c4fb05f7Schristos posix \ 155c4fb05f7Schristos pthread \ 156c4fb05f7Schristos puffs \ 157c4fb05f7Schristos quota \ 158c4fb05f7Schristos radius \ 1599b2c7d65Schristos refuse \ 160c4fb05f7Schristos resolv \ 161c4fb05f7Schristos rmt \ 162c4fb05f7Schristos roken \ 163c4fb05f7Schristos rpcsvc \ 164c4fb05f7Schristos rt \ 165c4fb05f7Schristos rump \ 1664d3961b8Schristos rumpfs_cd9660 \ 167c4fb05f7Schristos rumpfs_efs \ 168c4fb05f7Schristos rumpfs_ext2fs \ 169c4fb05f7Schristos rumpfs_ffs \ 170c4fb05f7Schristos rumpfs_hfs \ 171c4fb05f7Schristos rumpfs_lfs \ 1724d3961b8Schristos rumpfs_msdos \ 173c4fb05f7Schristos rumpfs_nfs \ 174c4fb05f7Schristos rumpfs_ntfs \ 175c4fb05f7Schristos rumpfs_syspuffs \ 176c4fb05f7Schristos rumpfs_tmpfs \ 177c4fb05f7Schristos rumpfs_udf \ 178c4fb05f7Schristos rumpuser \ 179c4fb05f7Schristos saslc \ 180c4fb05f7Schristos skey \ 181c4fb05f7Schristos sl \ 182c4fb05f7Schristos sqlite3 \ 183c4fb05f7Schristos ssh \ 184c4fb05f7Schristos ssl \ 1859b2c7d65Schristos stdc++ \ 1869b2c7d65Schristos supc++ \ 187c4fb05f7Schristos terminfo \ 18850a5b513Schristos tre \ 189c90b9921Schristos unbound \ 190c4fb05f7Schristos usbhid \ 191c4fb05f7Schristos util \ 192c4fb05f7Schristos wind \ 193c4fb05f7Schristos wrap \ 194c4fb05f7Schristos y \ 1953ade096cSchristos z 1969b2c7d65Schristos 1979b2c7d65Schristos.for _lib in ${_LIBLIST} 198a606b4afSlukem.ifndef LIB${_lib:tu} 199fa86ae90SchristosLIB${_lib:tu}= ${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a 200a606b4afSlukem.MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded 201a606b4afSlukem.endif 202a606b4afSlukem.endfor 203fa86ae90Schristos 2042e193233Smrg.if (${MKKERBEROS} != "no") 205e9be03e6Schristos# Kerberos5 applications 206e9be03e6SchristosLIBKRB5_LDADD+= -lkrb5 -lcom_err \ 207a4770732Schristos -lhx509 -lcrypto -lasn1 \ 208a4770732Schristos -lwind -lheimbase -lcom_err -lroken \ 209fa838d7cSriastradh -lcrypt -lutil 210e9be03e6SchristosLIBKRB5_DPADD+= ${LIBKRB5} ${LIBCOM_ERR} \ 211a4770732Schristos ${LIBHX509} ${LIBCRYPTO} ${LIBASN1} \ 212a4770732Schristos ${LIBWIND} ${LIBHEIMBASE} ${LIBCOM_ERR} ${LIBROKEN} \ 213fa838d7cSriastradh ${LIBCRYPT} ${LIBUTIL} 2149aa9806aSchristosLIBGSSAPI_LDADD+= -lgssapi -lheimntlm ${LIBKRB5_LDADD} 2159aa9806aSchristosLIBGSSAPI_DPADD+= ${LIBGSSAPI} ${LIBHEIMNTLM} ${LIBKRB5_DPADD} 2162e193233Smrg.endif 2172e193233Smrg 2187377d9deSchristos.if (${MKLDAP} != "no") 2199aa9806aSchristosLIBLDAP_LDADD+= -lldap -llber ${LIBGSSAPI_LDADD} -lssl -lcrypto 2209aa9806aSchristosLIBLDAP_DPADD+= ${LIBLDAP} ${LIBLBER} ${LIBGSSAPI_DPADD} ${LIBSSL} ${LIBCRYPTO} 2217377d9deSchristos.endif 2227377d9deSchristos 2238e8728c4She# PAM applications, if linked statically, need more libraries 2248e8728c4She.if (${MKPIC} == "no") 225a8243f1cSchristosPAM_STATIC_LDADD+= -lssh 226a8243f1cSchristosPAM_STATIC_DPADD+= ${LIBSSH} 227a8243f1cSchristos.if (${MKKERBEROS} != "no") 228ae7d1665ShePAM_STATIC_LDADD+= -lkafs -lkrb5 -lhx509 -lwind -lasn1 \ 229a42fc114Snia -lroken -lcom_err -lheimbase -lcrypto -lsqlite3 -lm 230ae7d1665ShePAM_STATIC_DPADD+= ${LIBKAFS} ${LIBKRB5} ${LIBHX509} ${LIBWIND} ${LIBASN1} \ 2315d507f2dSmartin ${LIBROKEN} ${LIBCOM_ERR} ${LIBHEIMBASE} ${LIBCRYPTO} ${LIBSQLITE3} \ 232a42fc114Snia ${LIBM} 233a8243f1cSchristos.endif 234a8243f1cSchristos.if (${MKSKEY} != "no") 235a8243f1cSchristosPAM_STATIC_LDADD+= -lskey 236a8243f1cSchristosPAM_STATIC_DPADD+= ${LIBSKEY} 237a8243f1cSchristos.endif 238a8243f1cSchristosPAM_STATIC_LDADD+= -lradius -lcrypt -lrpcsvc -lutil 239a8243f1cSchristosPAM_STATIC_DPADD+= ${LIBRADIUS} ${LIBCRYPT} ${LIBRPCSVC} ${LIBUTIL} 2408e8728c4She.else 2418e8728c4ShePAM_STATIC_LDADD= 2428e8728c4ShePAM_STATIC_DPADD= 2438e8728c4She.endif 2448e8728c4She 245fa86ae90Schristos# NB: If you are a library here, add it in bsd.README 2469b5a96cdSchristos# This list is sorted with -f so that it matches the order in bsd.README 247d966a326Schristos_X11LIBLIST= dps EGL fntstubs fontcache fontconfig fontenc freetype FS GL GLU \ 248d966a326Schristos GLw I810XvMC ICE IntelXvMC lbxutil SM X11 X11_xcb Xres Xau Xau7 Xaw xcb \ 249d966a326Schristos Xcomposite Xcursor xcvt Xdamage Xdmcp Xext Xfixes Xfont Xfont2 Xft Xi \ 2509b5a96cdSchristos Xinerama xkbfile Xmu Xmuu Xpm Xrandr Xrender Xss Xt XTrap Xtst Xv Xxf86dga \ 251d966a326Schristos Xxf86misc Xxf86vm 2522fa41703Smrg_XCBLIBLIST= \ 2532fa41703Smrg atom aux composite damage dpms dri2 dri3 event glx icccm image keysyms \ 2542fa41703Smrg present property randr record render_util render reply res screensaver \ 2552fa41703Smrg shape shm sync xf86dri xfixes xinerama xinput xkb xtest xv xvmc 2562fa41703Smrg 2572fa41703Smrg# Ugly one-offs 2582fa41703SmrgLIBX11_XCB= ${DESTDIR}${X11USRLIBDIR}/libX11-xcb.a 2592fa41703SmrgLIBXCB= ${DESTDIR}${X11USRLIBDIR}/libxcb.a 2609b5a96cdSchristos 2619b5a96cdSchristos.for _lib in ${_X11LIBLIST} 262a606b4afSlukem.ifndef LIB${_lib:tu} 26344c3e543SrtrLIB${_lib:tu}= ${DESTDIR}${X11USRLIBDIR}/lib${_lib}.a 264a606b4afSlukem.MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded 265a606b4afSlukem.endif 266a606b4afSlukem.endfor 267a606b4afSlukem 2682fa41703Smrg# These ones have "_" in the variable name and "-" in the path. 2692fa41703Smrg.for _lib in ${_XCBLIBLIST} 2702fa41703Smrg.ifndef LIBXCB_${_lib:tu} 2712fa41703SmrgLIBXCB_${_lib:tu}= ${DESTDIR}${X11USRLIBDIR}/libxcb-${_lib}.a 2722fa41703Smrg.MADE: ${LIBXCB_${_lib:tu}} # Note: ${DESTDIR} will be expanded 2732fa41703Smrg.endif 2742fa41703Smrg.endfor 275f8cebe2aSmrg 276aa8cb2a4Slukem.if defined(RESCUEDIR) 277aa8cb2a4SlukemCPPFLAGS+= -DRESCUEDIR=\"${RESCUEDIR}\" 278aa8cb2a4Slukem.endif 279aa8cb2a4Slukem 280efcc9a4cSlukem_PROGLDOPTS= 281efcc9a4cSlukem.if ${SHLINKDIR} != "/usr/libexec" # XXX: change or remove if ld.so moves 282efcc9a4cSlukem_PROGLDOPTS+= -Wl,-dynamic-linker=${_SHLINKER} 283efcc9a4cSlukem.endif 284e71fc1ccSlukem.if ${SHLIBDIR} != "/usr/lib" 2855e3fd2e0Sjoerg_PROGLDOPTS+= -Wl,-rpath,${SHLIBDIR} \ 286c28ff146Sjoerg -L=${SHLIBDIR} 287067600c8Sjoerg.elif ${SHLIBINSTALLDIR} != "/usr/lib" 288067600c8Sjoerg_PROGLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR} \ 289067600c8Sjoerg -L=${SHLIBINSTALLDIR} 290efcc9a4cSlukem.endif 291efcc9a4cSlukem 292b124cdf1Smycroft__proginstall: .USE 293130ab733Slukem ${_MKTARGET_INSTALL} 2940812154eStv ${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 2958bc0f5daSjwise ${STRIPFLAG} ${.ALLSRC} ${.TARGET} 296b124cdf1Smycroft 29784d9317cSpooka__progrumpinstall: .USE 29884d9317cSpooka ${_MKTARGET_INSTALL} 29984d9317cSpooka ${INSTALL_FILE} -o ${RUMPBINOWN} -g ${RUMPBINGRP} -m ${RUMPBINMODE} \ 30084d9317cSpooka ${STRIPFLAG} ${.ALLSRC} ${.TARGET} 30184d9317cSpooka 302cacf5bfaSlukem__progdebuginstall: .USE 303cacf5bfaSlukem ${_MKTARGET_INSTALL} 304cacf5bfaSlukem ${INSTALL_FILE} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \ 305cacf5bfaSlukem ${.ALLSRC} ${.TARGET} 306cacf5bfaSlukem 30712408017Sjmmv 30812408017Sjmmv 30912408017Sjmmv# 31012408017Sjmmv# Backwards compatibility with Makefiles that assume that bsd.prog.mk 31112408017Sjmmv# can only build a single binary. 31212408017Sjmmv# 31312408017Sjmmv 31412408017Sjmmv_APPEND_MANS=yes 31512408017Sjmmv_APPEND_SRCS=yes 31612408017Sjmmv 3176cedae18Slukem_CCLINKFLAGS= 3186cedae18Slukem 31912408017Sjmmv.if defined(PROG_CXX) 32012408017SjmmvPROG= ${PROG_CXX} 3216cedae18Slukem_CCLINK= ${CXX} ${_CCLINKFLAGS} 32212408017Sjmmv.endif 32312408017Sjmmv 32484d9317cSpooka.if defined(RUMPPRG) 325ffeb8dbfSchristosCPPFLAGS+= -D_KERNTYPES 32684d9317cSpookaPROG= ${RUMPPRG} 32743673c5eSpooka. ifndef CRUNCHEDPROG 328eda981fcSchristos. if (${MKRUMP} != "no") 32984d9317cSpookaPROGS= ${RUMPPRG} rump.${RUMPPRG} 330eda981fcSchristos. else 331eda981fcSchristosPROGS= ${RUMPPRG} 332eda981fcSchristos. endif 33384d9317cSpooka. if defined(SRCS) 334eda981fcSchristos. if (${MKRUMP} != "no") 33584d9317cSpookaSRCS.rump.${PROG}:= ${SRCS} ${PROG}_rumpops.c ${RUMPSRCS} 336eda981fcSchristos. endif 33784d9317cSpookaSRCS+= ${PROG}_hostops.c 33884d9317cSpooka. else 33984d9317cSpookaSRCS= ${PROG}.c ${PROG}_hostops.c 340eda981fcSchristos. if (${MKRUMP} != "no") 34184d9317cSpookaSRCS.rump.${PROG}= ${PROG}.c ${PROG}_rumpops.c ${RUMPSRCS} 34284d9317cSpooka. endif 343eda981fcSchristos. endif 344eda981fcSchristos. if (${MKRUMP} != "no") 34514c8789bSpookaDPSRCS+= ${PROG}_rumpops.c ${RUMPSRCS} 346e480d58dSchristosLDADD.rump.${PROG}+= ${LDADD.rump} -lrumpclient 347e480d58dSchristosDPADD.rump.${PROG}+= ${DPADD.rump} ${LIBRUMPCLIENT} 34884d9317cSpookaMAN.rump.${PROG}= # defined but feeling empty 34984d9317cSpooka_RUMPINSTALL.rump.${PROG}=# defined 350eda981fcSchristos. endif 35143673c5eSpooka. else # CRUNCHEDPROG 35243673c5eSpookaPROGS= ${PROG} 35343673c5eSpookaCPPFLAGS+= -DCRUNCHOPS 35443673c5eSpooka. endif 35584d9317cSpooka.endif 35684d9317cSpooka 35712408017Sjmmv.if defined(PROG) 3586cedae18Slukem_CCLINK?= ${CC} ${_CCLINKFLAGS} 35912408017Sjmmv. if defined(MAN) 36012408017SjmmvMAN.${PROG}= ${MAN} 36112408017Sjmmv_APPEND_MANS= no 36212408017Sjmmv. endif 36312408017Sjmmv. if !defined(OBJS) 36412408017SjmmvOBJS= ${OBJS.${PROG}} 36512408017Sjmmv. endif 36612408017Sjmmv. if defined(PROGNAME) 36712408017SjmmvPROGNAME.${PROG}= ${PROGNAME} 36812408017Sjmmv. endif 36912408017Sjmmv. if defined(SRCS) 37012408017SjmmvSRCS.${PROG}= ${SRCS} 37112408017Sjmmv_APPEND_SRCS= no 37212408017Sjmmv. endif 37312408017Sjmmv.endif 37412408017Sjmmv 37512408017Sjmmv# Turn the single-program PROG and PROG_CXX variables into their multi-word 37612408017Sjmmv# counterparts, PROGS and PROGS_CXX. 37784d9317cSpooka.if !defined(RUMPPRG) 37812408017Sjmmv. if defined(PROG_CXX) && !defined(PROGS_CXX) 37912408017SjmmvPROGS_CXX= ${PROG_CXX} 3808de5cd33Sjmmv. elif defined(PROG) && !defined(PROGS) 38112408017SjmmvPROGS= ${PROG} 38212408017Sjmmv. endif 38384d9317cSpooka.endif 38412408017Sjmmv 3854880aaedSchristos##### Libraries that this may depend upon. 3864880aaedSchristos.if defined(PROGDPLIBS) # { 3874880aaedSchristos. for _lib _dir in ${PROGDPLIBS} 3889f8fb6acSriastradh. if !defined(LIBDO.${_lib}) 3899f8fb6acSriastradhLIBDO.${_lib}!= cd "${_dir}" && ${PRINTOBJDIR} 3909f8fb6acSriastradh.MAKEOVERRIDES+=LIBDO.${_lib} 3914880aaedSchristos. endif 39279f27b9dSchristos. if defined(PROGDPLIBSSTATIC) 3939f8fb6acSriastradhDPADD+= ${LIBDO.${_lib}}/lib${_lib}.a 3949f8fb6acSriastradhLDADD+= ${LIBDO.${_lib}}/lib${_lib}.a 39579f27b9dSchristos. else 3969f8fb6acSriastradhLDADD+= -L${LIBDO.${_lib}} -l${_lib} 3979f8fb6acSriastradh. if exists(${LIBDO.${_lib}}/lib${_lib}_pic.a) 3989f8fb6acSriastradhDPADD+= ${LIBDO.${_lib}}/lib${_lib}_pic.a 3999f8fb6acSriastradh. elif exists(${LIBDO.${_lib}}/lib${_lib}.so) 4009f8fb6acSriastradhDPADD+= ${LIBDO.${_lib}}/lib${_lib}.so 4014880aaedSchristos. else 4029f8fb6acSriastradhDPADD+= ${LIBDO.${_lib}}/lib${_lib}.a 4034880aaedSchristos. endif 40479f27b9dSchristos. endif 4054880aaedSchristos. endfor 4064880aaedSchristos.endif # } 4077743e8c9Schristos 4087743e8c9SchristosLDADD+=${LDADD_AFTER} 4097743e8c9SchristosDPADD+=${DPADD_AFTER} 4107743e8c9Schristos 41112408017Sjmmv# 41212408017Sjmmv# Per-program definitions and targets. 41312408017Sjmmv# 41412408017Sjmmv 41547c982a3Smatt_CCLINK.CDEFAULT= ${CC} ${_CCLINKFLAGS} 41612408017Sjmmv# Definitions specific to C programs. 41712408017Sjmmv.for _P in ${PROGS} 41812408017SjmmvSRCS.${_P}?= ${_P}.c 4196cedae18Slukem_CCLINK.${_P}= ${CC} ${_CCLINKFLAGS} 42047c982a3Smatt_CFLAGS.${_P}= ${CFLAGS} ${CPUFLAGS} 42147c982a3Smatt_CPPFLAGS.${_P}= ${CPPFLAGS} 42247c982a3Smatt_COPTS.${_P}= ${COPTS} 42312408017Sjmmv.endfor 42412408017Sjmmv 42547c982a3Smatt_CCLINK.CXXDEFAULT= ${CXX} ${_CCLINKFLAGS} 42612408017Sjmmv# Definitions specific to C++ programs. 42712408017Sjmmv.for _P in ${PROGS_CXX} 42812408017SjmmvSRCS.${_P}?= ${_P}.cc 4296cedae18Slukem_CCLINK.${_P}= ${CXX} ${_CCLINKFLAGS} 43012408017Sjmmv.endfor 43112408017Sjmmv 43212408017Sjmmv# Language-independent definitions. 43312408017Sjmmv.for _P in ${PROGS} ${PROGS_CXX} # { 43412408017Sjmmv 43512408017SjmmvBINDIR.${_P}?= ${BINDIR} 43612408017SjmmvPROGNAME.${_P}?= ${_P} 43712408017Sjmmv 4380c050843Schristos.if ${MKDEBUG:Uno} != "no" && !defined(NODEBUG) && !commands(${_P}) && \ 439c7928288Schristos empty(SRCS.${_P}:M*.sh) 44012408017Sjmmv_PROGDEBUG.${_P}:= ${PROGNAME.${_P}}.debug 44112408017Sjmmv.endif 44212408017Sjmmv 44392253c77Skamil# paxctl specific arguments 44492253c77Skamil 44512408017Sjmmv.if defined(PAXCTL_FLAGS) 44612408017SjmmvPAXCTL_FLAGS.${_P}?= ${PAXCTL_FLAGS} 44712408017Sjmmv.endif 44812408017Sjmmv 44992253c77Skamil.if ${MKSANITIZER:Uno} == "yes" && \ 45092253c77Skamil (${USE_SANITIZER} == "address" || ${USE_SANITIZER} == "thread" || \ 45192253c77Skamil ${USE_SANITIZER} == "memory") 45292253c77SkamilPAXCTL_FLAGS.${_P}= +a 45392253c77Skamil.endif 45492253c77Skamil 45512408017Sjmmv##### PROG specific flags. 45612408017Sjmmv 457fcb81e1fSjmmv_DPADD.${_P}= ${DPADD} ${DPADD.${_P}} 45812408017Sjmmv_LDADD.${_P}= ${LDADD} ${LDADD.${_P}} 45912408017Sjmmv_LDFLAGS.${_P}= ${LDFLAGS} ${LDFLAGS.${_P}} 460d0972049Schristos.if ${MKSANITIZER} != "yes" 461d0972049Schristos# Sanitizers don't support static build. 46212408017Sjmmv_LDSTATIC.${_P}= ${LDSTATIC} ${LDSTATIC.${_P}} 463d0972049Schristos.endif 46412408017Sjmmv 46512408017Sjmmv##### Build and install rules 46612408017Sjmmv.if !empty(_APPEND_SRCS:M[Yy][Ee][Ss]) 46712408017SjmmvSRCS+= ${SRCS.${_P}} # For bsd.dep.mk 46812408017Sjmmv.endif 46912408017Sjmmv 47012408017Sjmmv_YPSRCS.${_P}= ${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}} 47112408017Sjmmv 47212408017SjmmvDPSRCS+= ${_YPSRCS.${_P}} 47312408017SjmmvCLEANFILES+= ${_YPSRCS.${_P}} 47412408017Sjmmv 47512408017Sjmmv.if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth) 47612408017SjmmvOBJS.${_P}+= ${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g} 47712408017SjmmvLOBJS.${_P}+= ${LSRCS:.c=.ln} ${SRCS.${_P}:M*.c:.c=.ln} 47812408017Sjmmv.endif 47912408017Sjmmv 48012408017Sjmmv.if defined(OBJS.${_P}) && !empty(OBJS.${_P}) # { 48112408017Sjmmv.NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}} 48212408017Sjmmv 48312408017Sjmmv${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS} 48412408017Sjmmv 485d0f0da0fSjoerg${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \ 486d0f0da0fSjoerg ${LIBCRTEND} ${_DPADD.${_P}} 48712408017Sjmmv.if !commands(${_P}) 48812408017Sjmmv ${_MKTARGET_LINK} 4896cedae18Slukem ${_CCLINK.${_P}} \ 4909614d5d9Slukem ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \ 49107a6c807Schristos ${OBJS.${_P}} ${_PROGLDOPTS} ${_LDADD.${_P}} 49261fb3737Sdarran.if defined(CTFMERGE) 49361fb3737Sdarran ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}} 49461fb3737Sdarran.endif 49512408017Sjmmv.if defined(PAXCTL_FLAGS.${_P}) 49612408017Sjmmv ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET} 49712408017Sjmmv.endif 4985af38558Sjoerg.if ${MKSTRIPIDENT} != "no" 4995af38558Sjoerg ${OBJCOPY} -R .ident ${.TARGET} 5005af38558Sjoerg.endif 50112408017Sjmmv.endif # !commands(${_P}) 50212408017Sjmmv 503fcb81e1fSjmmv${_P}.ro: ${OBJS.${_P}} ${_DPADD.${_P}} 50412408017Sjmmv ${_MKTARGET_LINK} 505cb4d6b86Smartin ${CC} ${LDFLAGS:N-pie} -nostdlib -r -Wl,-dc -o ${.TARGET} ${OBJS.${_P}} 50612408017Sjmmv 50712408017Sjmmv.if defined(_PROGDEBUG.${_P}) 508ac0bd149Sjmmv${_PROGDEBUG.${_P}}: ${_P} 50912408017Sjmmv ${_MKTARGET_CREATE} 510b1d1e928Smrg ( ${OBJCOPY} --only-keep-debug --compress-debug-sections \ 511b1d1e928Smrg ${_P} ${_PROGDEBUG.${_P}} && \ 512b1d1e928Smrg ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \ 51344f36b23Slukem --add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \ 51444f36b23Slukem ) || (rm -f ${_PROGDEBUG.${_P}}; false) 51512408017Sjmmv.endif 51612408017Sjmmv 51712408017Sjmmv.endif # defined(OBJS.${_P}) && !empty(OBJS.${_P}) # } 51812408017Sjmmv 51912408017Sjmmv.if !defined(MAN.${_P}) 52012408017SjmmvMAN.${_P}= ${_P}.1 52112408017Sjmmv.endif # !defined(MAN.${_P}) 52212408017Sjmmv.if !empty(_APPEND_MANS:M[Yy][Ee][Ss]) 52312408017SjmmvMAN+= ${MAN.${_P}} 52412408017Sjmmv.endif 52512408017Sjmmv 52612408017Sjmmvrealall: ${_P} ${_PROGDEBUG.${_P}} 52712408017Sjmmv 528386a389aSapbCLEANFILES+= ${_P} ${_PROGDEBUG.${_P}} 52912408017Sjmmv 53012408017Sjmmv.if defined(OBJS.${_P}) && !empty(OBJS.${_P}) 531386a389aSapbCLEANFILES+= ${OBJS.${_P}} ${LOBJS.${_P}} 53212408017Sjmmv.endif 53312408017Sjmmv 53412408017Sjmmv_PROG_INSTALL+= proginstall-${_P} 53512408017Sjmmv 53612408017Sjmmv.if !target(proginstall-${_P}) # { 53712408017Sjmmvproginstall-${_P}:: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \ 53812408017Sjmmv ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}} 53912408017Sjmmv.PRECIOUS: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \ 54012408017Sjmmv ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}} 54112408017Sjmmv 542f134f3dcSlukem.if ${MKUPDATE} == "no" 54384d9317cSpooka.if defined(_RUMPINSTALL.${_P}) 54484d9317cSpooka${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __progrumpinstall 54584d9317cSpooka.else 54612408017Sjmmv${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall 54784d9317cSpooka.endif 54812408017Sjmmv.if !defined(BUILD) && !make(all) && !make(${_P}) 54912408017Sjmmv${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE 55009819b05Smycroft.endif 55112408017Sjmmv.if defined(_PROGDEBUG.${_P}) 55212408017Sjmmv${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall 55312408017Sjmmv.if !defined(BUILD) && !make(all) && !make(${_P}) 55412408017Sjmmv${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE 555cacf5bfaSlukem.endif 55612408017Sjmmv.endif # define(_PROGDEBUG.${_P}) 557cacf5bfaSlukem.else # MKUPDATE != no 55884d9317cSpooka.if defined(_RUMPINSTALL.${_P}) 55984d9317cSpooka${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __progrumpinstall 56084d9317cSpooka.else 56112408017Sjmmv${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall 56284d9317cSpooka.endif 56312408017Sjmmv.if !defined(BUILD) && !make(all) && !make(${_P}) 56412408017Sjmmv${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE 56525f6ec74Schristos.endif 56612408017Sjmmv.if defined(_PROGDEBUG.${_P}) 56712408017Sjmmv${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall 56812408017Sjmmv.if !defined(BUILD) && !make(all) && !make(${_P}) 56912408017Sjmmv${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE 57009819b05Smycroft.endif 57112408017Sjmmv.endif # defined(_PROGDEBUG.${_P}) 572cacf5bfaSlukem.endif # MKUPDATE != no 573cacf5bfaSlukem 57412408017Sjmmv.endif # !target(proginstall-${_P}) # } 57512408017Sjmmv 57612408017Sjmmvlint: lint-${_P} 57712408017Sjmmvlint-${_P}: ${LOBJS.${_P}} 57812408017Sjmmv.if defined(LOBJS.${_P}) && !empty(LOBJS.${_P}) 579c207dc67Schristos.if defined(DESTDIR) 580c207dc67Schristos ${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[ ]*/-L/Wg:M-L*} -L${DESTDIR}/usr/libdata/lint ${LOBJS.${_P}} ${_LDADD.${_P}} 581c207dc67Schristos.else 58212408017Sjmmv ${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[ ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}} 58312408017Sjmmv.endif 584c207dc67Schristos.endif 58512408017Sjmmv 58612408017Sjmmv.endfor # _P in ${PROGS} ${PROGS_CXX} # } 58728e6c71eSmycroft 5880287baacSjmmv.if defined(OBJS) && !empty(OBJS) && \ 5890287baacSjmmv (empty(PROGS) && empty(PROGS_CXX)) 590386a389aSapbCLEANFILES+= ${OBJS} ${LOBJS} 5910287baacSjmmv.endif 5920287baacSjmmv 593bb8827f7Smycroft.if !target(proginstall) 59412408017Sjmmvproginstall:: ${_PROG_INSTALL} 595bb8827f7Smycroft.endif 59684a47486Slukem.PHONY: proginstall 597bb8827f7Smycroft 59812408017Sjmmv 59912408017Sjmmv 60012408017Sjmmvrealall: ${SCRIPTS} 601cacf5bfaSlukem.if defined(SCRIPTS) && !target(scriptsinstall) # { 6025fa188a2SmycroftSCRIPTSDIR?=${BINDIR} 6035fa188a2SmycroftSCRIPTSOWN?=${BINOWN} 6045fa188a2SmycroftSCRIPTSGRP?=${BINGRP} 6055fa188a2SmycroftSCRIPTSMODE?=${BINMODE} 60625f6ec74Schristos 60734e1bda4Smycroftscriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 608befa5650Smycroft.PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 60934e1bda4Smycroft 610b124cdf1Smycroft__scriptinstall: .USE 611130ab733Slukem ${_MKTARGET_INSTALL} 6120812154eStv ${INSTALL_FILE} \ 613750b27b8Smycroft -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \ 614750b27b8Smycroft -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \ 615750b27b8Smycroft -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \ 6168bc0f5daSjwise ${.ALLSRC} ${.TARGET} 617b124cdf1Smycroft 618263f3e58Ssommerfeld.for S in ${SCRIPTS:O:u} 619f134f3dcSlukem.if ${MKUPDATE} == "no" 62009819b05Smycroft${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall 62109819b05Smycroft.if !defined(BUILD) && !make(all) && !make(${S}) 62209819b05Smycroft${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE 62309819b05Smycroft.endif 62409819b05Smycroft.else 62509819b05Smycroft${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall 62634e1bda4Smycroft.if !defined(BUILD) && !make(all) && !make(${S}) 62734e1bda4Smycroft${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE 62834e1bda4Smycroft.endif 62909819b05Smycroft.endif 63025f6ec74Schristos.endfor 631cacf5bfaSlukem.endif # } 63225f6ec74Schristos 633bb8827f7Smycroft.if !target(scriptsinstall) 634bb8827f7Smycroftscriptsinstall:: 63561f28255Scgd.endif 63684a47486Slukem.PHONY: scriptsinstall 63761f28255Scgd 6381129ed4aStv##### Pull in related .mk logic 63991fe922fSapbLINKSOWN?= ${BINOWN} 64091fe922fSapbLINKSGRP?= ${BINGRP} 64191fe922fSapbLINKSMODE?= ${BINMODE} 64261f28255Scgd.include <bsd.man.mk> 643e3c663ebSjtc.include <bsd.nls.mk> 644cef52070Schristos.include <bsd.files.mk> 64525f6ec74Schristos.include <bsd.inc.mk> 646a9b9dbd4Smycroft.include <bsd.links.mk> 64770174eb6Schristos.include <bsd.sys.mk> 648a504cd29Slukem.include <bsd.dep.mk> 649ba5a5a11Sjoerg.include <bsd.clang-analyze.mk> 650386a389aSapb.include <bsd.clean.mk> 65133bcabe9Scube 6521129ed4aStv${TARGETS}: # ensure existence 65303a26b2cSlukem 65403a26b2cSlukem.endif # HOSTPROG 655