bsd.crunchgen.mk revision 215226
1215226Sadrian################################################################# 2215226Sadrian# 3215226Sadrian# General notes: 4215226Sadrian# 5215226Sadrian# A number of Make variables are used to generate the crunchgen config file. 6215226Sadrian# 7215226Sadrian# CRUNCH_SRCDIRS: lists directories to search for included programs 8215226Sadrian# CRUNCH_PROGS: lists programs to be included 9215226Sadrian# CRUNCH_LIBS: libraries to statically link with 10215226Sadrian# CRUNCH_SHLIBS: libraries to dynamically link with 11215226Sadrian# CRUNCH_BUILDOPTS: generic build options to be added to every program 12215226Sadrian# CRUNCH_BUILDTOOLS: lists programs that need build tools built in the 13215226Sadrian# local architecture. 14215226Sadrian# 15215226Sadrian# Special options can be specified for individual programs 16215226Sadrian# CRUNCH_SRCDIR_$(P): base source directory for program $(P) 17215226Sadrian# CRUNCH_BUILDOPTS_$(P): additional build options for $(P) 18215226Sadrian# CRUNCH_ALIAS_$(P): additional names to be used for $(P) 19215226Sadrian# 20215226Sadrian# By default, any name appearing in CRUNCH_PROGS or CRUNCH_ALIAS_${P} 21215226Sadrian# will be used to generate a hard link to the resulting binary. 22215226Sadrian# Specific links can be suppressed by setting 23215226Sadrian# CRUNCH_SUPPRESS_LINK_$(NAME) to 1. 24215226Sadrian# 25215226Sadrian 26215226Sadrian# $FreeBSD: head/share/mk/bsd.crunchgen.mk 215226 2010-11-13 03:11:27Z adrian $ 27215226Sadrian 28215226Sadrian################################################################## 29215226Sadrian# The following is pretty nearly a generic crunchgen-handling makefile 30215226Sadrian# 31215226Sadrian 32215226SadrianCONF= $(PROG).conf 33215226SadrianOUTMK= $(PROG).mk 34215226SadrianOUTC= $(PROG).c 35215226SadrianOUTPUTS=$(OUTMK) $(OUTC) $(PROG).cache 36215226SadrianCRUNCHOBJS= ${.OBJDIR} 37215226Sadrian.if defined(MAKEOBJDIRPREFIX) 38215226SadrianCANONICALOBJDIR:= ${MAKEOBJDIRPREFIX}${.CURDIR} 39215226Sadrian.else 40215226SadrianCANONICALOBJDIR:= /usr/obj${.CURDIR} 41215226Sadrian.endif 42215226Sadrian 43215226SadrianCLEANFILES+= $(CONF) *.o *.lo *.c *.mk *.cache *.a *.h 44215226Sadrian 45215226Sadrian# Program names and their aliases contribute hardlinks to 'rescue' executable, 46215226Sadrian# except for those that get suppressed. 47215226Sadrian.for D in $(CRUNCH_SRCDIRS) 48215226Sadrian.for P in $(CRUNCH_PROGS_$(D)) 49215226Sadrian.ifdef CRUNCH_SRCDIR_${P} 50215226Sadrian$(OUTPUTS): $(CRUNCH_SRCDIR_${P})/Makefile 51215226Sadrian.else 52215226Sadrian$(OUTPUTS): $(.CURDIR)/../../$(D)/$(P)/Makefile 53215226Sadrian.endif 54215226Sadrian# Disable building links for bsdbox - whatever is installing the binaries into 55215226Sadrian# the embedded system should (for now) do the linking there. This may change 56215226Sadrian# in the future. -adrian 57215226Sadrian#.ifndef CRUNCH_SUPPRESS_LINK_${P} 58215226Sadrian#LINKS+= $(BINDIR)/$(PROG) $(BINDIR)/$(P) 59215226Sadrian#.endif 60215226Sadrian#.for A in $(CRUNCH_ALIAS_$(P)) 61215226Sadrian#.ifndef CRUNCH_SUPPRESS_LINK_${A} 62215226Sadrian#LINKS+= $(BINDIR)/$(PROG) $(BINDIR)/$(A) 63215226Sadrian#.endif 64215226Sadrian#.endfor 65215226Sadrian.endfor 66215226Sadrian.endfor 67215226Sadrian 68215226Sadrianall: $(PROG) 69215226Sadrianexe: $(PROG) 70215226Sadrian 71215226Sadrian$(CONF): Makefile 72215226Sadrian echo \# Auto-generated, do not edit >$(.TARGET) 73215226Sadrian.ifdef CRUNCH_BUILDOPTS 74215226Sadrian echo buildopts $(CRUNCH_BUILDOPTS) >>$(.TARGET) 75215226Sadrian.endif 76215226Sadrian.ifdef CRUNCH_LIBS 77215226Sadrian echo libs $(CRUNCH_LIBS) >>$(.TARGET) 78215226Sadrian.endif 79215226Sadrian.ifdef CRUNCH_SHLIBS 80215226Sadrian echo libs_so $(CRUNCH_SHLIBS) >>$(.TARGET) 81215226Sadrian.endif 82215226Sadrian.for D in $(CRUNCH_SRCDIRS) 83215226Sadrian.for P in $(CRUNCH_PROGS_$(D)) 84215226Sadrian echo progs $(P) >>$(.TARGET) 85215226Sadrian.ifdef CRUNCH_SRCDIR_${P} 86215226Sadrian echo special $(P) srcdir $(CRUNCH_SRCDIR_${P}) >>$(.TARGET) 87215226Sadrian.else 88215226Sadrian echo special $(P) srcdir $(.CURDIR)/../../$(D)/$(P) >>$(.TARGET) 89215226Sadrian.endif 90215226Sadrian.ifdef CRUNCH_BUILDOPTS_${P} 91215226Sadrian echo special $(P) buildopts DIRPRFX=${DIRPRFX}${P}/ \ 92215226Sadrian $(CRUNCH_BUILDOPTS_${P}) >>$(.TARGET) 93215226Sadrian.else 94215226Sadrian echo special $(P) buildopts DIRPRFX=${DIRPRFX}${P}/ >>$(.TARGET) 95215226Sadrian.endif 96215226Sadrian.for A in $(CRUNCH_ALIAS_$(P)) 97215226Sadrian echo ln $(P) $(A) >>$(.TARGET) 98215226Sadrian.endfor 99215226Sadrian.endfor 100215226Sadrian.endfor 101215226Sadrian 102215226Sadrian# XXX Make sure we don't pass -P to crunchgen(1). 103215226Sadrian.MAKEFLAGS:= ${.MAKEFLAGS:N-P} 104215226Sadrian.ORDER: $(OUTPUTS) objs 105215226Sadrian$(OUTPUTS): $(CONF) 106215226Sadrian MAKEOBJDIRPREFIX=${CRUNCHOBJS} crunchgen -fq -m $(OUTMK) \ 107215226Sadrian -c $(OUTC) $(CONF) 108215226Sadrian 109215226Sadrian$(PROG): $(OUTPUTS) objs 110215226Sadrian MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f $(OUTMK) exe 111215226Sadrian 112215226Sadrianobjs: $(OUTMK) 113215226Sadrian MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f $(OUTMK) objs 114215226Sadrian 115215226Sadrian# <sigh> Someone should replace the bin/csh and bin/sh build-tools with 116215226Sadrian# shell scripts so we can remove this nonsense. 117215226Sadrianbuild-tools: 118215226Sadrian.for _tool in $(CRUNCH_BUILDTOOLS) 119215226Sadrian cd $(.CURDIR)/../../${_tool}; \ 120215226Sadrian MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} obj; \ 121215226Sadrian MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} build-tools 122215226Sadrian.endfor 123215226Sadrian 124215226Sadrian# Use a separate build tree to hold files compiled for this crunchgen binary 125215226Sadrian# Yes, this does seem to partly duplicate bsd.subdir.mk, but I can't 126215226Sadrian# get that to cooperate with bsd.prog.mk. Besides, many of the standard 127215226Sadrian# targets should NOT be propagated into the components. 128215226Sadriancleandepend cleandir obj objlink: 129215226Sadrian.for D in $(CRUNCH_SRCDIRS) 130215226Sadrian.for P in $(CRUNCH_PROGS_$(D)) 131215226Sadrian.ifdef CRUNCH_SRCDIR_${P} 132215226Sadrian cd ${CRUNCH_SRCDIR_$(P)} && \ 133215226Sadrian MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \ 134215226Sadrian DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET} 135215226Sadrian.else 136215226Sadrian cd $(.CURDIR)/../../${D}/${P} && \ 137215226Sadrian MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \ 138215226Sadrian DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET} 139215226Sadrian.endif 140215226Sadrian.endfor 141215226Sadrian.endfor 142215226Sadrian 143215226Sadrianclean: 144215226Sadrian rm -f ${CLEANFILES} 145215226Sadrian if [ -e ${.OBJDIR}/$(OUTMK) ]; then \ 146215226Sadrian MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f $(OUTMK) clean; \ 147215226Sadrian fi 148215226Sadrian.for D in $(CRUNCH_SRCDIRS) 149215226Sadrian.for P in $(CRUNCH_PROGS_$(D)) 150215226Sadrian.ifdef CRUNCH_SRCDIR_${P} 151215226Sadrian cd ${CRUNCH_SRCDIR_$(P)} && \ 152215226Sadrian MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \ 153215226Sadrian DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET} 154215226Sadrian.else 155215226Sadrian cd $(.CURDIR)/../../${D}/${P} && \ 156215226Sadrian MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \ 157215226Sadrian DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET} 158215226Sadrian.endif 159215226Sadrian.endfor 160215226Sadrian.endfor 161