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