1331246Ssjg# $Id: prog.mk,v 1.35 2018/01/26 20:04:07 sjg Exp $ 2246149Ssjg 3246149Ssjg.if !target(__${.PARSEFILE}__) 4246149Ssjg__${.PARSEFILE}__: 5246149Ssjg 6246149Ssjg.include <init.mk> 7246149Ssjg 8246149Ssjg# FreeBSD at least expects MAN8 etc. 9246149Ssjg.if defined(MAN) && !empty(MAN) 10246149Ssjg_sect:=${MAN:E} 11246149SsjgMAN${_sect}=${MAN} 12246149Ssjg.endif 13246149Ssjg 14246149Ssjg.SUFFIXES: .out .o .c .cc .C .y .l .s .8 .7 .6 .5 .4 .3 .2 .1 .0 15246149Ssjg 16246149SsjgCFLAGS+= ${COPTS} 17246149Ssjg 18246149Ssjg.if ${TARGET_OSNAME} == "NetBSD" 19246149Ssjg.if ${MACHINE_ARCH} == "sparc64" 20246149SsjgCFLAGS+= -mcmodel=medlow 21246149Ssjg.endif 22246149Ssjg 23246149Ssjg# ELF platforms depend on crtbegin.o and crtend.o 24246149Ssjg.if ${OBJECT_FMT} == "ELF" 25246149Ssjg.ifndef LIBCRTBEGIN 26246149SsjgLIBCRTBEGIN= ${DESTDIR}/usr/lib/crtbegin.o 27246149Ssjg.MADE: ${LIBCRTBEGIN} 28246149Ssjg.endif 29246149Ssjg.ifndef LIBCRTEND 30246149SsjgLIBCRTEND= ${DESTDIR}/usr/lib/crtend.o 31246149Ssjg.MADE: ${LIBCRTEND} 32246149Ssjg.endif 33246149Ssjg_SHLINKER= ${SHLINKDIR}/ld.elf_so 34246149Ssjg.else 35246149SsjgLIBCRTBEGIN?= 36246149SsjgLIBCRTEND?= 37246149Ssjg_SHLINKER= ${SHLINKDIR}/ld.so 38246149Ssjg.endif 39246149Ssjg 40246149Ssjg.ifndef LIBCRT0 41246149SsjgLIBCRT0= ${DESTDIR}/usr/lib/crt0.o 42246149Ssjg.MADE: ${LIBCRT0} 43246149Ssjg.endif 44246149Ssjg.endif # NetBSD 45246149Ssjg 46246149Ssjg# here is where you can define what LIB* are 47246149Ssjg.-include <libnames.mk> 48246149Ssjg.if ${MK_DPADD_MK} == "yes" 49246149Ssjg# lots of cool magic, but might not suit everyone. 50246149Ssjg.include <dpadd.mk> 51246149Ssjg.endif 52246149Ssjg 53253883Ssjg.if ${MK_GPROF} == "yes" 54253883SsjgCFLAGS+= ${CC_PG} ${PROFFLAGS} 55253883SsjgLDADD+= ${CC_PG} 56253883Ssjg.if ${MK_DPADD_MK} == "no" 57253883SsjgLDADD_LIBC_P?= -lc_p 58253883SsjgLDADD_LAST+= ${LDADD_LIBC_P} 59253883Ssjg.endif 60253883Ssjg.endif 61253883Ssjg 62246149Ssjg.if defined(SHAREDSTRINGS) 63246149SsjgCLEANFILES+=strings 64246149Ssjg.c.o: 65246149Ssjg ${CC} -E ${CFLAGS} ${.IMPSRC} | xstr -c - 66246149Ssjg @${CC} ${CFLAGS} -c x.c -o ${.TARGET} 67246149Ssjg @rm -f x.c 68246149Ssjg 69300313Ssjg${CXX_SUFFIXES:%=%.o}: 70246149Ssjg ${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c - 71246149Ssjg @mv -f x.c x.cc 72246149Ssjg @${CXX} ${CXXFLAGS} -c x.cc -o ${.TARGET} 73246149Ssjg @rm -f x.cc 74246149Ssjg.endif 75246149Ssjg 76246149Ssjg 77246149Ssjg.if defined(PROG) 78319884SsjgBINDIR ?= ${prefix}/bin 79319884Ssjg 80246149SsjgSRCS?= ${PROG}.c 81246149Ssjg.for s in ${SRCS:N*.h:N*.sh:M*/*} 82246149Ssjg${.o .po .lo:L:@o@${s:T:R}$o@}: $s 83246149Ssjg.endfor 84246149Ssjg.if !empty(SRCS:N*.h:N*.sh) 85246149SsjgOBJS+= ${SRCS:T:N*.h:N*.sh:R:S/$/.o/g} 86246149SsjgLOBJS+= ${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln} 87246149Ssjg.endif 88246149Ssjg 89246149Ssjg.if defined(OBJS) && !empty(OBJS) 90246149Ssjg.NOPATH: ${OBJS} ${PROG} ${SRCS:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS:M*.y:.y=.h}} 91246149Ssjg 92246149Ssjg# this is known to work for NetBSD 1.6 and FreeBSD 4.2 93246149Ssjg.if ${TARGET_OSNAME} == "NetBSD" || ${TARGET_OSNAME} == "FreeBSD" 94246149Ssjg_PROGLDOPTS= 95246149Ssjg.if ${SHLINKDIR} != "/usr/libexec" # XXX: change or remove if ld.so moves 96246149Ssjg_PROGLDOPTS+= -Wl,-dynamic-linker=${_SHLINKER} 97246149Ssjg.endif 98246149Ssjg.if defined(LIBDIR) && ${SHLIBDIR} != ${LIBDIR} 99246149Ssjg_PROGLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBDIR}:${DESTDIR}/usr/lib \ 100246149Ssjg -L${DESTDIR}${SHLIBDIR} 101246149Ssjg.endif 102246149Ssjg_PROGLDOPTS+= -Wl,-rpath,${SHLIBDIR}:/usr/lib 103246149Ssjg 104246149Ssjg.if defined(PROG_CXX) 105246149Ssjg_CCLINK= ${CXX} 106246149Ssjg_SUPCXX= -lstdc++ -lm 107246149Ssjg.endif 108246149Ssjg.endif # NetBSD 109246149Ssjg 110246149Ssjg_CCLINK?= ${CC} 111246149Ssjg 112331246Ssjg.if ${MK_PROG_LDORDER_MK} != "no" 113331246Ssjg${PROG}: ldorder 114331246Ssjg 115331246Ssjg.include <ldorder.mk> 116331246Ssjg.endif 117331246Ssjg 118246149Ssjg.if defined(DESTDIR) && exists(${LIBCRT0}) && ${LIBCRT0} != "/dev/null" 119246149Ssjg 120246149Ssjg${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${DPADD} 121331246Ssjg ${_CCLINK} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} -nostdlib ${_PROGLDOPTS} -L${DESTDIR}/usr/lib ${LIBCRT0} ${LIBCRTBEGIN} ${OBJS} ${LDADD_LDORDER} ${LDADD} -L${DESTDIR}/usr/lib ${_SUPCXX} -lgcc -lc -lgcc ${LIBCRTEND} 122246149Ssjg 123246149Ssjg.else 124246149Ssjg 125246149Ssjg${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${DPADD} 126331246Ssjg ${_CCLINK} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${_PROGLDOPTS} ${OBJS} ${LDADD_LDORDER} ${LDADD} 127246149Ssjg 128246149Ssjg.endif # defined(DESTDIR) 129246149Ssjg.endif # defined(OBJS) && !empty(OBJS) 130246149Ssjg 131246149Ssjg.if !defined(MAN) 132246149SsjgMAN= ${PROG}.1 133246149Ssjg.endif # !defined(MAN) 134246149Ssjg.endif # defined(PROG) 135246149Ssjg 136246149Ssjg.if !defined(_SKIP_BUILD) 137319884Ssjgrealbuild: ${PROG} 138246149Ssjg.endif 139319884Ssjg 140246149Ssjgall: _SUBDIRUSE 141246149Ssjg 142246149Ssjg.if !target(clean) 143246149Ssjgcleanprog: 144246149Ssjg rm -f a.out [Ee]rrs mklog core *.core \ 145246149Ssjg ${PROG} ${OBJS} ${LOBJS} ${CLEANFILES} 146246149Ssjg 147246149Ssjgclean: _SUBDIRUSE cleanprog 148246149Ssjgcleandir: _SUBDIRUSE cleanprog 149246149Ssjg.else 150246149Ssjgcleandir: _SUBDIRUSE clean 151246149Ssjg.endif 152246149Ssjg 153246149Ssjg.if defined(SRCS) && (!defined(MKDEP) || ${MKDEP} != autodep) 154246149Ssjgafterdepend: .depend 155246149Ssjg @(TMP=/tmp/_depend$$$$; \ 156246149Ssjg sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.ln:/' \ 157246149Ssjg < .depend > $$TMP; \ 158246149Ssjg mv $$TMP .depend) 159246149Ssjg.endif 160246149Ssjg 161246149Ssjg.if !target(install) 162246149Ssjg.if !target(beforeinstall) 163246149Ssjgbeforeinstall: 164246149Ssjg.endif 165246149Ssjg.if !target(afterinstall) 166246149Ssjgafterinstall: 167246149Ssjg.endif 168246149Ssjg 169246149Ssjg.if !empty(BINOWN) 170246149SsjgPROG_INSTALL_OWN ?= -o ${BINOWN} -g ${BINGRP} 171246149Ssjg.endif 172246149Ssjg 173246149Ssjg.if !target(realinstall) 174246149Ssjgrealinstall: proginstall 175246149Ssjg.endif 176246149Ssjg.if !target(proginstall) 177246149Ssjgproginstall: 178246149Ssjg.if defined(PROG) 179246149Ssjg [ -d ${DESTDIR}${BINDIR} ] || \ 180246149Ssjg ${INSTALL} -d ${PROG_INSTALL_OWN} -m 775 ${DESTDIR}${BINDIR} 181246149Ssjg ${INSTALL} ${COPY} ${STRIP_FLAG} ${PROG_INSTALL_OWN} -m ${BINMODE} \ 182246149Ssjg ${PROG} ${DESTDIR}${BINDIR}/${PROG_NAME} 183246149Ssjg.endif 184246149Ssjg.if defined(HIDEGAME) 185246149Ssjg (cd ${DESTDIR}/usr/games; rm -f ${PROG}; ln -s dm ${PROG}) 186246149Ssjg.endif 187246149Ssjg.endif 188246149Ssjg 189246149Ssjg.include <links.mk> 190246149Ssjg 191246149Ssjginstall: maninstall install_links _SUBDIRUSE 192246149Ssjg 193246149Ssjginstall_links: 194246149Ssjg.if !empty(SYMLINKS) 195246149Ssjg @set ${SYMLINKS}; ${_SYMLINKS_SCRIPT} 196246149Ssjg.endif 197246149Ssjg.if !empty(LINKS) 198246149Ssjg @set ${LINKS}; ${_LINKS_SCRIPT} 199246149Ssjg.endif 200246149Ssjg 201246149Ssjgmaninstall: afterinstall 202246149Ssjgafterinstall: realinstall 203319884Ssjginstall_links: realinstall 204319884Ssjgproginstall: beforeinstall 205246149Ssjgrealinstall: beforeinstall 206246149Ssjg.endif 207246149Ssjg 208246149Ssjg.if !target(lint) 209246149Ssjglint: ${LOBJS} 210246149Ssjg.if defined(LOBJS) && !empty(LOBJS) 211246149Ssjg @${LINT} ${LINTFLAGS} ${LDFLAGS:M-L*} ${LOBJS} ${LDADD} 212246149Ssjg.endif 213246149Ssjg.endif 214246149Ssjg 215246149Ssjg.NOPATH: ${PROG} 216246149Ssjg.if defined(OBJS) && !empty(OBJS) 217246149Ssjg.NOPATH: ${OBJS} 218246149Ssjg.endif 219246149Ssjg 220319884Ssjg.if defined(FILES) || defined(FILESGROUPS) 221319884Ssjg.include <files.mk> 222319884Ssjg.endif 223319884Ssjg 224246149Ssjg.if ${MK_MAN} != "no" 225246149Ssjg.include <man.mk> 226246149Ssjg.endif 227246149Ssjg 228246149Ssjg.if ${MK_NLS} != "no" 229246149Ssjg.include <nls.mk> 230246149Ssjg.endif 231246149Ssjg 232246149Ssjg.include <obj.mk> 233246149Ssjg.include <dep.mk> 234246149Ssjg.include <subdir.mk> 235319884Ssjg 236319884Ssjg.if !empty(PROG) && ${MK_STAGING_PROG} == "yes" 237319884SsjgSTAGE_BINDIR ?= ${STAGE_OBJTOP}${BINDIR} 238319884SsjgSTAGE_DIR.prog ?= ${STAGE_BINDIR} 239319884Ssjg.if ${PROG_NAME:U${PROG}} != ${PROG} 240319884SsjgSTAGE_AS_SETS += prog 241319884SsjgSTAGE_AS_${PROG} = ${PROG_NAME} 242319884Ssjgstage_as.prog: ${PROG} 243319884Ssjg.else 244319884SsjgSTAGE_SETS += prog 245319884Ssjgstage_files.prog: ${PROG} 246319884Ssjg.endif 247319884Ssjg.endif 248319884Ssjg 249246149Ssjg.include <final.mk> 250246149Ssjg 251246149Ssjg.endif 252