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