Annotation of src/share/mk/bsd.prog.mk, Revision 1.318
1.318 ! christos 1: # $NetBSD: bsd.prog.mk,v 1.317 2018/07/25 23:34:25 kamil Exp $
1.67 mikel 2: # @(#)bsd.prog.mk 8.2 (Berkeley) 4/2/94
1.1 cgd 3:
1.166 lukem 4: .ifndef HOSTPROG
5:
1.138 tv 6: .include <bsd.init.mk>
1.159 thorpej 7: .include <bsd.shlib.mk>
1.167 thorpej 8: .include <bsd.gcc.mk>
1.74 mycroft 9:
1.314 kamil 10: ##### Sanitizer specific flags.
11:
1.317 kamil 12: CFLAGS+= ${SANITIZERFLAGS} ${LIBCSANITIZERFLAGS}
13: CXXFLAGS+= ${SANITIZERFLAGS} ${LIBCSANITIZERFLAGS}
1.314 kamil 14: LDFLAGS+= ${SANITIZERFLAGS}
15:
1.315 kamil 16: # Rename the local function definitions to not conflict with libc/rt/pthread/m.
17: .if ${MKSANITIZER:Uno} == "yes" && defined(SANITIZER_RENAME_SYMBOL)
18: . for _symbol in ${SANITIZER_RENAME_SYMBOL}
19: CPPFLAGS+= -D${_symbol}=__mksanitizer_${_symbol}
20: . endfor
21: .endif
22:
1.223 jmmv 23: #
24: # Definitions and targets shared among all programs built by a single
25: # Makefile.
26: #
27:
28: ##### Basic targets
29: realinstall: proginstall scriptsinstall
30:
31: .gdbinit:
32: rm -f .gdbinit
33: .if defined(DESTDIR) && !empty(DESTDIR)
34: echo "set solib-absolute-prefix ${DESTDIR}" > .gdbinit
35: .else
36: touch .gdbinit
1.185 erh 37: .endif
1.223 jmmv 38: .for __gdbinit in ${GDBINIT}
39: echo "source ${__gdbinit}" >> .gdbinit
40: .endfor
1.185 erh 41:
1.267 apb 42: CLEANFILES+= a.out [Ee]rrs mklog core *.core .gdbinit
1.223 jmmv 43:
44: .if defined(SHAREDSTRINGS)
45: CLEANFILES+=strings
46: .c.o:
47: ${CC} -E ${CPPFLAGS} ${CFLAGS} ${.IMPSRC} | xstr -c -
48: @${CC} ${CPPFLAGS} ${CFLAGS} -c x.c -o ${.TARGET}
1.280 christos 49: .if defined(CTFCONVERT)
50: ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
51: .endif
1.223 jmmv 52: @rm -f x.c
1.1 cgd 53:
1.223 jmmv 54: .cc.o .cpp.o .cxx.o .C.o:
55: ${CXX} -E ${CPPFLAGS} ${CXXFLAGS} ${.IMPSRC} | xstr -c -
56: @mv -f x.c x.cc
57: @${CXX} ${CPPFLAGS} ${CXXFLAGS} -c x.cc -o ${.TARGET}
1.280 christos 58: .if defined(CTFCONVERT)
59: ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
60: .endif
1.223 jmmv 61: @rm -f x.cc
62: .endif
1.185 erh 63:
1.295 christos 64: .if defined(MKPIE) && (${MKPIE} != "no") && !defined(NOPIE)
1.238 christos 65: CFLAGS+= ${PIE_CFLAGS}
1.239 christos 66: AFLAGS+= ${PIE_AFLAGS}
1.299 joerg 67: LDFLAGS+= ${"${LDSTATIC.${.TARGET}}" == "-static" :? : ${PIE_LDFLAGS}}
1.237 christos 68: .endif
69:
1.25 mycroft 70: CFLAGS+= ${COPTS}
1.296 christos 71: .if ${MKDEBUG:Uno} != "no" && !defined(NODEBUG)
1.279 christos 72: CFLAGS+= -g
73: .endif
1.212 mrg 74: OBJCFLAGS+= ${OBJCOPTS}
1.291 erh 75: MKDEP_SUFFIXES?= .o .ln .d
1.1 cgd 76:
1.247 darran 77: # CTF preserve debug symbols
1.290 ozaki-r 78: .if (${MKCTF:Uno} != "no") && (${CFLAGS:M-g} != "")
1.247 darran 79: CTFFLAGS+= -g
80: CTFMFLAGS+= -g
1.297 mrg 81: .if defined(HAVE_GCC)
1.289 christos 82: #CFLAGS+=-gdwarf-2
1.288 christos 83: .endif
1.247 darran 84: .endif
85:
1.162 thorpej 86: # ELF platforms depend on crti.o, crtbegin.o, crtend.o, and crtn.o
1.153 pk 87: .ifndef LIBCRTBEGIN
1.292 matt 88: LIBCRTBEGIN= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crti.o ${_GCC_CRTBEGIN}
1.152 christos 89: .MADE: ${LIBCRTBEGIN}
1.153 pk 90: .endif
91: .ifndef LIBCRTEND
1.292 matt 92: LIBCRTEND= ${_GCC_CRTEND} ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crtn.o
1.152 christos 93: .MADE: ${LIBCRTEND}
1.153 pk 94: .endif
1.144 lukem 95: _SHLINKER= ${SHLINKDIR}/ld.elf_so
1.69 thorpej 96:
1.153 pk 97: .ifndef LIBCRT0
1.292 matt 98: LIBCRT0= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crt0.o
1.152 christos 99: .MADE: ${LIBCRT0}
1.153 pk 100: .endif
1.95 ross 101:
1.286 joerg 102: .ifndef LIBCRTI
1.292 matt 103: LIBCRTI= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crti.o
1.286 joerg 104: .MADE: ${LIBCRTI}
105: .endif
106:
1.202 lukem 107: ##### Installed system library definitions
108: #
109: # E.g.
110: # LIBC?=${DESTDIR}/usr/lib/libc.a
1.234 mrg 111: # LIBX11?=${DESTDIR}/usr/X11R7/lib/libX11.a
1.202 lukem 112: # etc..
1.269 christos 113: # NB: If you are a library here, add it in bsd.README
1.202 lukem 114:
1.318 ! christos 115: _LIBLIST=\
1.268 christos 116: archive \
117: asn1 \
1.269 christos 118: atf_c \
119: atf_cxx \
1.268 christos 120: bind9 \
121: bluetooth \
122: bsdmalloc \
123: bz2 \
124: c \
125: c_pic \
126: com_err \
127: compat \
128: crypt \
129: crypto \
130: curses \
1.303 rin 131: cxx \
1.268 christos 132: dbm \
133: des \
134: dns \
135: edit \
136: event \
1.318 ! christos 137: event_openssl \
! 138: event_pthreads \
! 139: execinfo \
1.274 tron 140: expat \
1.268 christos 141: fetch \
142: fl \
143: form \
144: g2c \
145: gcc \
146: gnumalloc \
147: gssapi \
148: hdb \
149: heimbase \
150: heimntlm \
151: hx509 \
152: intl \
153: ipsec \
154: isc \
155: isccc \
156: isccfg \
157: kadm5clnt \
158: kadm5srv \
159: kafs \
160: krb5 \
161: kvm \
162: l \
163: lber \
164: ldap \
165: ldap_r \
166: lua \
1.318 ! christos 167: lutok \
1.268 christos 168: m \
169: magic \
170: menu \
1.304 joerg 171: netpgpverify \
1.318 ! christos 172: ns \
1.268 christos 173: objc \
174: ossaudio \
1.318 ! christos 175: panel \
1.268 christos 176: pam \
177: pcap \
178: pci \
179: posix \
180: pthread \
181: puffs \
182: quota \
183: radius \
1.318 ! christos 184: refuse \
1.268 christos 185: resolv \
186: rmt \
187: roken \
188: rpcsvc \
189: rt \
190: rump \
191: rumpfs_cd9660fs \
192: rumpfs_efs \
193: rumpfs_ext2fs \
194: rumpfs_ffs \
195: rumpfs_hfs \
196: rumpfs_lfs \
197: rumpfs_msdosfs \
198: rumpfs_nfs \
199: rumpfs_ntfs \
200: rumpfs_syspuffs \
201: rumpfs_tmpfs \
202: rumpfs_udf \
203: rumpfs_ufs \
204: rumpuser \
205: saslc \
206: skey \
207: sl \
208: sqlite3 \
209: ss \
210: ssh \
211: ssl \
212: ssp \
1.318 ! christos 213: stdc++ \
! 214: supc++ \
1.268 christos 215: terminfo \
1.270 christos 216: tre \
1.300 christos 217: unbound \
1.268 christos 218: usbhid \
219: util \
220: wind \
221: wrap \
222: y \
223: z
1.318 ! christos 224:
! 225: .for _lib in ${_LIBLIST}
1.202 lukem 226: .ifndef LIB${_lib:tu}
1.269 christos 227: LIB${_lib:tu}= ${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a
1.202 lukem 228: .MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded
229: .endif
230: .endfor
1.269 christos 231:
1.311 mrg 232: .if (${MKKERBEROS} != "no")
233: LIBKRB5_LDADD+= -lkrb5
234: LIBKRB5_DPADD+= ${LIBKRB5}
235: # Kerberos5 applications, if linked statically, need more libraries
236: LIBKRB5_STATIC_LDADD+= \
237: -lhx509 -lcrypto -lasn1 -lcom_err -lroken \
238: -lwind -lheimbase -lsqlite3 -lcrypt -lutil
239: LIBKRB5_STATIC_DPADD+= \
240: ${LIBHX509} ${LIBCRYPTO} ${LIBASN1} ${LIBCOM_ERR} ${LIBROKEN} \
241: ${LIBWIND} ${LIBHEIMBASE} ${LIBSQLITE3} ${LIBCRYPT} ${LIBUTIL}
242: . if (${MKPIC} == "no")
243: LIBKRB5_LDADD+= ${LIBKRB5_STATIC_LDADD}
244: LIBKRB5_DPADD+= ${LIBKRB5_STATIC_DPADD}
245: . endif
246: .endif
247:
1.206 he 248: # PAM applications, if linked statically, need more libraries
249: .if (${MKPIC} == "no")
1.208 christos 250: PAM_STATIC_LDADD+= -lssh
251: PAM_STATIC_DPADD+= ${LIBSSH}
252: .if (${MKKERBEROS} != "no")
1.265 he 253: PAM_STATIC_LDADD+= -lkafs -lkrb5 -lhx509 -lwind -lasn1 \
1.301 christos 254: -lroken -lcom_err -lheimbase -lcrypto -lsqlite3
1.265 he 255: PAM_STATIC_DPADD+= ${LIBKAFS} ${LIBKRB5} ${LIBHX509} ${LIBWIND} ${LIBASN1} \
1.301 christos 256: ${LIBROKEN} ${LIBCOM_ERR} ${LIBHEIMBASE} ${LIBCRYPTO} ${LIBSQLITE3}
1.208 christos 257: .endif
258: .if (${MKSKEY} != "no")
259: PAM_STATIC_LDADD+= -lskey
260: PAM_STATIC_DPADD+= ${LIBSKEY}
261: .endif
262: PAM_STATIC_LDADD+= -lradius -lcrypt -lrpcsvc -lutil
263: PAM_STATIC_DPADD+= ${LIBRADIUS} ${LIBCRYPT} ${LIBRPCSVC} ${LIBUTIL}
1.206 he 264: .else
265: PAM_STATIC_LDADD=
266: PAM_STATIC_DPADD=
267: .endif
268:
1.269 christos 269: # NB: If you are a library here, add it in bsd.README
1.202 lukem 270: .for _lib in \
1.268 christos 271: FS \
272: GL \
273: GLU \
274: ICE \
275: SM \
276: X11 \
277: XTrap \
278: Xau \
279: Xaw \
280: Xdmcp \
281: Xext \
1.312 mrg 282: Xfont2 \
1.268 christos 283: Xfont \
284: Xft \
285: Xi \
286: Xinerama \
287: Xmu \
288: Xmuu \
289: Xpm \
290: Xrandr \
291: Xrender \
292: Xss \
293: Xt \
294: Xtst \
295: Xv \
296: Xxf86dga \
297: Xxf86misc \
298: Xxf86vm \
299: dps \
300: fntstubs \
301: fontcache \
302: fontconfig \
303: fontenc \
304: freetype \
305: lbxutil \
306: xkbfile
1.202 lukem 307: .ifndef LIB${_lib:tu}
1.233 rtr 308: LIB${_lib:tu}= ${DESTDIR}${X11USRLIBDIR}/lib${_lib}.a
1.202 lukem 309: .MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded
310: .endif
311: .endfor
312:
1.284 mrg 313: # Ugly one-offs
314: LIBX11_XCB= ${DESTDIR}${X11USRLIBDIR}/libX11-xcb.a
1.285 christos 315: LIBXCB= ${DESTDIR}${X11USRLIBDIR}/libxcb.a
1.284 mrg 316:
1.204 lukem 317: .if defined(RESCUEDIR)
318: CPPFLAGS+= -DRESCUEDIR=\"${RESCUEDIR}\"
319: .endif
320:
1.144 lukem 321: _PROGLDOPTS=
322: .if ${SHLINKDIR} != "/usr/libexec" # XXX: change or remove if ld.so moves
323: _PROGLDOPTS+= -Wl,-dynamic-linker=${_SHLINKER}
1.161 itohy 324: .endif
1.187 lukem 325: .if ${SHLIBDIR} != "/usr/lib"
1.264 joerg 326: _PROGLDOPTS+= -Wl,-rpath,${SHLIBDIR} \
1.263 joerg 327: -L=${SHLIBDIR}
1.277 joerg 328: .elif ${SHLIBINSTALLDIR} != "/usr/lib"
329: _PROGLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR} \
330: -L=${SHLIBINSTALLDIR}
1.144 lukem 331: .endif
332:
1.223 jmmv 333: __proginstall: .USE
334: ${_MKTARGET_INSTALL}
335: ${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
336: ${STRIPFLAG} ${.ALLSRC} ${.TARGET}
337:
1.255 pooka 338: __progrumpinstall: .USE
339: ${_MKTARGET_INSTALL}
340: ${INSTALL_FILE} -o ${RUMPBINOWN} -g ${RUMPBINGRP} -m ${RUMPBINMODE} \
341: ${STRIPFLAG} ${.ALLSRC} ${.TARGET}
342:
1.223 jmmv 343: __progdebuginstall: .USE
344: ${_MKTARGET_INSTALL}
345: ${INSTALL_FILE} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \
346: ${.ALLSRC} ${.TARGET}
347:
348:
349:
350: #
351: # Backwards compatibility with Makefiles that assume that bsd.prog.mk
352: # can only build a single binary.
353: #
354:
355: _APPEND_MANS=yes
356: _APPEND_SRCS=yes
357:
1.231 lukem 358: _CCLINKFLAGS=
359:
1.145 thorpej 360: .if defined(PROG_CXX)
1.223 jmmv 361: PROG= ${PROG_CXX}
1.231 lukem 362: _CCLINK= ${CXX} ${_CCLINKFLAGS}
1.223 jmmv 363: .endif
364:
1.255 pooka 365: .if defined(RUMPPRG)
1.294 christos 366: CPPFLAGS+= -D_KERNTYPES
1.255 pooka 367: PROG= ${RUMPPRG}
1.275 christos 368: . ifndef CRUNCHEDPROG
369: . if (${MKRUMP} != "no")
1.255 pooka 370: PROGS= ${RUMPPRG} rump.${RUMPPRG}
1.275 christos 371: . else
372: PROGS= ${RUMPPRG}
373: . endif
374: . if defined(SRCS)
375: . if (${MKRUMP} != "no")
1.255 pooka 376: SRCS.rump.${PROG}:= ${SRCS} ${PROG}_rumpops.c ${RUMPSRCS}
1.275 christos 377: . endif
1.255 pooka 378: SRCS+= ${PROG}_hostops.c
1.275 christos 379: . else
1.255 pooka 380: SRCS= ${PROG}.c ${PROG}_hostops.c
1.275 christos 381: . if (${MKRUMP} != "no")
1.255 pooka 382: SRCS.rump.${PROG}= ${PROG}.c ${PROG}_rumpops.c ${RUMPSRCS}
1.275 christos 383: . endif
384: . endif
385: . if (${MKRUMP} != "no")
1.257 pooka 386: DPSRCS+= ${PROG}_rumpops.c ${RUMPSRCS}
1.308 christos 387: LDADD.rump.${PROG}+= ${LDADD.rump} -lrumpclient
388: DPADD.rump.${PROG}+= ${DPADD.rump} ${LIBRUMPCLIENT}
1.255 pooka 389: MAN.rump.${PROG}= # defined but feeling empty
390: _RUMPINSTALL.rump.${PROG}=# defined
1.275 christos 391: . endif
392: . else # CRUNCHEDPROG
1.256 pooka 393: PROGS= ${PROG}
394: CPPFLAGS+= -DCRUNCHOPS
1.275 christos 395: . endif
1.255 pooka 396: .endif
397:
1.223 jmmv 398: .if defined(PROG)
1.231 lukem 399: _CCLINK?= ${CC} ${_CCLINKFLAGS}
1.223 jmmv 400: . if defined(MAN)
401: MAN.${PROG}= ${MAN}
402: _APPEND_MANS= no
403: . endif
404: . if !defined(OBJS)
405: OBJS= ${OBJS.${PROG}}
406: . endif
407: . if defined(PROGNAME)
408: PROGNAME.${PROG}= ${PROGNAME}
409: . endif
410: . if defined(SRCS)
411: SRCS.${PROG}= ${SRCS}
412: _APPEND_SRCS= no
413: . endif
414: .endif
415:
416: # Turn the single-program PROG and PROG_CXX variables into their multi-word
417: # counterparts, PROGS and PROGS_CXX.
1.255 pooka 418: .if !defined(RUMPPRG)
419: . if defined(PROG_CXX) && !defined(PROGS_CXX)
1.223 jmmv 420: PROGS_CXX= ${PROG_CXX}
1.262 jmmv 421: . elif defined(PROG) && !defined(PROGS)
1.223 jmmv 422: PROGS= ${PROG}
1.255 pooka 423: . endif
1.223 jmmv 424: .endif
425:
1.281 christos 426: ##### Libraries that this may depend upon.
427: .if defined(PROGDPLIBS) # {
428: .for _lib _dir in ${PROGDPLIBS}
429: .if !defined(BINDO.${_lib})
1.282 christos 430: PROGDO.${_lib}!= cd "${_dir}" && ${PRINTOBJDIR}
431: .MAKEOVERRIDES+=PROGDO.${_lib}
1.281 christos 432: .endif
1.282 christos 433: LDADD+= -L${PROGDO.${_lib}} -l${_lib}
434: .if exists(${PROGDO.${_lib}}/lib${_lib}_pic.a)
435: DPADD+= ${PROGDO.${_lib}}/lib${_lib}_pic.a
436: .elif exists(${PROGDO.${_lib}}/lib${_lib}.so)
437: DPADD+= ${PROGDO.${_lib}}/lib${_lib}.so
1.281 christos 438: .else
1.282 christos 439: DPADD+= ${PROGDO.${_lib}}/lib${_lib}.a
1.281 christos 440: .endif
441: .endfor
442: .endif # }
1.223 jmmv 443: #
444: # Per-program definitions and targets.
445: #
446:
1.271 matt 447: _CCLINK.CDEFAULT= ${CC} ${_CCLINKFLAGS}
1.223 jmmv 448: # Definitions specific to C programs.
449: .for _P in ${PROGS}
450: SRCS.${_P}?= ${_P}.c
1.231 lukem 451: _CCLINK.${_P}= ${CC} ${_CCLINKFLAGS}
1.271 matt 452: _CFLAGS.${_P}= ${CFLAGS} ${CPUFLAGS}
453: _CPPFLAGS.${_P}= ${CPPFLAGS}
454: _COPTS.${_P}= ${COPTS}
1.223 jmmv 455: .endfor
456:
1.271 matt 457: _CCLINK.CXXDEFAULT= ${CXX} ${_CCLINKFLAGS}
1.223 jmmv 458: # Definitions specific to C++ programs.
459: .for _P in ${PROGS_CXX}
460: SRCS.${_P}?= ${_P}.cc
1.231 lukem 461: _CCLINK.${_P}= ${CXX} ${_CCLINKFLAGS}
1.223 jmmv 462: .endfor
463:
464: # Language-independent definitions.
465: .for _P in ${PROGS} ${PROGS_CXX} # {
466:
467: BINDIR.${_P}?= ${BINDIR}
468: PROGNAME.${_P}?= ${_P}
469:
1.309 christos 470: .if ${MKDEBUG:Uno} != "no" && !defined(NODEBUG) && !commands(${_P}) && \
1.310 christos 471: empty(SRCS.${_P}:M*.sh)
1.223 jmmv 472: _PROGDEBUG.${_P}:= ${PROGNAME.${_P}}.debug
1.145 thorpej 473: .endif
474:
1.223 jmmv 475: .if defined(PAXCTL_FLAGS)
476: PAXCTL_FLAGS.${_P}?= ${PAXCTL_FLAGS}
1.215 lukem 477: .endif
478:
1.223 jmmv 479: ##### PROG specific flags.
1.244 uebayasi 480:
1.278 jmmv 481: _DPADD.${_P}= ${DPADD} ${DPADD.${_P}}
1.223 jmmv 482: _LDADD.${_P}= ${LDADD} ${LDADD.${_P}}
483: _LDFLAGS.${_P}= ${LDFLAGS} ${LDFLAGS.${_P}}
1.313 christos 484: .if ${MKSANITIZER} != "yes"
485: # Sanitizers don't support static build.
1.223 jmmv 486: _LDSTATIC.${_P}= ${LDSTATIC} ${LDSTATIC.${_P}}
1.313 christos 487: .endif
1.223 jmmv 488:
489: ##### Build and install rules
490: .if !empty(_APPEND_SRCS:M[Yy][Ee][Ss])
1.271 matt 491: SRCS+= ${SRCS.${_P}} # For bsd.dep.mk
1.223 jmmv 492: .endif
493:
494: _YPSRCS.${_P}= ${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}}
495:
496: DPSRCS+= ${_YPSRCS.${_P}}
497: CLEANFILES+= ${_YPSRCS.${_P}}
498:
499: .if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth)
500: OBJS.${_P}+= ${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g}
501: LOBJS.${_P}+= ${LSRCS:.c=.ln} ${SRCS.${_P}:M*.c:.c=.ln}
1.157 thorpej 502: .endif
503:
1.223 jmmv 504: .if defined(OBJS.${_P}) && !empty(OBJS.${_P}) # {
505: .NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}}
506:
1.271 matt 507: .if (defined(USE_COMBINE) && ${USE_COMBINE} != "no" && !commands(${_P}) \
508: && (${_CCLINK.${_P}} == ${_CCLINK.CDEFAULT} \
509: || ${_CCLINK.${_P}} == ${_CCLINK.CXXDEFAULT}) \
510: && !defined(NOCOMBINE.${_P}) && !defined(NOCOMBINE))
511: .for f in ${SRCS.${_P}:N*.h:N*.sh:N*.fth:C/\.[yl]$/.c/g}
512: #_XFLAGS.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} \
513: # ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5}
514: .if (${CPPFLAGS.$f:D1} == "1" || ${CPUFLAGS.$f:D2} == "2" \
515: || ${COPTS.$f:D3} == "3" || ${OBJCOPTS.$f:D4} == "4" \
516: || ${CXXFLAGS.$f:D5} == "5") \
517: || ("${f:M*.[cyl]}" == "" || commands(${f:R:S/$/.o/}))
518: XOBJS.${_P}+= ${f:R:S/$/.o/}
519: .else
520: XSRCS.${_P}+= ${f}
521: NODPSRCS+= ${f}
522: .endif
523: .endfor
524:
1.286 joerg 525: ${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${XOBJS.${_P}} ${SRCS.${_P}} \
526: ${DPSRCS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${_DPADD.${_P}}
1.271 matt 527: ${_MKTARGET_LINK}
528: .if defined(DESTDIR)
529: ${_CCLINK.${_P}} -Wl,-nostdlib \
530: ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
531: -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \
532: -MD --combine ${_CPPFLAGS.${_P}} ${_CFLAGS.${_P}} ${_COPTS.${_P}} \
533: ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
534: ${_LDADD.${_P}} -L${_GCC_LIBGCCDIR} -L${DESTDIR}/usr/lib
535: .else
536: ${_CCLINK.${_P}} ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
537: -MD --combine ${_CPPFLAGS.${_P}} ${_COPTS.${_P}}
538: ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
539: ${_LDADD.${_P}}
540: .endif # defined(DESTDIR)
541: .if defined(CTFMERGE)
542: ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
543: .endif
544: .if defined(PAXCTL_FLAGS.${_P})
545: ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
546: .endif
547: .if ${MKSTRIPIDENT} != "no"
548: ${OBJCOPY} -R .ident ${.TARGET}
549: .endif
550:
551: CLEANFILES+= ${_P}.d
552: .if exists(${_P}.d)
553: .include "${_P}.d" # include -MD depend for program.
554: .endif
555: .else # USE_COMBINE
556:
1.223 jmmv 557: ${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS}
1.182 lukem 558:
1.286 joerg 559: ${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \
560: ${LIBCRTEND} ${_DPADD.${_P}}
1.223 jmmv 561: .if !commands(${_P})
1.194 lukem 562: ${_MKTARGET_LINK}
1.231 lukem 563: ${_CCLINK.${_P}} \
1.232 lukem 564: ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \
1.283 christos 565: ${OBJS.${_P}} ${_PROGLDOPTS} ${_LDADD.${_P}}
1.247 darran 566: .if defined(CTFMERGE)
567: ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
568: .endif
1.223 jmmv 569: .if defined(PAXCTL_FLAGS.${_P})
570: ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
1.218 christos 571: .endif
1.235 joerg 572: .if ${MKSTRIPIDENT} != "no"
573: ${OBJCOPY} -R .ident ${.TARGET}
574: .endif
1.223 jmmv 575: .endif # !commands(${_P})
1.271 matt 576: .endif # USE_COMBINE
1.183 dsl 577:
1.278 jmmv 578: ${_P}.ro: ${OBJS.${_P}} ${_DPADD.${_P}}
1.207 dsl 579: ${_MKTARGET_LINK}
1.298 martin 580: ${CC} ${LDFLAGS:N-pie} -nostdlib -r -Wl,-dc -o ${.TARGET} ${OBJS.${_P}}
1.1 cgd 581:
1.223 jmmv 582: .if defined(_PROGDEBUG.${_P})
1.224 jmmv 583: ${_PROGDEBUG.${_P}}: ${_P}
1.215 lukem 584: ${_MKTARGET_CREATE}
1.251 lukem 585: ( ${OBJCOPY} --only-keep-debug ${_P} ${_PROGDEBUG.${_P}} \
586: && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \
587: --add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \
588: ) || (rm -f ${_PROGDEBUG.${_P}}; false)
1.215 lukem 589: .endif
590:
1.223 jmmv 591: .endif # defined(OBJS.${_P}) && !empty(OBJS.${_P}) # }
1.1 cgd 592:
1.223 jmmv 593: .if !defined(MAN.${_P})
594: MAN.${_P}= ${_P}.1
595: .endif # !defined(MAN.${_P})
596: .if !empty(_APPEND_MANS:M[Yy][Ee][Ss])
597: MAN+= ${MAN.${_P}}
598: .endif
1.11 mycroft 599:
1.223 jmmv 600: realall: ${_P} ${_PROGDEBUG.${_P}}
1.1 cgd 601:
1.267 apb 602: CLEANFILES+= ${_P} ${_PROGDEBUG.${_P}}
1.134 tls 603:
1.223 jmmv 604: .if defined(OBJS.${_P}) && !empty(OBJS.${_P})
1.267 apb 605: CLEANFILES+= ${OBJS.${_P}} ${LOBJS.${_P}}
1.59 cgd 606: .endif
1.27 mycroft 607:
1.223 jmmv 608: _PROG_INSTALL+= proginstall-${_P}
1.114 mycroft 609:
1.223 jmmv 610: .if !target(proginstall-${_P}) # {
611: proginstall-${_P}:: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
612: ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
613: .PRECIOUS: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
614: ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
1.215 lukem 615:
1.172 lukem 616: .if ${MKUPDATE} == "no"
1.255 pooka 617: .if defined(_RUMPINSTALL.${_P})
618: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __progrumpinstall
619: .else
1.223 jmmv 620: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall
1.255 pooka 621: .endif
1.223 jmmv 622: .if !defined(BUILD) && !make(all) && !make(${_P})
623: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE
624: .endif
625: .if defined(_PROGDEBUG.${_P})
626: ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall
627: .if !defined(BUILD) && !make(all) && !make(${_P})
628: ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE
1.215 lukem 629: .endif
1.223 jmmv 630: .endif # define(_PROGDEBUG.${_P})
1.215 lukem 631: .else # MKUPDATE != no
1.255 pooka 632: .if defined(_RUMPINSTALL.${_P})
633: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __progrumpinstall
634: .else
1.223 jmmv 635: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall
1.255 pooka 636: .endif
1.223 jmmv 637: .if !defined(BUILD) && !make(all) && !make(${_P})
638: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE
639: .endif
640: .if defined(_PROGDEBUG.${_P})
641: ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall
642: .if !defined(BUILD) && !make(all) && !make(${_P})
643: ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE
1.154 mycroft 644: .endif
1.223 jmmv 645: .endif # defined(_PROGDEBUG.${_P})
1.215 lukem 646: .endif # MKUPDATE != no
647:
1.223 jmmv 648: .endif # !target(proginstall-${_P}) # }
649:
650: lint: lint-${_P}
651: lint-${_P}: ${LOBJS.${_P}}
652: .if defined(LOBJS.${_P}) && !empty(LOBJS.${_P})
653: ${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[ ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}}
654: .endif
655:
656: .endfor # _P in ${PROGS} ${PROGS_CXX} # }
1.23 mycroft 657:
1.225 jmmv 658: .if defined(OBJS) && !empty(OBJS) && \
659: (empty(PROGS) && empty(PROGS_CXX))
1.267 apb 660: CLEANFILES+= ${OBJS} ${LOBJS}
1.225 jmmv 661: .endif
662:
1.74 mycroft 663: .if !target(proginstall)
1.223 jmmv 664: proginstall:: ${_PROG_INSTALL}
1.74 mycroft 665: .endif
1.197 lukem 666: .PHONY: proginstall
1.74 mycroft 667:
1.223 jmmv 668:
669:
670: realall: ${SCRIPTS}
1.215 lukem 671: .if defined(SCRIPTS) && !target(scriptsinstall) # {
1.65 mycroft 672: SCRIPTSDIR?=${BINDIR}
673: SCRIPTSOWN?=${BINOWN}
674: SCRIPTSGRP?=${BINGRP}
675: SCRIPTSMODE?=${BINMODE}
1.113 mycroft 676:
677: scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
1.114 mycroft 678: .PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
1.113 mycroft 679:
1.115 mycroft 680: __scriptinstall: .USE
1.192 lukem 681: ${_MKTARGET_INSTALL}
1.139 tv 682: ${INSTALL_FILE} \
1.116 mycroft 683: -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \
684: -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \
685: -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \
1.209 jwise 686: ${.ALLSRC} ${.TARGET}
1.115 mycroft 687:
1.130 sommerfe 688: .for S in ${SCRIPTS:O:u}
1.172 lukem 689: .if ${MKUPDATE} == "no"
1.154 mycroft 690: ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall
691: .if !defined(BUILD) && !make(all) && !make(${S})
692: ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE
693: .endif
694: .else
695: ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall
1.103 fredb 696: .if !defined(BUILD) && !make(all) && !make(${S})
1.113 mycroft 697: ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE
1.63 christos 698: .endif
1.154 mycroft 699: .endif
1.63 christos 700: .endfor
1.215 lukem 701: .endif # }
1.1 cgd 702:
1.74 mycroft 703: .if !target(scriptsinstall)
704: scriptsinstall::
1.1 cgd 705: .endif
1.197 lukem 706: .PHONY: scriptsinstall
1.1 cgd 707:
1.138 tv 708: ##### Pull in related .mk logic
1.241 apb 709: LINKSOWN?= ${BINOWN}
710: LINKSGRP?= ${BINGRP}
711: LINKSMODE?= ${BINMODE}
1.1 cgd 712: .include <bsd.man.mk>
1.50 jtc 713: .include <bsd.nls.mk>
1.66 christos 714: .include <bsd.files.mk>
1.63 christos 715: .include <bsd.inc.mk>
1.83 mycroft 716: .include <bsd.links.mk>
1.180 lukem 717: .include <bsd.sys.mk>
1.26 mycroft 718: .include <bsd.dep.mk>
1.266 joerg 719: .include <bsd.clang-analyze.mk>
1.267 apb 720: .include <bsd.clean.mk>
1.240 cube 721:
1.138 tv 722: ${TARGETS}: # ensure existence
1.166 lukem 723:
724: .endif # HOSTPROG
CVSweb <webmaster@jp.NetBSD.org>