bsd.crunchgen.mk revision 289735
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 16289735Sbdrewery# CRUNCH_SRCDIR_${P}: base source directory for program ${P} 17289735Sbdrewery# CRUNCH_BUILDOPTS_${P}: additional build options for ${P} 18289735Sbdrewery# 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 23289735Sbdrewery# CRUNCH_SUPPRESS_LINK_${NAME} to 1. 24215226Sadrian# 25229658Sadrian# If CRUNCH_GENERATE_LINKS is set to no, no links will be generated. 26229658Sadrian# 27215226Sadrian 28215226Sadrian# $FreeBSD: head/share/mk/bsd.crunchgen.mk 289735 2015-10-22 04:47:52Z bdrewery $ 29215226Sadrian 30215226Sadrian################################################################## 31215226Sadrian# The following is pretty nearly a generic crunchgen-handling makefile 32215226Sadrian# 33215226Sadrian 34289735SbdreweryCONF= ${PROG}.conf 35289735SbdreweryOUTMK= ${PROG}.mk 36289735SbdreweryOUTC= ${PROG}.c 37289735SbdreweryOUTPUTS=${OUTMK} ${OUTC} ${PROG}.cache 38215226SadrianCRUNCHOBJS= ${.OBJDIR} 39289735Sbdrewery.if defined{MAKEOBJDIRPREFIX} 40215226SadrianCANONICALOBJDIR:= ${MAKEOBJDIRPREFIX}${.CURDIR} 41289735Sbdrewery.elif defined{MAKEOBJDIR} && ${MAKEOBJDIR:M/*} != "" 42289735SbdreweryCANONICALOBJDIR:= ${MAKEOBJDIR} 43215226Sadrian.else 44215226SadrianCANONICALOBJDIR:= /usr/obj${.CURDIR} 45215226Sadrian.endif 46289735SbdreweryCRUNCH_GENERATE_LINKS?= yes 47215226Sadrian 48289735SbdreweryCLEANFILES+= ${CONF} *.o *.lo *.c *.mk *.cache *.a *.h 49215226Sadrian 50251512Semaste# Don't try to extract debug info from ${PROG}. 51289735SbdreweryMK_DEBUG_FILES= no 52251512Semaste 53215226Sadrian# Program names and their aliases contribute hardlinks to 'rescue' executable, 54215226Sadrian# except for those that get suppressed. 55289735Sbdrewery.for D in ${CRUNCH_SRCDIRS} 56289735Sbdrewery.for P in ${CRUNCH_PROGS_${D}} 57215226Sadrian.ifdef CRUNCH_SRCDIR_${P} 58289735Sbdrewery${OUTPUTS}: ${CRUNCH_SRCDIR_${P}}/Makefile 59215226Sadrian.else 60289735Sbdrewery${OUTPUTS}: ${.CURDIR}/../../${D}/${P}/Makefile 61215226Sadrian.endif 62229658Sadrian.if ${CRUNCH_GENERATE_LINKS} == "yes" 63215413Sadrian.ifndef CRUNCH_SUPPRESS_LINK_${P} 64289735SbdreweryLINKS+= ${BINDIR}/${PROG} ${BINDIR}/${P} 65215413Sadrian.endif 66289735Sbdrewery.for A in ${CRUNCH_ALIAS_${P}} 67215413Sadrian.ifndef CRUNCH_SUPPRESS_LINK_${A} 68289735SbdreweryLINKS+= ${BINDIR}/${PROG} ${BINDIR}/${A} 69215413Sadrian.endif 70215226Sadrian.endfor 71229658Sadrian.endif 72215226Sadrian.endfor 73215413Sadrian.endfor 74215226Sadrian 75289735Sbdreweryall: ${PROG} 76289735Sbdreweryexe: ${PROG} 77215226Sadrian 78289735Sbdrewery${CONF}: Makefile 79289735Sbdrewery echo \# Auto-generated, do not edit >${.TARGET} 80215226Sadrian.ifdef CRUNCH_BUILDOPTS 81289735Sbdrewery echo buildopts ${CRUNCH_BUILDOPTS} >>${.TARGET} 82215226Sadrian.endif 83215226Sadrian.ifdef CRUNCH_LIBS 84289735Sbdrewery echo libs ${CRUNCH_LIBS} >>${.TARGET} 85215226Sadrian.endif 86215226Sadrian.ifdef CRUNCH_SHLIBS 87289735Sbdrewery echo libs_so ${CRUNCH_SHLIBS} >>${.TARGET} 88215226Sadrian.endif 89289735Sbdrewery.for D in ${CRUNCH_SRCDIRS} 90289735Sbdrewery.for P in ${CRUNCH_PROGS_${D}} 91289735Sbdrewery echo progs ${P} >>${.TARGET} 92215226Sadrian.ifdef CRUNCH_SRCDIR_${P} 93289735Sbdrewery echo special ${P} srcdir ${CRUNCH_SRCDIR_${P}} >>${.TARGET} 94215226Sadrian.else 95289735Sbdrewery echo special ${P} srcdir ${.CURDIR}/../../${D}/${P} >>${.TARGET} 96215226Sadrian.endif 97215226Sadrian.ifdef CRUNCH_BUILDOPTS_${P} 98289735Sbdrewery echo special ${P} buildopts DIRPRFX=${DIRPRFX}${P}/ \ 99289735Sbdrewery ${CRUNCH_BUILDOPTS_${P}} >>${.TARGET} 100215226Sadrian.else 101289735Sbdrewery echo special ${P} buildopts DIRPRFX=${DIRPRFX}${P}/ >>${.TARGET} 102215226Sadrian.endif 103289735Sbdrewery.for A in ${CRUNCH_ALIAS_${P}} 104289735Sbdrewery echo ln ${P} ${A} >>${.TARGET} 105215226Sadrian.endfor 106215226Sadrian.endfor 107215226Sadrian.endfor 108215226Sadrian 109284341SsjgCRUNCHGEN?= crunchgen 110289731SbdreweryCRUNCHENV?= MK_TESTS=no 111289735Sbdrewery.ORDER: ${OUTPUTS} objs 112289735Sbdrewery${OUTPUTS}: ${CONF} .META 113289735Sbdrewery MAKE=${MAKE} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${CRUNCHGEN} -fq \ 114289735Sbdrewery -m ${OUTMK} -c ${OUTC} ${CONF} 115215226Sadrian 116289731Sbdrewery# These 2 targets cannot use .MAKE since they depend on the generated 117289731Sbdrewery# ${OUTMK} above. 118289735Sbdrewery${PROG}: ${OUTPUTS} objs 119289735Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f ${OUTMK} exe 120215226Sadrian 121289735Sbdreweryobjs: ${OUTMK} 122289735Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f ${OUTMK} objs 123215226Sadrian 124215226Sadrian# <sigh> Someone should replace the bin/csh and bin/sh build-tools with 125215226Sadrian# shell scripts so we can remove this nonsense. 126289735Sbdrewery.for _tool in ${CRUNCH_BUILDTOOLS} 127289734Sbdrewerybuild-tools-${_tool}: 128289735Sbdrewery ${_+_}cd ${.CURDIR}/../../${_tool}; \ 129289734Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} obj; \ 130289734Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} build-tools 131289734Sbdrewerybuild-tools: build-tools-${_tool} 132215226Sadrian.endfor 133215226Sadrian 134215226Sadrian# Use a separate build tree to hold files compiled for this crunchgen binary 135215226Sadrian# Yes, this does seem to partly duplicate bsd.subdir.mk, but I can't 136215226Sadrian# get that to cooperate with bsd.prog.mk. Besides, many of the standard 137215226Sadrian# targets should NOT be propagated into the components. 138289734Sbdrewery.for __target in clean cleandepend cleandir obj objlink 139289735Sbdrewery.for D in ${CRUNCH_SRCDIRS} 140289735Sbdrewery.for P in ${CRUNCH_PROGS_${D}} 141215226Sadrian.ifdef CRUNCH_SRCDIR_${P} 142289735Sbdrewery__dir= ${CRUNCH_SRCDIR_${P}} 143215226Sadrian.else 144289734Sbdrewery__dir= ${.CURDIR}/../../${D}/${P} 145289734Sbdrewery.endif 146289734Sbdrewery${__target}_crunchdir_${P}: .PHONY .MAKE 147289734Sbdrewery ${_+_}cd ${__dir} && \ 148289731Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \ 149289734Sbdrewery DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${__target} 150289734Sbdrewery${__target}: ${__target}_crunchdir_${P} 151215226Sadrian.endfor 152215226Sadrian.endfor 153289734Sbdrewery.endfor 154215226Sadrian 155215226Sadrianclean: 156215226Sadrian rm -f ${CLEANFILES} 157289735Sbdrewery ${_+_}if [ -e ${.OBJDIR}/${OUTMK} ]; then \ 158289735Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} \ 159289735Sbdrewery -f ${OUTMK} clean; \ 160215226Sadrian fi 161