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 clkconf \ 219 compat_minix \ 220 ddekit \ 221 ddekit_usb_client \ 222 ddekit_usb_server \ 223 devman \ 224 elf \ 225 exec \ 226 gpio \ 227 hgfs \ 228 i2cdriver \ 229 inputdriver \ 230 lwip \ 231 minc \ 232 minixfs \ 233 minlib \ 234 mthread \ 235 netdriver \ 236 netsock \ 237 sffs \ 238 sys \ 239 timers \ 240 usb \ 241 vboxfs \ 242 virtio \ 243 vtreefs 244.ifndef LIB${_lib:tu} 245LIB${_lib:tu}= ${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a 246.MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded 247.endif 248.endfor 249 250# PAM applications, if linked statically, need more libraries 251.if (${MKPIC} == "no") 252.if (${MKCRYPTO} != "no") 253PAM_STATIC_LDADD+= -lssh 254PAM_STATIC_DPADD+= ${LIBSSH} 255.endif 256.if (${MKKERBEROS} != "no") 257PAM_STATIC_LDADD+= -lkafs -lkrb5 -lhx509 -lwind -lasn1 \ 258 -lroken -lcom_err -lheimbase -lcrypto 259PAM_STATIC_DPADD+= ${LIBKAFS} ${LIBKRB5} ${LIBHX509} ${LIBWIND} ${LIBASN1} \ 260 ${LIBROKEN} ${LIBCOM_ERR} ${LIBHEIMBASE} ${LIBCRYPTO} 261.endif 262.if (${MKSKEY} != "no") 263PAM_STATIC_LDADD+= -lskey 264PAM_STATIC_DPADD+= ${LIBSKEY} 265.endif 266PAM_STATIC_LDADD+= -lradius -lcrypt -lrpcsvc -lutil 267PAM_STATIC_DPADD+= ${LIBRADIUS} ${LIBCRYPT} ${LIBRPCSVC} ${LIBUTIL} 268.else 269PAM_STATIC_LDADD= 270PAM_STATIC_DPADD= 271.endif 272 273.if defined(__MINIX) && ${MACHINE_ARCH} == "earm" 274# LSC: On ARM, when compiling statically, with gcc, lgcc_eh is required 275LDFLAGS+= ${${ACTIVE_CC} == "gcc":? -lgcc_eh:} 276.endif # defined(__MINIX) && ${MACHINE_ARCH} == "earm" 277 278# NB: If you are a library here, add it in bsd.README 279.for _lib in \ 280 FS \ 281 GL \ 282 GLU \ 283 ICE \ 284 SM \ 285 X11 \ 286 XTrap \ 287 Xau \ 288 Xaw \ 289 Xdmcp \ 290 Xext \ 291 Xfont \ 292 Xft \ 293 Xi \ 294 Xinerama \ 295 Xmu \ 296 Xmuu \ 297 Xpm \ 298 Xrandr \ 299 Xrender \ 300 Xss \ 301 Xt \ 302 Xtst \ 303 Xv \ 304 Xxf86dga \ 305 Xxf86misc \ 306 Xxf86vm \ 307 dps \ 308 fntstubs \ 309 fontcache \ 310 fontconfig \ 311 fontenc \ 312 freetype \ 313 lbxutil \ 314 xkbfile 315.ifndef LIB${_lib:tu} 316LIB${_lib:tu}= ${DESTDIR}${X11USRLIBDIR}/lib${_lib}.a 317.MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded 318.endif 319.endfor 320 321# Ugly one-offs 322LIBX11_XCB= ${DESTDIR}${X11USRLIBDIR}/libX11-xcb.a 323LIBXCB= ${DESTDIR}${X11USRLIBDIR}/libxcb.a 324 325.if defined(RESCUEDIR) 326CPPFLAGS+= -DRESCUEDIR=\"${RESCUEDIR}\" 327.endif 328 329_PROGLDOPTS= 330.if ${SHLINKDIR} != "/usr/libexec" # XXX: change or remove if ld.so moves 331_PROGLDOPTS+= -Wl,-dynamic-linker=${_SHLINKER} 332.endif 333.if ${SHLIBDIR} != "/usr/lib" 334_PROGLDOPTS+= -Wl,-rpath,${SHLIBDIR} \ 335 -L=${SHLIBDIR} 336.elif ${SHLIBINSTALLDIR} != "/usr/lib" 337_PROGLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR} \ 338 -L=${SHLIBINSTALLDIR} 339.endif 340 341__proginstall: .USE 342 ${_MKTARGET_INSTALL} 343 ${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 344 ${STRIPFLAG} ${.ALLSRC} ${.TARGET} 345 346__progrumpinstall: .USE 347 ${_MKTARGET_INSTALL} 348 ${INSTALL_FILE} -o ${RUMPBINOWN} -g ${RUMPBINGRP} -m ${RUMPBINMODE} \ 349 ${STRIPFLAG} ${.ALLSRC} ${.TARGET} 350 351__progdebuginstall: .USE 352 ${_MKTARGET_INSTALL} 353 ${INSTALL_FILE} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \ 354 ${.ALLSRC} ${.TARGET} 355 356 357 358# 359# Backwards compatibility with Makefiles that assume that bsd.prog.mk 360# can only build a single binary. 361# 362 363_APPEND_MANS=yes 364_APPEND_SRCS=yes 365 366_CCLINKFLAGS= 367 368.if defined(PROG_CXX) 369PROG= ${PROG_CXX} 370_CCLINK= ${CXX} ${_CCLINKFLAGS} 371 372.if defined(__MINIX) 373# BJG - stack unwinding (for C++ exceptions) doesn't work on static executables when built with llvm. 374LDSTATIC= -dynamic 375.endif # defined(__MINIX) 376.endif 377 378.if defined(RUMPPRG) 379PROG= ${RUMPPRG} 380. ifndef CRUNCHEDPROG 381. if (${MKRUMP} != "no") 382PROGS= ${RUMPPRG} rump.${RUMPPRG} 383. else 384PROGS= ${RUMPPRG} 385. endif 386. if defined(SRCS) 387. if (${MKRUMP} != "no") 388SRCS.rump.${PROG}:= ${SRCS} ${PROG}_rumpops.c ${RUMPSRCS} 389. endif 390SRCS+= ${PROG}_hostops.c 391. else 392SRCS= ${PROG}.c ${PROG}_hostops.c 393. if (${MKRUMP} != "no") 394SRCS.rump.${PROG}= ${PROG}.c ${PROG}_rumpops.c ${RUMPSRCS} 395. endif 396. endif 397. if (${MKRUMP} != "no") 398DPSRCS+= ${PROG}_rumpops.c ${RUMPSRCS} 399LDADD.rump.${PROG}+= -lrumpclient 400DPADD.rump.${PROG}+= ${LIBRUMPCLIENT} 401MAN.rump.${PROG}= # defined but feeling empty 402_RUMPINSTALL.rump.${PROG}=# defined 403. endif 404. else # CRUNCHEDPROG 405PROGS= ${PROG} 406CPPFLAGS+= -DCRUNCHOPS 407. endif 408.endif 409 410.if defined(PROG) 411_CCLINK?= ${CC} ${_CCLINKFLAGS} 412. if defined(MAN) 413MAN.${PROG}= ${MAN} 414_APPEND_MANS= no 415. endif 416. if !defined(OBJS) 417OBJS= ${OBJS.${PROG}} 418. endif 419. if defined(PROGNAME) 420PROGNAME.${PROG}= ${PROGNAME} 421. endif 422. if defined(SRCS) 423SRCS.${PROG}= ${SRCS} 424_APPEND_SRCS= no 425. endif 426.endif 427 428# Turn the single-program PROG and PROG_CXX variables into their multi-word 429# counterparts, PROGS and PROGS_CXX. 430.if !defined(RUMPPRG) 431. if defined(PROG_CXX) && !defined(PROGS_CXX) 432PROGS_CXX= ${PROG_CXX} 433. elif defined(PROG) && !defined(PROGS) 434PROGS= ${PROG} 435. endif 436.endif 437 438##### Libraries that this may depend upon. 439.if defined(PROGDPLIBS) # { 440.for _lib _dir in ${PROGDPLIBS} 441.if !defined(BINDO.${_lib}) 442PROGDO.${_lib}!= cd "${_dir}" && ${PRINTOBJDIR} 443.MAKEOVERRIDES+=PROGDO.${_lib} 444.endif 445LDADD+= -L${PROGDO.${_lib}} -l${_lib} 446.if exists(${PROGDO.${_lib}}/lib${_lib}_pic.a) 447DPADD+= ${PROGDO.${_lib}}/lib${_lib}_pic.a 448.elif exists(${PROGDO.${_lib}}/lib${_lib}.so) 449DPADD+= ${PROGDO.${_lib}}/lib${_lib}.so 450.else 451DPADD+= ${PROGDO.${_lib}}/lib${_lib}.a 452.endif 453.endfor 454.endif # } 455# 456# Per-program definitions and targets. 457# 458 459_CCLINK.CDEFAULT= ${CC} ${_CCLINKFLAGS} 460# Definitions specific to C programs. 461.for _P in ${PROGS} 462SRCS.${_P}?= ${_P}.c 463_CCLINK.${_P}= ${CC} ${_CCLINKFLAGS} 464_CFLAGS.${_P}= ${CFLAGS} ${CPUFLAGS} 465_CPPFLAGS.${_P}= ${CPPFLAGS} 466_COPTS.${_P}= ${COPTS} 467.endfor 468 469_CCLINK.CXXDEFAULT= ${CXX} ${_CCLINKFLAGS} 470# Definitions specific to C++ programs. 471.for _P in ${PROGS_CXX} 472SRCS.${_P}?= ${_P}.cc 473_CCLINK.${_P}= ${CXX} ${_CCLINKFLAGS} 474.endfor 475 476# Language-independent definitions. 477.if defined(__MINIX) 478.if ${USE_BITCODE:Uno} == "yes" 479CFLAGS+= -flto 480.endif # ${USE_BITCODE:Uno} == "yes" 481 482.if ${USE_BITCODE:Uyes} == "no" 483#LSC Gold linker seems to require the library directory to be set up if 484# a sysroot parameter has been given. 485LDFLAGS+= -L ${DESTDIR}/usr/lib 486.endif # ${USE_BITCODE:U} == "no" 487.endif # defined(__MINIX) 488 489.for _P in ${PROGS} ${PROGS_CXX} # { 490 491BINDIR.${_P}?= ${BINDIR} 492PROGNAME.${_P}?= ${_P} 493 494.if ${MKDEBUG} != "no" && !commands(${_P}) 495_PROGDEBUG.${_P}:= ${PROGNAME.${_P}}.debug 496.endif 497 498.if defined(PAXCTL_FLAGS) 499PAXCTL_FLAGS.${_P}?= ${PAXCTL_FLAGS} 500.endif 501 502##### PROG specific flags. 503 504_DPADD.${_P}= ${DPADD} ${DPADD.${_P}} 505_LDADD.${_P}= ${LDADD} ${LDADD.${_P}} 506_LDFLAGS.${_P}= ${LDFLAGS} ${LDFLAGS.${_P}} 507_LDSTATIC.${_P}= ${LDSTATIC} ${LDSTATIC.${_P}} 508 509##### Build and install rules 510.if !empty(_APPEND_SRCS:M[Yy][Ee][Ss]) 511SRCS+= ${SRCS.${_P}} # For bsd.dep.mk 512.endif 513 514_YPSRCS.${_P}= ${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}} 515 516DPSRCS+= ${_YPSRCS.${_P}} 517CLEANFILES+= ${_YPSRCS.${_P}} 518 519.if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth) 520OBJS.${_P}+= ${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g} 521LOBJS.${_P}+= ${LSRCS:.c=.ln} ${SRCS.${_P}:M*.c:.c=.ln} 522.endif 523 524.if defined(OBJS.${_P}) && !empty(OBJS.${_P}) # { 525.NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}} 526 527.if (defined(USE_COMBINE) && ${USE_COMBINE} != "no" && !commands(${_P}) \ 528 && (${_CCLINK.${_P}} == ${_CCLINK.CDEFAULT} \ 529 || ${_CCLINK.${_P}} == ${_CCLINK.CXXDEFAULT}) \ 530 && !defined(NOCOMBINE.${_P}) && !defined(NOCOMBINE)) 531.for f in ${SRCS.${_P}:N*.h:N*.sh:N*.fth:C/\.[yl]$/.c/g} 532#_XFLAGS.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} \ 533# ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5} 534.if (${CPPFLAGS.$f:D1} == "1" || ${CPUFLAGS.$f:D2} == "2" \ 535 || ${COPTS.$f:D3} == "3" || ${OBJCOPTS.$f:D4} == "4" \ 536 || ${CXXFLAGS.$f:D5} == "5") \ 537 || ("${f:M*.[cyl]}" == "" || commands(${f:R:S/$/.o/})) 538XOBJS.${_P}+= ${f:R:S/$/.o/} 539.else 540XSRCS.${_P}+= ${f} 541NODPSRCS+= ${f} 542.endif 543.endfor 544 545${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${XOBJS.${_P}} ${SRCS.${_P}} \ 546 ${DPSRCS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${_DPADD.${_P}} 547 ${_MKTARGET_LINK} 548.if defined(DESTDIR) 549 ${_CCLINK.${_P}} -Wl,-nostdlib \ 550 ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \ 551 -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \ 552 -MD --combine ${_CPPFLAGS.${_P}} ${_CFLAGS.${_P}} ${_COPTS.${_P}} \ 553 ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \ 554 ${_LDADD.${_P}} -L${_GCC_LIBGCCDIR} -L${DESTDIR}/usr/lib 555.else 556 ${_CCLINK.${_P}} ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \ 557 -MD --combine ${_CPPFLAGS.${_P}} ${_COPTS.${_P}} 558 ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \ 559 ${_LDADD.${_P}} 560.endif # defined(DESTDIR) 561.if defined(CTFMERGE) 562 ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}} 563.endif 564.if defined(PAXCTL_FLAGS.${_P}) 565 ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET} 566.endif 567.if ${MKSTRIPIDENT} != "no" 568 ${OBJCOPY} -R .ident ${.TARGET} 569.endif 570 571CLEANFILES+= ${_P}.d 572.if exists(${_P}.d) 573.include "${_P}.d" # include -MD depend for program. 574.endif 575.else # USE_COMBINE 576 577${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS} 578 579.if defined(__MINIX) && ${USE_BITCODE:Uno} == "yes" 580CLEANFILES+= ${_P}.opt.bcl ${_P}.bcl ${_P}.bcl.o 581 582${_P}.bcl: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \ 583 ${LIBCRTEND} ${_DPADD.${_P}} 584 ${_MKTARGET_LINK} 585 ${_CCLINK.${_P}} \ 586 -o ${.TARGET} \ 587 -nostartfiles \ 588 -L${DESTDIR}/usr/lib/bc \ 589 ${OBJS.${_P}} ${LLVM_LINK_ARGS} ${_LDADD.${_P}:N-shared} \ 590 ${_LDSTATIC.${_P}} ${_PROGLDOPTS} \ 591 -Wl,-r \ 592 ${BITCODE_LD_FLAGS} \ 593 -Wl,-plugin-opt=emit-llvm 594 595${_P}.opt.bcl: ${_P}.bcl ${LLVM_PASS} 596 ${_MKTARGET_LINK} 597 ${OPT} ${OPTFLAGS} -o ${.TARGET} ${_P}.bcl 598 599${_P}.bcl.o: ${_P}.opt.bcl 600 ${_MKTARGET_LINK} 601 ${LLC} -O1 -march=x86 -mcpu=i586 -filetype=obj -o ${.TARGET} ${.ALLSRC} 602 603${_P}: ${_P}.bcl.o 604.if !commands(${_P}) 605 ${_MKTARGET_LINK} 606 ${_CCLINK.${_P}} \ 607 ${_LDFLAGS.${_P}} \ 608 -L${DESTDIR}/usr/lib \ 609 ${_LDSTATIC.${_P}} -o ${.TARGET} \ 610 ${.TARGET}.bcl.o ${_PROGLDOPTS} ${_LDADD.${_P}} \ 611 ${BITCODE_LD_FLAGS} \ 612 -Wl,--allow-multiple-definition 613.endif # !commands(${_P}) 614 615.else 616${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \ 617 ${LIBCRTEND} ${_DPADD.${_P}} 618.if !commands(${_P}) 619 ${_MKTARGET_LINK} 620 ${_CCLINK.${_P}} \ 621 ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \ 622 ${OBJS.${_P}} ${_PROGLDOPTS} ${_LDADD.${_P}} 623.if defined(CTFMERGE) 624 ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}} 625.endif 626.if defined(PAXCTL_FLAGS.${_P}) 627 ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET} 628.endif 629.if ${MKSTRIPIDENT} != "no" 630 ${OBJCOPY} -R .ident ${.TARGET} 631.endif 632.endif # !commands(${_P}) 633.endif # defined(__MINIX) && ${USE_BITCODE:Uno} == "yes" 634.endif # USE_COMBINE 635 636${_P}.ro: ${OBJS.${_P}} ${_DPADD.${_P}} 637 ${_MKTARGET_LINK} 638 ${CC} ${LDFLAGS} -nostdlib -r -Wl,-dc -o ${.TARGET} ${OBJS.${_P}} 639 640.if defined(_PROGDEBUG.${_P}) 641${_PROGDEBUG.${_P}}: ${_P} 642 ${_MKTARGET_CREATE} 643 ( ${OBJCOPY} --only-keep-debug ${_P} ${_PROGDEBUG.${_P}} \ 644 && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \ 645 --add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \ 646 ) || (rm -f ${_PROGDEBUG.${_P}}; false) 647.endif 648 649.endif # defined(OBJS.${_P}) && !empty(OBJS.${_P}) # } 650 651.if !defined(MAN.${_P}) 652MAN.${_P}= ${_P}.1 653.endif # !defined(MAN.${_P}) 654.if !empty(_APPEND_MANS:M[Yy][Ee][Ss]) 655MAN+= ${MAN.${_P}} 656.endif 657 658realall: ${_P} ${_PROGDEBUG.${_P}} 659 660CLEANFILES+= ${_P} ${_PROGDEBUG.${_P}} 661 662.if defined(OBJS.${_P}) && !empty(OBJS.${_P}) 663CLEANFILES+= ${OBJS.${_P}} ${LOBJS.${_P}} 664.endif 665 666_PROG_INSTALL+= proginstall-${_P} 667 668.if !target(proginstall-${_P}) # { 669proginstall-${_P}:: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \ 670 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}} 671.PRECIOUS: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \ 672 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}} 673 674.if ${MKUPDATE} == "no" 675.if defined(_RUMPINSTALL.${_P}) 676${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __progrumpinstall 677.else 678${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall 679.endif 680.if !defined(BUILD) && !make(all) && !make(${_P}) 681${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE 682.endif 683.if defined(_PROGDEBUG.${_P}) 684${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall 685.if !defined(BUILD) && !make(all) && !make(${_P}) 686${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE 687.endif 688.endif # define(_PROGDEBUG.${_P}) 689.else # MKUPDATE != no 690.if defined(_RUMPINSTALL.${_P}) 691${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __progrumpinstall 692.else 693${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall 694.endif 695.if !defined(BUILD) && !make(all) && !make(${_P}) 696${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE 697.endif 698.if defined(_PROGDEBUG.${_P}) 699${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall 700.if !defined(BUILD) && !make(all) && !make(${_P}) 701${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE 702.endif 703.endif # defined(_PROGDEBUG.${_P}) 704.endif # MKUPDATE != no 705 706.endif # !target(proginstall-${_P}) # } 707 708lint: lint-${_P} 709lint-${_P}: ${LOBJS.${_P}} 710.if defined(LOBJS.${_P}) && !empty(LOBJS.${_P}) 711 ${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[ ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}} 712.endif 713 714.endfor # _P in ${PROGS} ${PROGS_CXX} # } 715 716.if defined(OBJS) && !empty(OBJS) && \ 717 (empty(PROGS) && empty(PROGS_CXX)) 718CLEANFILES+= ${OBJS} ${LOBJS} 719.endif 720 721.if !target(proginstall) 722proginstall:: ${_PROG_INSTALL} 723.endif 724.PHONY: proginstall 725 726 727 728realall: ${SCRIPTS} 729.if defined(SCRIPTS) && !target(scriptsinstall) # { 730SCRIPTSDIR?=${BINDIR} 731SCRIPTSOWN?=${BINOWN} 732SCRIPTSGRP?=${BINGRP} 733SCRIPTSMODE?=${BINMODE} 734 735scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 736.PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 737 738__scriptinstall: .USE 739 ${_MKTARGET_INSTALL} 740 ${INSTALL_FILE} \ 741 -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \ 742 -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \ 743 -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \ 744 ${.ALLSRC} ${.TARGET} 745 746.for S in ${SCRIPTS:O:u} 747.if ${MKUPDATE} == "no" 748${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall 749.if !defined(BUILD) && !make(all) && !make(${S}) 750${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE 751.endif 752.else 753${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall 754.if !defined(BUILD) && !make(all) && !make(${S}) 755${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE 756.endif 757.endif 758.endfor 759.endif # } 760 761.if !target(scriptsinstall) 762scriptsinstall:: 763.endif 764.PHONY: scriptsinstall 765 766##### Pull in related .mk logic 767LINKSOWN?= ${BINOWN} 768LINKSGRP?= ${BINGRP} 769LINKSMODE?= ${BINMODE} 770.include <bsd.man.mk> 771.include <bsd.nls.mk> 772.include <bsd.files.mk> 773.include <bsd.inc.mk> 774.include <bsd.links.mk> 775.include <bsd.sys.mk> 776.include <bsd.dep.mk> 777.include <bsd.clang-analyze.mk> 778.include <bsd.clean.mk> 779 780${TARGETS}: # ensure existence 781 782.endif # HOSTPROG 783