1# $NetBSD: bsd.prog.mk,v 1.286 2013/11/11 10:24:53 joerg Exp $ 2# @(#)bsd.prog.mk 8.2 (Berkeley) 4/2/94 3 4.ifndef HOSTPROG 5 6.include <bsd.init.mk> 7.include <bsd.shlib.mk> 8.include <bsd.gcc.mk> 9.include <minix.gcov.mk> 10 11# 12# Definitions and targets shared among all programs built by a single 13# Makefile. 14# 15 16##### Basic targets 17realinstall: proginstall scriptsinstall 18 19.gdbinit: 20 rm -f .gdbinit 21.if defined(DESTDIR) && !empty(DESTDIR) 22 echo "set solib-absolute-prefix ${DESTDIR}" > .gdbinit 23.else 24 touch .gdbinit 25.endif 26.for __gdbinit in ${GDBINIT} 27 echo "source ${__gdbinit}" >> .gdbinit 28.endfor 29 30CLEANFILES+= a.out [Ee]rrs mklog core *.core .gdbinit 31 32.if defined(SHAREDSTRINGS) 33CLEANFILES+=strings 34.c.o: 35 ${CC} -E ${CPPFLAGS} ${CFLAGS} ${.IMPSRC} | xstr -c - 36 @${CC} ${CPPFLAGS} ${CFLAGS} -c x.c -o ${.TARGET} 37.if defined(CTFCONVERT) 38 ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 39.endif 40 @rm -f x.c 41 42.cc.o .cpp.o .cxx.o .C.o: 43 ${CXX} -E ${CPPFLAGS} ${CXXFLAGS} ${.IMPSRC} | xstr -c - 44 @mv -f x.c x.cc 45 @${CXX} ${CPPFLAGS} ${CXXFLAGS} -c x.cc -o ${.TARGET} 46.if defined(CTFCONVERT) 47 ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 48.endif 49 @rm -f x.cc 50.endif 51 52.if defined(MKPIE) && (${MKPIE} != "no") 53CFLAGS+= ${PIE_CFLAGS} 54AFLAGS+= ${PIE_AFLAGS} 55LDFLAGS+= ${PIE_LDFLAGS} 56.endif 57 58CFLAGS+= ${COPTS} 59.if defined(MKDEBUG) && (${MKDEBUG} != "no") 60CFLAGS+= -g 61.endif 62OBJCFLAGS+= ${OBJCOPTS} 63MKDEP_SUFFIXES?= .o .ln 64 65# CTF preserve debug symbols 66.if defined(MKDTRACE) && (${MKDTRACE} != "no") && (${CFLAGS:M-g} != "") 67CTFFLAGS+= -g 68CTFMFLAGS+= -g 69.endif 70 71# ELF platforms depend on crti.o, crtbegin.o, crtend.o, and crtn.o 72.ifndef LIBCRTBEGIN 73LIBCRTBEGIN= ${DESTDIR}/usr/lib/crti.o ${_GCC_CRTBEGIN} 74.MADE: ${LIBCRTBEGIN} 75.endif 76.ifndef LIBCRTEND 77LIBCRTEND= ${_GCC_CRTEND} ${DESTDIR}/usr/lib/crtn.o 78.MADE: ${LIBCRTEND} 79.endif 80_SHLINKER= ${SHLINKDIR}/ld.elf_so 81 82.ifndef LIBCRT0 83LIBCRT0= ${DESTDIR}/usr/lib/crt0.o 84.MADE: ${LIBCRT0} 85.endif 86 87.ifndef LIBCRTI 88LIBCRTI= ${DESTDIR}/usr/lib/crti.o 89.MADE: ${LIBCRTI} 90.endif 91 92##### Installed system library definitions 93# 94# E.g. 95# LIBC?=${DESTDIR}/usr/lib/libc.a 96# LIBX11?=${DESTDIR}/usr/X11R7/lib/libX11.a 97# etc.. 98# NB: If you are a library here, add it in bsd.README 99 100.for _lib in \ 101 archive \ 102 asn1 \ 103 atf_c \ 104 atf_cxx \ 105 bind9 \ 106 bluetooth \ 107 bsdmalloc \ 108 bz2 \ 109 c \ 110 c_pic \ 111 com_err \ 112 compat \ 113 crypt \ 114 crypto \ 115 crypto_idea \ 116 crypto_mdc2 \ 117 crypto_rc5 \ 118 curses \ 119 dbm \ 120 des \ 121 dns \ 122 edit \ 123 event \ 124 expat \ 125 fetch \ 126 fl \ 127 form \ 128 g2c \ 129 gcc \ 130 gnumalloc \ 131 gssapi \ 132 hdb \ 133 heimbase \ 134 heimntlm \ 135 hx509 \ 136 intl \ 137 ipsec \ 138 isc \ 139 isccc \ 140 isccfg \ 141 kadm5clnt \ 142 kadm5srv \ 143 kafs \ 144 krb5 \ 145 kvm \ 146 l \ 147 lber \ 148 ldap \ 149 ldap_r \ 150 lua \ 151 lwres \ 152 m \ 153 magic \ 154 menu \ 155 objc \ 156 ossaudio \ 157 pam \ 158 pcap \ 159 pci \ 160 pmc \ 161 posix \ 162 pthread \ 163 pthread_dbg \ 164 puffs \ 165 quota \ 166 radius \ 167 resolv \ 168 rmt \ 169 roken \ 170 rpcsvc \ 171 rt \ 172 rump \ 173 rumpfs_cd9660fs \ 174 rumpfs_efs \ 175 rumpfs_ext2fs \ 176 rumpfs_ffs \ 177 rumpfs_hfs \ 178 rumpfs_lfs \ 179 rumpfs_msdosfs \ 180 rumpfs_nfs \ 181 rumpfs_ntfs \ 182 rumpfs_syspuffs \ 183 rumpfs_tmpfs \ 184 rumpfs_udf \ 185 rumpfs_ufs \ 186 rumpuser \ 187 saslc \ 188 skey \ 189 sl \ 190 sqlite3 \ 191 ss \ 192 ssh \ 193 ssl \ 194 ssp \ 195 stdcxx \ 196 supcxx \ 197 terminfo \ 198 tre \ 199 usbhid \ 200 util \ 201 wind \ 202 wrap \ 203 y \ 204 z 205 206.ifndef LIB${_lib:tu} 207LIB${_lib:tu}= ${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a 208.MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded 209.endif 210.endfor 211 212# Minix libraries 213.for _lib in \ 214 audiodriver \ 215 bdev \ 216 blockdriver \ 217 chardriver \ 218 elf \ 219 exec \ 220 ddekit \ 221 devman \ 222 minc \ 223 minlib \ 224 netdriver \ 225 sffs \ 226 sys \ 227 timers \ 228 usb 229.ifndef LIB${_lib:tu} 230LIB${_lib:tu}= ${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a 231.MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded 232.endif 233.endfor 234 235# PAM applications, if linked statically, need more libraries 236.if (${MKPIC} == "no") 237.if (${MKCRYPTO} != "no") 238PAM_STATIC_LDADD+= -lssh 239PAM_STATIC_DPADD+= ${LIBSSH} 240.endif 241.if (${MKKERBEROS} != "no") 242PAM_STATIC_LDADD+= -lkafs -lkrb5 -lhx509 -lwind -lasn1 \ 243 -lroken -lcom_err -lheimbase -lcrypto 244PAM_STATIC_DPADD+= ${LIBKAFS} ${LIBKRB5} ${LIBHX509} ${LIBWIND} ${LIBASN1} \ 245 ${LIBROKEN} ${LIBCOM_ERR} ${LIBHEIMBASE} ${LIBCRYPTO} 246.endif 247.if (${MKSKEY} != "no") 248PAM_STATIC_LDADD+= -lskey 249PAM_STATIC_DPADD+= ${LIBSKEY} 250.endif 251PAM_STATIC_LDADD+= -lradius -lcrypt -lrpcsvc -lutil 252PAM_STATIC_DPADD+= ${LIBRADIUS} ${LIBCRYPT} ${LIBRPCSVC} ${LIBUTIL} 253.else 254PAM_STATIC_LDADD= 255PAM_STATIC_DPADD= 256.endif 257 258.if defined(__MINIX) && ${MACHINE_ARCH} == "earm" 259# LSC: On ARM, when compiling statically, with gcc, lgcc_eh is required 260LDFLAGS+= ${${ACTIVE_CC} == "gcc":? -lgcc_eh:} 261.endif # defined(__MINIX) && ${MACHINE_ARCH} == "earm" 262 263# NB: If you are a library here, add it in bsd.README 264.for _lib in \ 265 FS \ 266 GL \ 267 GLU \ 268 ICE \ 269 SM \ 270 X11 \ 271 XTrap \ 272 Xau \ 273 Xaw \ 274 Xdmcp \ 275 Xext \ 276 Xfont \ 277 Xft \ 278 Xi \ 279 Xinerama \ 280 Xmu \ 281 Xmuu \ 282 Xpm \ 283 Xrandr \ 284 Xrender \ 285 Xss \ 286 Xt \ 287 Xtst \ 288 Xv \ 289 Xxf86dga \ 290 Xxf86misc \ 291 Xxf86vm \ 292 dps \ 293 fntstubs \ 294 fontcache \ 295 fontconfig \ 296 fontenc \ 297 freetype \ 298 lbxutil \ 299 xkbfile 300.ifndef LIB${_lib:tu} 301LIB${_lib:tu}= ${DESTDIR}${X11USRLIBDIR}/lib${_lib}.a 302.MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded 303.endif 304.endfor 305 306# Ugly one-offs 307LIBX11_XCB= ${DESTDIR}${X11USRLIBDIR}/libX11-xcb.a 308LIBXCB= ${DESTDIR}${X11USRLIBDIR}/libxcb.a 309 310.if defined(RESCUEDIR) 311CPPFLAGS+= -DRESCUEDIR=\"${RESCUEDIR}\" 312.endif 313 314_PROGLDOPTS= 315.if ${SHLINKDIR} != "/usr/libexec" # XXX: change or remove if ld.so moves 316_PROGLDOPTS+= -Wl,-dynamic-linker=${_SHLINKER} 317.endif 318.if ${SHLIBDIR} != "/usr/lib" 319_PROGLDOPTS+= -Wl,-rpath,${SHLIBDIR} \ 320 -L=${SHLIBDIR} 321.elif ${SHLIBINSTALLDIR} != "/usr/lib" 322_PROGLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR} \ 323 -L=${SHLIBINSTALLDIR} 324.endif 325 326__proginstall: .USE 327 ${_MKTARGET_INSTALL} 328 ${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 329 ${STRIPFLAG} ${.ALLSRC} ${.TARGET} 330 331__progrumpinstall: .USE 332 ${_MKTARGET_INSTALL} 333 ${INSTALL_FILE} -o ${RUMPBINOWN} -g ${RUMPBINGRP} -m ${RUMPBINMODE} \ 334 ${STRIPFLAG} ${.ALLSRC} ${.TARGET} 335 336__progdebuginstall: .USE 337 ${_MKTARGET_INSTALL} 338 ${INSTALL_FILE} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \ 339 ${.ALLSRC} ${.TARGET} 340 341 342 343# 344# Backwards compatibility with Makefiles that assume that bsd.prog.mk 345# can only build a single binary. 346# 347 348_APPEND_MANS=yes 349_APPEND_SRCS=yes 350 351_CCLINKFLAGS= 352 353.if defined(PROG_CXX) 354PROG= ${PROG_CXX} 355_CCLINK= ${CXX} ${_CCLINKFLAGS} 356.endif 357 358.if defined(RUMPPRG) 359PROG= ${RUMPPRG} 360. ifndef CRUNCHEDPROG 361. if (${MKRUMP} != "no") 362PROGS= ${RUMPPRG} rump.${RUMPPRG} 363. else 364PROGS= ${RUMPPRG} 365. endif 366. if defined(SRCS) 367. if (${MKRUMP} != "no") 368SRCS.rump.${PROG}:= ${SRCS} ${PROG}_rumpops.c ${RUMPSRCS} 369. endif 370SRCS+= ${PROG}_hostops.c 371. else 372SRCS= ${PROG}.c ${PROG}_hostops.c 373. if (${MKRUMP} != "no") 374SRCS.rump.${PROG}= ${PROG}.c ${PROG}_rumpops.c ${RUMPSRCS} 375. endif 376. endif 377. if (${MKRUMP} != "no") 378DPSRCS+= ${PROG}_rumpops.c ${RUMPSRCS} 379LDADD.rump.${PROG}+= -lrumpclient 380DPADD.rump.${PROG}+= ${LIBRUMPCLIENT} 381MAN.rump.${PROG}= # defined but feeling empty 382_RUMPINSTALL.rump.${PROG}=# defined 383. endif 384. else # CRUNCHEDPROG 385PROGS= ${PROG} 386CPPFLAGS+= -DCRUNCHOPS 387. endif 388.endif 389 390.if defined(PROG) 391_CCLINK?= ${CC} ${_CCLINKFLAGS} 392. if defined(MAN) 393MAN.${PROG}= ${MAN} 394_APPEND_MANS= no 395. endif 396. if !defined(OBJS) 397OBJS= ${OBJS.${PROG}} 398. endif 399. if defined(PROGNAME) 400PROGNAME.${PROG}= ${PROGNAME} 401. endif 402. if defined(SRCS) 403SRCS.${PROG}= ${SRCS} 404_APPEND_SRCS= no 405. endif 406.endif 407 408# Turn the single-program PROG and PROG_CXX variables into their multi-word 409# counterparts, PROGS and PROGS_CXX. 410.if !defined(RUMPPRG) 411. if defined(PROG_CXX) && !defined(PROGS_CXX) 412PROGS_CXX= ${PROG_CXX} 413. elif defined(PROG) && !defined(PROGS) 414PROGS= ${PROG} 415. endif 416.endif 417 418##### Libraries that this may depend upon. 419.if defined(PROGDPLIBS) # { 420.for _lib _dir in ${PROGDPLIBS} 421.if !defined(BINDO.${_lib}) 422PROGDO.${_lib}!= cd "${_dir}" && ${PRINTOBJDIR} 423.MAKEOVERRIDES+=PROGDO.${_lib} 424.endif 425LDADD+= -L${PROGDO.${_lib}} -l${_lib} 426.if exists(${PROGDO.${_lib}}/lib${_lib}_pic.a) 427DPADD+= ${PROGDO.${_lib}}/lib${_lib}_pic.a 428.elif exists(${PROGDO.${_lib}}/lib${_lib}.so) 429DPADD+= ${PROGDO.${_lib}}/lib${_lib}.so 430.else 431DPADD+= ${PROGDO.${_lib}}/lib${_lib}.a 432.endif 433.endfor 434.endif # } 435# 436# Per-program definitions and targets. 437# 438 439_CCLINK.CDEFAULT= ${CC} ${_CCLINKFLAGS} 440# Definitions specific to C programs. 441.for _P in ${PROGS} 442SRCS.${_P}?= ${_P}.c 443_CCLINK.${_P}= ${CC} ${_CCLINKFLAGS} 444_CFLAGS.${_P}= ${CFLAGS} ${CPUFLAGS} 445_CPPFLAGS.${_P}= ${CPPFLAGS} 446_COPTS.${_P}= ${COPTS} 447.endfor 448 449_CCLINK.CXXDEFAULT= ${CXX} ${_CCLINKFLAGS} 450# Definitions specific to C++ programs. 451.for _P in ${PROGS_CXX} 452SRCS.${_P}?= ${_P}.cc 453_CCLINK.${_P}= ${CXX} ${_CCLINKFLAGS} 454.endfor 455 456# Language-independent definitions. 457.if defined(__MINIX) && ${USE_BITCODE:Uno} == "yes" 458CFLAGS+= -flto 459 460. if ${LD_STATIC:U} != "-static" 461GOLDLINKERSCRIPT?= ${LDS_DYNAMIC_BIN} 462. else 463GOLDLINKERSCRIPT?= ${LDS_STATIC_BIN} 464. endif 465 466.endif 467 468.for _P in ${PROGS} ${PROGS_CXX} # { 469 470.if defined(__MINIX) && ${HAVE_GOLD:U} != "" 471GOLDLINKERSCRIPT.${_P}?= ${GOLDLINKERSCRIPT} 472 473. if ${GOLDLINKERSCRIPT.${_P}:U} != "" 474LDFLAGS.${_P}:=-Wl,--script,${GOLDLINKERSCRIPT.${_P}} ${LDFLAGS.${_P}} 475. endif 476.endif # defined(__MINIX) && ${HAVE_GOLD:U} == "" 477 478BINDIR.${_P}?= ${BINDIR} 479PROGNAME.${_P}?= ${_P} 480 481.if ${MKDEBUG} != "no" && !commands(${_P}) 482_PROGDEBUG.${_P}:= ${PROGNAME.${_P}}.debug 483.endif 484 485.if defined(PAXCTL_FLAGS) 486PAXCTL_FLAGS.${_P}?= ${PAXCTL_FLAGS} 487.endif 488 489##### PROG specific flags. 490 491_DPADD.${_P}= ${DPADD} ${DPADD.${_P}} 492_LDADD.${_P}= ${LDADD} ${LDADD.${_P}} 493_LDFLAGS.${_P}= ${LDFLAGS} ${LDFLAGS.${_P}} 494_LDSTATIC.${_P}= ${LDSTATIC} ${LDSTATIC.${_P}} 495 496##### Build and install rules 497.if !empty(_APPEND_SRCS:M[Yy][Ee][Ss]) 498SRCS+= ${SRCS.${_P}} # For bsd.dep.mk 499.endif 500 501_YPSRCS.${_P}= ${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}} 502 503DPSRCS+= ${_YPSRCS.${_P}} 504CLEANFILES+= ${_YPSRCS.${_P}} 505 506.if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth) 507OBJS.${_P}+= ${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g} 508LOBJS.${_P}+= ${LSRCS:.c=.ln} ${SRCS.${_P}:M*.c:.c=.ln} 509.endif 510 511.if defined(OBJS.${_P}) && !empty(OBJS.${_P}) # { 512.NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}} 513 514.if (defined(USE_COMBINE) && ${USE_COMBINE} != "no" && !commands(${_P}) \ 515 && (${_CCLINK.${_P}} == ${_CCLINK.CDEFAULT} \ 516 || ${_CCLINK.${_P}} == ${_CCLINK.CXXDEFAULT}) \ 517 && !defined(NOCOMBINE.${_P}) && !defined(NOCOMBINE)) 518.for f in ${SRCS.${_P}:N*.h:N*.sh:N*.fth:C/\.[yl]$/.c/g} 519#_XFLAGS.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} \ 520# ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5} 521.if (${CPPFLAGS.$f:D1} == "1" || ${CPUFLAGS.$f:D2} == "2" \ 522 || ${COPTS.$f:D3} == "3" || ${OBJCOPTS.$f:D4} == "4" \ 523 || ${CXXFLAGS.$f:D5} == "5") \ 524 || ("${f:M*.[cyl]}" == "" || commands(${f:R:S/$/.o/})) 525XOBJS.${_P}+= ${f:R:S/$/.o/} 526.else 527XSRCS.${_P}+= ${f} 528NODPSRCS+= ${f} 529.endif 530.endfor 531 532${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${XOBJS.${_P}} ${SRCS.${_P}} \ 533 ${DPSRCS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${_DPADD.${_P}} 534 ${_MKTARGET_LINK} 535.if defined(DESTDIR) 536 ${_CCLINK.${_P}} -Wl,-nostdlib \ 537 ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \ 538 -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \ 539 -MD --combine ${_CPPFLAGS.${_P}} ${_CFLAGS.${_P}} ${_COPTS.${_P}} \ 540 ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \ 541 ${_LDADD.${_P}} -L${_GCC_LIBGCCDIR} -L${DESTDIR}/usr/lib 542.else 543 ${_CCLINK.${_P}} ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \ 544 -MD --combine ${_CPPFLAGS.${_P}} ${_COPTS.${_P}} 545 ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \ 546 ${_LDADD.${_P}} 547.endif # defined(DESTDIR) 548.if defined(CTFMERGE) 549 ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}} 550.endif 551.if defined(PAXCTL_FLAGS.${_P}) 552 ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET} 553.endif 554.if ${MKSTRIPIDENT} != "no" 555 ${OBJCOPY} -R .ident ${.TARGET} 556.endif 557 558CLEANFILES+= ${_P}.d 559.if exists(${_P}.d) 560.include "${_P}.d" # include -MD depend for program. 561.endif 562.else # USE_COMBINE 563 564${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS} 565 566.if defined(__MINIX) && ${USE_BITCODE:Uno} == "yes" 567CLEANFILES+= ${_P}.opt.bcl ${_P}.bcl ${_P}.bcl.o 568 569# We may (or not) be using a pass. 570. if ${LLVM_PASS:UNO_PASS} != "NO_PASS" 571_LLVM_PASS_ARGS= -load ${LLVM_PASS} ${LLVM_PASS_ARGS} 572_TARGET_BCL= ${_P}.opt.bcl 573. else 574_TARGET_BCL= ${_P}.bcl 575. endif # ${LLVM_PASS:UNO_PASS} != "NO_PASS" 576 577 578${_P}.bcl: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \ 579 ${LIBCRTEND} ${_DPADD.${_P}} 580 ${_MKTARGET_LINK} 581 ${_CCLINK.${_P}} \ 582 -o ${.TARGET} \ 583 -nostartfiles \ 584 -L/usr/lib/bc \ 585 ${OBJS.${_P}} ${LLVM_LINK_ARGS} ${_LDADD.${_P}:N-shared} \ 586 ${_LDSTATIC.${_P}} \ 587 -Wl,-r \ 588 -Wl,-plugin=/usr/pkg/lib/bfd-plugins/LLVMgold.so,-plugin-opt=-disable-opt,-plugin-opt=-disable-inlining,-plugin-opt=emit-llvm 589 590${_P}.opt.bcl: ${_P}.bcl ${LLVM_PASS} 591 ${_MKTARGET_LINK} 592 opt -disable-opt ${_LLVM_PASS_ARGS} -o ${.TARGET} ${_P}.bcl 593 594${_P}.bcl.o: ${_TARGET_BCL} 595 ${_MKTARGET_LINK} 596 llc -O1 -filetype=obj -o ${.TARGET} ${.ALLSRC} 597 598${_P}: ${_P}.bcl.o 599 ${_MKTARGET_LINK} 600 ${_CCLINK.${_P}} \ 601 -o ${.TARGET} \ 602 -L/usr/lib/bc \ 603 ${.TARGET}.bcl.o ${_LDADD.${_P}} \ 604 ${_LDSTATIC.${_P}} \ 605 -Wl,--script,${GOLDLINKERSCRIPT.${_P}} \ 606 -Wl,-plugin=/usr/pkg/lib/bfd-plugins/LLVMgold.so,-plugin-opt=-disable-opt,-plugin-opt=-disable-inlining 607 608.else 609${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \ 610 ${LIBCRTEND} ${_DPADD.${_P}} 611.if !commands(${_P}) 612 ${_MKTARGET_LINK} 613 ${_CCLINK.${_P}} \ 614 ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \ 615 ${OBJS.${_P}} ${_PROGLDOPTS} ${_LDADD.${_P}} 616.if defined(CTFMERGE) 617 ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}} 618.endif 619.if defined(PAXCTL_FLAGS.${_P}) 620 ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET} 621.endif 622.if ${MKSTRIPIDENT} != "no" 623 ${OBJCOPY} -R .ident ${.TARGET} 624.endif 625.endif # !commands(${_P}) 626.endif # defined(__MINIX) && ${USE_BITCODE:Uno} == "yes" 627.endif # USE_COMBINE 628 629${_P}.ro: ${OBJS.${_P}} ${_DPADD.${_P}} 630 ${_MKTARGET_LINK} 631 ${CC} ${LDFLAGS} -nostdlib -r -Wl,-dc -o ${.TARGET} ${OBJS.${_P}} 632 633.if defined(_PROGDEBUG.${_P}) 634${_PROGDEBUG.${_P}}: ${_P} 635 ${_MKTARGET_CREATE} 636 ( ${OBJCOPY} --only-keep-debug ${_P} ${_PROGDEBUG.${_P}} \ 637 && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \ 638 --add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \ 639 ) || (rm -f ${_PROGDEBUG.${_P}}; false) 640.endif 641 642.endif # defined(OBJS.${_P}) && !empty(OBJS.${_P}) # } 643 644.if !defined(MAN.${_P}) 645MAN.${_P}= ${_P}.1 646.endif # !defined(MAN.${_P}) 647.if !empty(_APPEND_MANS:M[Yy][Ee][Ss]) 648MAN+= ${MAN.${_P}} 649.endif 650 651realall: ${_P} ${_PROGDEBUG.${_P}} 652 653CLEANFILES+= ${_P} ${_PROGDEBUG.${_P}} 654 655.if defined(OBJS.${_P}) && !empty(OBJS.${_P}) 656CLEANFILES+= ${OBJS.${_P}} ${LOBJS.${_P}} 657.endif 658 659_PROG_INSTALL+= proginstall-${_P} 660 661.if !target(proginstall-${_P}) # { 662proginstall-${_P}:: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \ 663 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}} 664.PRECIOUS: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \ 665 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}} 666 667.if ${MKUPDATE} == "no" 668.if defined(_RUMPINSTALL.${_P}) 669${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __progrumpinstall 670.else 671${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall 672.endif 673.if !defined(BUILD) && !make(all) && !make(${_P}) 674${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE 675.endif 676.if defined(_PROGDEBUG.${_P}) 677${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall 678.if !defined(BUILD) && !make(all) && !make(${_P}) 679${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE 680.endif 681.endif # define(_PROGDEBUG.${_P}) 682.else # MKUPDATE != no 683.if defined(_RUMPINSTALL.${_P}) 684${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __progrumpinstall 685.else 686${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall 687.endif 688.if !defined(BUILD) && !make(all) && !make(${_P}) 689${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE 690.endif 691.if defined(_PROGDEBUG.${_P}) 692${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall 693.if !defined(BUILD) && !make(all) && !make(${_P}) 694${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE 695.endif 696.endif # defined(_PROGDEBUG.${_P}) 697.endif # MKUPDATE != no 698 699.endif # !target(proginstall-${_P}) # } 700 701lint: lint-${_P} 702lint-${_P}: ${LOBJS.${_P}} 703.if defined(LOBJS.${_P}) && !empty(LOBJS.${_P}) 704 ${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[ ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}} 705.endif 706 707.endfor # _P in ${PROGS} ${PROGS_CXX} # } 708 709.if defined(OBJS) && !empty(OBJS) && \ 710 (empty(PROGS) && empty(PROGS_CXX)) 711CLEANFILES+= ${OBJS} ${LOBJS} 712.endif 713 714.if !target(proginstall) 715proginstall:: ${_PROG_INSTALL} 716.endif 717.PHONY: proginstall 718 719 720 721realall: ${SCRIPTS} 722.if defined(SCRIPTS) && !target(scriptsinstall) # { 723SCRIPTSDIR?=${BINDIR} 724SCRIPTSOWN?=${BINOWN} 725SCRIPTSGRP?=${BINGRP} 726SCRIPTSMODE?=${BINMODE} 727 728scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 729.PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 730 731__scriptinstall: .USE 732 ${_MKTARGET_INSTALL} 733 ${INSTALL_FILE} \ 734 -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \ 735 -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \ 736 -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \ 737 ${.ALLSRC} ${.TARGET} 738 739.for S in ${SCRIPTS:O:u} 740.if ${MKUPDATE} == "no" 741${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall 742.if !defined(BUILD) && !make(all) && !make(${S}) 743${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE 744.endif 745.else 746${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall 747.if !defined(BUILD) && !make(all) && !make(${S}) 748${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE 749.endif 750.endif 751.endfor 752.endif # } 753 754.if !target(scriptsinstall) 755scriptsinstall:: 756.endif 757.PHONY: scriptsinstall 758 759##### Pull in related .mk logic 760LINKSOWN?= ${BINOWN} 761LINKSGRP?= ${BINGRP} 762LINKSMODE?= ${BINMODE} 763.include <bsd.man.mk> 764.include <bsd.nls.mk> 765.include <bsd.files.mk> 766.include <bsd.inc.mk> 767.include <bsd.links.mk> 768.include <bsd.sys.mk> 769.include <bsd.dep.mk> 770.include <bsd.clang-analyze.mk> 771.include <bsd.clean.mk> 772 773${TARGETS}: # ensure existence 774 775.endif # HOSTPROG 776