xref: /openbsd-src/share/mk/bsd.prog.mk (revision 66e500ce5d858f840f525d1a2dab9a04535aa247)
1*66e500ceSmortimer#	$OpenBSD: bsd.prog.mk,v 1.83 2021/06/09 19:44:55 mortimer Exp $
2ad3614a8Sderaadt#	$NetBSD: bsd.prog.mk,v 1.55 1996/04/08 21:19:26 jtc Exp $
3df930be7Sderaadt#	@(#)bsd.prog.mk	5.26 (Berkeley) 6/25/91
4df930be7Sderaadt
5df930be7Sderaadt.if exists(${.CURDIR}/../Makefile.inc)
6df930be7Sderaadt.include "${.CURDIR}/../Makefile.inc"
7df930be7Sderaadt.endif
8df930be7Sderaadt
9df930be7Sderaadt.include <bsd.own.mk>
10df930be7Sderaadt
11930c48b4Sschwarze.SUFFIXES: .out .o .c .cc .cpp .C .cxx .y .l .s
12df930be7Sderaadt
13ce9efda1Sderaadt.if (defined(LDSTATIC) && !defined(STATICPIE)) || defined(NOPIE)
14dec03fdfSpascalCFLAGS+=       ${NOPIE_FLAGS}
15cecf84d4SjsgCXXFLAGS+=     ${NOPIE_FLAGS}
16dec03fdfSpascalAFLAGS+=       ${NOPIE_FLAGS}
17bfcac819SpascalLDFLAGS+=      ${NOPIE_LDFLAGS}
18dec03fdfSpascal.endif
19dec03fdfSpascal
20b05dcccaSespie.if ${WARNINGS:L} == "yes"
21b05dcccaSespieCFLAGS+=       ${CDIAGFLAGS}
22b05dcccaSespieCXXFLAGS+=     ${CXXDIAGFLAGS}
23b05dcccaSespie.endif
24d5e4872eSmillertCFLAGS+=	${COPTS}
25b05dcccaSespieCXXFLAGS+=     ${CXXOPTS}
26df930be7Sderaadt
27e7556950SniklasCRTBEGIN?=       ${DESTDIR}/usr/lib/crtbegin.o
28e7556950SniklasCRTEND?=         ${DESTDIR}/usr/lib/crtend.o
29e7556950Sniklas
30df930be7SderaadtLIBCRT0?=	${DESTDIR}/usr/lib/crt0.o
31df930be7SderaadtLIBC?=		${DESTDIR}/usr/lib/libc.a
32f4c6e777SjsgLIBCBOR?=	${DESTDIR}/usr/lib/libcbor.a
338d0a641aSbeckLIBCRYPTO?=	${DESTDIR}/usr/lib/libcrypto.a
346d68987dSespieLIBCURSES?=	${DESTDIR}/usr/lib/libcurses.a
35df930be7SderaadtLIBEDIT?=	${DESTDIR}/usr/lib/libedit.a
36694c1c28SjsgLIBELF?=	${DESTDIR}/usr/lib/libelf.a
37558f3d96SmillertLIBEVENT?=	${DESTDIR}/usr/lib/libevent.a
38*66e500ceSmortimerLIBEXECINFO?=	${DESTDIR}/usr/lib/libexecinfo.a
3949a9729aSmiodLIBEXPAT?=	${DESTDIR}/usr/lib/libexpat.a
40f4c6e777SjsgLIBFIDO2?=	${DESTDIR}/usr/lib/libfido2.a
4149a9729aSmiodLIBFORM?=	${DESTDIR}/usr/lib/libform.a
4249a9729aSmiodLIBFORMW?=	${DESTDIR}/usr/lib/libformw.a
432d8214ecShoLIBKEYNOTE?=	${DESTDIR}/usr/lib/libkeynote.a
44df930be7SderaadtLIBKVM?=	${DESTDIR}/usr/lib/libkvm.a
45ad3614a8SderaadtLIBL?=		${DESTDIR}/usr/lib/libl.a
46df930be7SderaadtLIBM?=		${DESTDIR}/usr/lib/libm.a
4749a9729aSmiodLIBMENU?=	${DESTDIR}/usr/lib/libmenu.a
4849a9729aSmiodLIBMENUW?=	${DESTDIR}/usr/lib/libmenuw.a
490eaf192dSyasuokaLIBRADIUS?=	${DESTDIR}/usr/lib/libradius.a
5049a9729aSmiodLIBOSSAUDIO?=	${DESTDIR}/usr/lib/libossaudio.a
5149a9729aSmiodLIBPANEL?=	${DESTDIR}/usr/lib/libpanel.a
5249a9729aSmiodLIBPANELW?=	${DESTDIR}/usr/lib/libpanelw.a
536d68987dSespieLIBPCAP?=	${DESTDIR}/usr/lib/libpcap.a
54afaa32c1SmillertLIBPERL?=	${DESTDIR}/usr/lib/libperl.a
5549a9729aSmiodLIBPTHREAD?=	${DESTDIR}/usr/lib/libpthread.a
56df930be7SderaadtLIBRPCSVC?=	${DESTDIR}/usr/lib/librpcsvc.a
57df930be7SderaadtLIBSKEY?=	${DESTDIR}/usr/lib/libskey.a
5849a9729aSmiodLIBSNDIO?=	${DESTDIR}/usr/lib/libsndio.a
598d0a641aSbeckLIBSSL?=	${DESTDIR}/usr/lib/libssl.a
606e3d4b76SmartijnLIBAGENTX?=	${DESTDIR}/usr/lib/libagentx.a
61b600beedSjsingLIBTLS?=	${DESTDIR}/usr/lib/libtls.a
62df930be7SderaadtLIBTERMCAP?=	${DESTDIR}/usr/lib/libtermcap.a
63c3f5d593StholoLIBTERMLIB?=	${DESTDIR}/usr/lib/libtermlib.a
64dd3da175SjsgLIBUSBHID?=	${DESTDIR}/usr/lib/libusbhid.a
65df930be7SderaadtLIBUTIL?=	${DESTDIR}/usr/lib/libutil.a
66ad3614a8SderaadtLIBY?=		${DESTDIR}/usr/lib/liby.a
67c5362e0dSmickeyLIBZ?=		${DESTDIR}/usr/lib/libz.a
68df930be7Sderaadt
6903590265Sbrad.if ${MACHINE_ARCH} == "alpha" || ${MACHINE_ARCH} == "amd64" || \
7049a9729aSmiod    ${MACHINE_ARCH} == "arm" || ${MACHINE_ARCH} == "i386"
7133ca7345SmiodLIBARCH?=	${DESTDIR}/usr/lib/lib${MACHINE_ARCH}.a
726d68987dSespie.else
736d68987dSespieLIBARCH?=
746d68987dSespie.endif
756d68987dSespie
76df930be7Sderaadt.if defined(PROG)
77df930be7SderaadtSRCS ?=	${PROG}.c
78e696cfd4SespieMAN ?= ${PROG}.1
79e696cfd4Sespie.endif
80e696cfd4Sespie
81e696cfd4Sespie# if we have several progs, define appropriate vars instead
82e696cfd4Sespie.if defined(PROGS)
83e696cfd4Sespie.  for p in ${PROGS}
84e696cfd4SespieSRCS_$p ?= $p.c
85e696cfd4SespieOBJS_$p = ${SRCS_$p:N*.h:N*.sh:R:S/$/.o/}
86e696cfd4SespieDPADD_$p ?= ${DPADD}
87e696cfd4SespieLDADD_$p ?= ${LDADD}
88e696cfd4Sespie
89e696cfd4Sespie# XXX still create SRCS, because it's what bsd.dep.mk understands
90e696cfd4SespieSRCS += ${SRCS_$p}
91e696cfd4Sespie
92e696cfd4Sespie# and we can write the actual target already
93e696cfd4Sespie.    if defined(OBJS_$p) && !empty(OBJS_$p)
94e696cfd4Sespie.      if !empty(SRCS_$p:M*.C) || !empty(SRCS_$p:M*.cc) || \
95e696cfd4Sespie	!empty(SRCS_$p:M*.cpp) || !empty(SRCS_$p:M*.cxx)
96e696cfd4Sespie$p: ${LIBCRT0} ${OBJS_$p} ${LIBC} ${CRTBEGIN} ${CRTEND} ${DPADD_$p}
97e696cfd4Sespie	${CXX} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${OBJS_$p} ${LDADD_$p}
98e696cfd4Sespie.      else
99e696cfd4Sespie$p: ${LIBCRT0} ${OBJS_$p} ${LIBC} ${CRTBEGIN} ${CRTEND} ${DPADD_$p}
100e696cfd4Sespie	${CC} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${OBJS_$p} ${LDADD_$p}
101e696cfd4Sespie.      endif
102e696cfd4Sespie.    endif
103e696cfd4Sespie.  endfor
104e696cfd4SespieMAN ?= ${PROGS:=.1}
105e696cfd4Sespie.endif
106e696cfd4Sespie
107e696cfd4Sespie.if defined(PROG) || defined(PROGS)
108e696cfd4Sespie# ... so we create appropriate full list of obj, dep, lex, yacc...
109df930be7Sderaadt.  if !empty(SRCS:N*.h:N*.sh)
110aa0b9f45SguentherOBJS+=	${SRCS:N*.h:N*.sh:R:S/$/.o/}
111e696cfd4SespieDEPS+=	${OBJS:.o=.d}
112e696cfd4Sespie.  endif
113a86afe1bSespie
11452a0f106Sespie_LEXINTM?=${SRCS:M*.l:.l=.c}
11552a0f106Sespie_YACCINTM?=${SRCS:M*.y:.y=.c}
116df930be7Sderaadt.endif
117df930be7Sderaadt
118e696cfd4Sespie.if defined(PROG)
119df930be7Sderaadt.  if defined(OBJS) && !empty(OBJS)
120e696cfd4Sespie.    if !empty(SRCS:M*.C) || !empty(SRCS:M*.cc) || \
121e696cfd4Sespie	!empty(SRCS:M*.cpp) || !empty(SRCS:M*.cxx)
122e7556950Sniklas${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${CRTBEGIN} ${CRTEND} ${DPADD}
1233e4cccd6Sespie	${CXX} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${OBJS} ${LDADD}
124df930be7Sderaadt.    else
125e7556950Sniklas${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${CRTBEGIN} ${CRTEND} ${DPADD}
126188f4ca8Sespie	${CC} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${OBJS} ${LDADD}
1273e4cccd6Sespie.    endif
128df930be7Sderaadt.  endif	# defined(OBJS) && !empty(OBJS)
129e696cfd4Sespie.endif
130df930be7Sderaadt
131df930be7Sderaadt.MAIN: all
132e696cfd4Sespieall: ${PROG} ${PROGS} _SUBDIRUSE
133df930be7Sderaadt
134e696cfd4SespieBUILDAFTER += ${PROG} ${PROGS} ${OBJS}
1359cf9bf88Sespie
136df930be7Sderaadt.if !target(clean)
137df930be7Sderaadtclean: _SUBDIRUSE
1388218532fSderaadt	rm -f a.out [Ee]rrs mklog *.core y.tab.h \
139e696cfd4Sespie	    ${PROG} ${PROGS} ${OBJS} ${_LEXINTM} ${_YACCINTM} ${CLEANFILES}
140df930be7Sderaadt.endif
141df930be7Sderaadt
142df930be7Sderaadtcleandir: _SUBDIRUSE clean
143df930be7Sderaadt
144df930be7Sderaadt.if !target(install)
145df930be7Sderaadt.if !target(beforeinstall)
146df930be7Sderaadtbeforeinstall:
147df930be7Sderaadt.endif
148df930be7Sderaadt.if !target(afterinstall)
149df930be7Sderaadtafterinstall:
150df930be7Sderaadt.endif
151df930be7Sderaadt
152df930be7Sderaadt.if !target(realinstall)
153df930be7Sderaadtrealinstall:
154df930be7Sderaadt.  if defined(PROG)
155d125f366Skn	${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP} \
15628992632Sguenther	    -o ${BINOWN} -g ${BINGRP} \
157d4152dd4Sespie	    -m ${BINMODE} ${PROG} ${DESTDIR}${BINDIR}/${PROG}
158df930be7Sderaadt.  endif
159e696cfd4Sespie.  if defined(PROGS)
160e696cfd4Sespie.    for p in ${PROGS}
161d125f366Skn	${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP} \
162e696cfd4Sespie	    -o ${BINOWN} -g ${BINGRP} \
163e696cfd4Sespie	    -m ${BINMODE} $p ${DESTDIR}${BINDIR}/$p
164e696cfd4Sespie.    endfor
165e696cfd4Sespie.  endif
1663c566c80Sespie.endif
1673c566c80Sespie
1683c566c80Sespieinstall: maninstall _SUBDIRUSE
169df930be7Sderaadt.if defined(LINKS) && !empty(LINKS)
1707c1e7f69Sespie.  for lnk file in ${LINKS}
1717c1e7f69Sespie	@l=${DESTDIR}${lnk}; \
1727c1e7f69Sespie	 t=${DESTDIR}${file}; \
173df930be7Sderaadt	 echo $$t -\> $$l; \
1747c1e7f69Sespie	 rm -f $$t; ln $$l $$t
1757c1e7f69Sespie.  endfor
176df930be7Sderaadt.endif
177df930be7Sderaadt
178df930be7Sderaadtmaninstall: afterinstall
179df930be7Sderaadtafterinstall: realinstall
180df930be7Sderaadtrealinstall: beforeinstall
181df930be7Sderaadt.endif
182df930be7Sderaadt
183df930be7Sderaadt.if !defined(NOMAN)
184df930be7Sderaadt.include <bsd.man.mk>
185df930be7Sderaadt.endif
186df930be7Sderaadt
187a86afe1bSespie# if we already got bsd.lib.mk we don't want to wreck that
188a86afe1bSespie.if !defined(_LIBS)
189a86afe1bSespie.s.o:
190a86afe1bSespie	${COMPILE.S} -MD -MF ${.TARGET:R}.d -o $@ ${.IMPSRC}
191a86afe1bSespie
192a86afe1bSespie.S.o:
193a86afe1bSespie	${COMPILE.S} -MD -MF ${.TARGET:R}.d -o $@ ${.IMPSRC}
194a86afe1bSespie.endif
195a86afe1bSespie
196df930be7Sderaadt.include <bsd.obj.mk>
197df930be7Sderaadt.include <bsd.dep.mk>
198df930be7Sderaadt.include <bsd.subdir.mk>
199ad3614a8Sderaadt.include <bsd.sys.mk>
200