1# $OpenBSD: bsd.prog.mk,v 1.83 2021/06/09 19:44:55 mortimer Exp $ 2# $NetBSD: bsd.prog.mk,v 1.55 1996/04/08 21:19:26 jtc Exp $ 3# @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91 4 5.if exists(${.CURDIR}/../Makefile.inc) 6.include "${.CURDIR}/../Makefile.inc" 7.endif 8 9.include <bsd.own.mk> 10 11.SUFFIXES: .out .o .c .cc .cpp .C .cxx .y .l .s 12 13.if (defined(LDSTATIC) && !defined(STATICPIE)) || defined(NOPIE) 14CFLAGS+= ${NOPIE_FLAGS} 15CXXFLAGS+= ${NOPIE_FLAGS} 16AFLAGS+= ${NOPIE_FLAGS} 17LDFLAGS+= ${NOPIE_LDFLAGS} 18.endif 19 20.if ${WARNINGS:L} == "yes" 21CFLAGS+= ${CDIAGFLAGS} 22CXXFLAGS+= ${CXXDIAGFLAGS} 23.endif 24CFLAGS+= ${COPTS} 25CXXFLAGS+= ${CXXOPTS} 26 27CRTBEGIN?= ${DESTDIR}/usr/lib/crtbegin.o 28CRTEND?= ${DESTDIR}/usr/lib/crtend.o 29 30LIBCRT0?= ${DESTDIR}/usr/lib/crt0.o 31LIBC?= ${DESTDIR}/usr/lib/libc.a 32LIBCBOR?= ${DESTDIR}/usr/lib/libcbor.a 33LIBCRYPTO?= ${DESTDIR}/usr/lib/libcrypto.a 34LIBCURSES?= ${DESTDIR}/usr/lib/libcurses.a 35LIBEDIT?= ${DESTDIR}/usr/lib/libedit.a 36LIBELF?= ${DESTDIR}/usr/lib/libelf.a 37LIBEVENT?= ${DESTDIR}/usr/lib/libevent.a 38LIBEXECINFO?= ${DESTDIR}/usr/lib/libexecinfo.a 39LIBEXPAT?= ${DESTDIR}/usr/lib/libexpat.a 40LIBFIDO2?= ${DESTDIR}/usr/lib/libfido2.a 41LIBFORM?= ${DESTDIR}/usr/lib/libform.a 42LIBFORMW?= ${DESTDIR}/usr/lib/libformw.a 43LIBKEYNOTE?= ${DESTDIR}/usr/lib/libkeynote.a 44LIBKVM?= ${DESTDIR}/usr/lib/libkvm.a 45LIBL?= ${DESTDIR}/usr/lib/libl.a 46LIBM?= ${DESTDIR}/usr/lib/libm.a 47LIBMENU?= ${DESTDIR}/usr/lib/libmenu.a 48LIBMENUW?= ${DESTDIR}/usr/lib/libmenuw.a 49LIBRADIUS?= ${DESTDIR}/usr/lib/libradius.a 50LIBOSSAUDIO?= ${DESTDIR}/usr/lib/libossaudio.a 51LIBPANEL?= ${DESTDIR}/usr/lib/libpanel.a 52LIBPANELW?= ${DESTDIR}/usr/lib/libpanelw.a 53LIBPCAP?= ${DESTDIR}/usr/lib/libpcap.a 54LIBPERL?= ${DESTDIR}/usr/lib/libperl.a 55LIBPTHREAD?= ${DESTDIR}/usr/lib/libpthread.a 56LIBRPCSVC?= ${DESTDIR}/usr/lib/librpcsvc.a 57LIBSKEY?= ${DESTDIR}/usr/lib/libskey.a 58LIBSNDIO?= ${DESTDIR}/usr/lib/libsndio.a 59LIBSSL?= ${DESTDIR}/usr/lib/libssl.a 60LIBAGENTX?= ${DESTDIR}/usr/lib/libagentx.a 61LIBTLS?= ${DESTDIR}/usr/lib/libtls.a 62LIBTERMCAP?= ${DESTDIR}/usr/lib/libtermcap.a 63LIBTERMLIB?= ${DESTDIR}/usr/lib/libtermlib.a 64LIBUSBHID?= ${DESTDIR}/usr/lib/libusbhid.a 65LIBUTIL?= ${DESTDIR}/usr/lib/libutil.a 66LIBY?= ${DESTDIR}/usr/lib/liby.a 67LIBZ?= ${DESTDIR}/usr/lib/libz.a 68 69.if ${MACHINE_ARCH} == "alpha" || ${MACHINE_ARCH} == "amd64" || \ 70 ${MACHINE_ARCH} == "arm" || ${MACHINE_ARCH} == "i386" 71LIBARCH?= ${DESTDIR}/usr/lib/lib${MACHINE_ARCH}.a 72.else 73LIBARCH?= 74.endif 75 76.if defined(PROG) 77SRCS ?= ${PROG}.c 78MAN ?= ${PROG}.1 79.endif 80 81# if we have several progs, define appropriate vars instead 82.if defined(PROGS) 83. for p in ${PROGS} 84SRCS_$p ?= $p.c 85OBJS_$p = ${SRCS_$p:N*.h:N*.sh:R:S/$/.o/} 86DPADD_$p ?= ${DPADD} 87LDADD_$p ?= ${LDADD} 88 89# XXX still create SRCS, because it's what bsd.dep.mk understands 90SRCS += ${SRCS_$p} 91 92# and we can write the actual target already 93. if defined(OBJS_$p) && !empty(OBJS_$p) 94. if !empty(SRCS_$p:M*.C) || !empty(SRCS_$p:M*.cc) || \ 95 !empty(SRCS_$p:M*.cpp) || !empty(SRCS_$p:M*.cxx) 96$p: ${LIBCRT0} ${OBJS_$p} ${LIBC} ${CRTBEGIN} ${CRTEND} ${DPADD_$p} 97 ${CXX} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${OBJS_$p} ${LDADD_$p} 98. else 99$p: ${LIBCRT0} ${OBJS_$p} ${LIBC} ${CRTBEGIN} ${CRTEND} ${DPADD_$p} 100 ${CC} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${OBJS_$p} ${LDADD_$p} 101. endif 102. endif 103. endfor 104MAN ?= ${PROGS:=.1} 105.endif 106 107.if defined(PROG) || defined(PROGS) 108# ... so we create appropriate full list of obj, dep, lex, yacc... 109. if !empty(SRCS:N*.h:N*.sh) 110OBJS+= ${SRCS:N*.h:N*.sh:R:S/$/.o/} 111DEPS+= ${OBJS:.o=.d} 112. endif 113 114_LEXINTM?=${SRCS:M*.l:.l=.c} 115_YACCINTM?=${SRCS:M*.y:.y=.c} 116.endif 117 118.if defined(PROG) 119. if defined(OBJS) && !empty(OBJS) 120. if !empty(SRCS:M*.C) || !empty(SRCS:M*.cc) || \ 121 !empty(SRCS:M*.cpp) || !empty(SRCS:M*.cxx) 122${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${CRTBEGIN} ${CRTEND} ${DPADD} 123 ${CXX} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${OBJS} ${LDADD} 124. else 125${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${CRTBEGIN} ${CRTEND} ${DPADD} 126 ${CC} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${OBJS} ${LDADD} 127. endif 128. endif # defined(OBJS) && !empty(OBJS) 129.endif 130 131.MAIN: all 132all: ${PROG} ${PROGS} _SUBDIRUSE 133 134BUILDAFTER += ${PROG} ${PROGS} ${OBJS} 135 136.if !target(clean) 137clean: _SUBDIRUSE 138 rm -f a.out [Ee]rrs mklog *.core y.tab.h \ 139 ${PROG} ${PROGS} ${OBJS} ${_LEXINTM} ${_YACCINTM} ${CLEANFILES} 140.endif 141 142cleandir: _SUBDIRUSE clean 143 144.if !target(install) 145.if !target(beforeinstall) 146beforeinstall: 147.endif 148.if !target(afterinstall) 149afterinstall: 150.endif 151 152.if !target(realinstall) 153realinstall: 154. if defined(PROG) 155 ${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP} \ 156 -o ${BINOWN} -g ${BINGRP} \ 157 -m ${BINMODE} ${PROG} ${DESTDIR}${BINDIR}/${PROG} 158. endif 159. if defined(PROGS) 160. for p in ${PROGS} 161 ${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP} \ 162 -o ${BINOWN} -g ${BINGRP} \ 163 -m ${BINMODE} $p ${DESTDIR}${BINDIR}/$p 164. endfor 165. endif 166.endif 167 168install: maninstall _SUBDIRUSE 169.if defined(LINKS) && !empty(LINKS) 170. for lnk file in ${LINKS} 171 @l=${DESTDIR}${lnk}; \ 172 t=${DESTDIR}${file}; \ 173 echo $$t -\> $$l; \ 174 rm -f $$t; ln $$l $$t 175. endfor 176.endif 177 178maninstall: afterinstall 179afterinstall: realinstall 180realinstall: beforeinstall 181.endif 182 183.if !defined(NOMAN) 184.include <bsd.man.mk> 185.endif 186 187# if we already got bsd.lib.mk we don't want to wreck that 188.if !defined(_LIBS) 189.s.o: 190 ${COMPILE.S} -MD -MF ${.TARGET:R}.d -o $@ ${.IMPSRC} 191 192.S.o: 193 ${COMPILE.S} -MD -MF ${.TARGET:R}.d -o $@ ${.IMPSRC} 194.endif 195 196.include <bsd.obj.mk> 197.include <bsd.dep.mk> 198.include <bsd.subdir.mk> 199.include <bsd.sys.mk> 200