bsd.crunchgen.mk revision 296121
1215226Sadrian################################################################# 2215226Sadrian# 3289870Sbdrewery# Generate crunched binaries using crunchgen(1). 4289870Sbdrewery# 5215226Sadrian# General notes: 6215226Sadrian# 7215226Sadrian# A number of Make variables are used to generate the crunchgen config file. 8215226Sadrian# 9215226Sadrian# CRUNCH_SRCDIRS: lists directories to search for included programs 10215226Sadrian# CRUNCH_PROGS: lists programs to be included 11215226Sadrian# CRUNCH_LIBS: libraries to statically link with 12215226Sadrian# CRUNCH_SHLIBS: libraries to dynamically link with 13215226Sadrian# CRUNCH_BUILDOPTS: generic build options to be added to every program 14215226Sadrian# CRUNCH_BUILDTOOLS: lists programs that need build tools built in the 15215226Sadrian# local architecture. 16215226Sadrian# 17215226Sadrian# Special options can be specified for individual programs 18289735Sbdrewery# CRUNCH_SRCDIR_${P}: base source directory for program ${P} 19289735Sbdrewery# CRUNCH_BUILDOPTS_${P}: additional build options for ${P} 20289735Sbdrewery# CRUNCH_ALIAS_${P}: additional names to be used for ${P} 21215226Sadrian# 22215226Sadrian# By default, any name appearing in CRUNCH_PROGS or CRUNCH_ALIAS_${P} 23215226Sadrian# will be used to generate a hard link to the resulting binary. 24215226Sadrian# Specific links can be suppressed by setting 25289735Sbdrewery# CRUNCH_SUPPRESS_LINK_${NAME} to 1. 26215226Sadrian# 27229658Sadrian# If CRUNCH_GENERATE_LINKS is set to no, no links will be generated. 28229658Sadrian# 29215226Sadrian 30215226Sadrian# $FreeBSD: head/share/mk/bsd.crunchgen.mk 296121 2016-02-26 22:13:48Z bdrewery $ 31215226Sadrian 32215226Sadrian################################################################## 33215226Sadrian# The following is pretty nearly a generic crunchgen-handling makefile 34215226Sadrian# 35215226Sadrian 36289735SbdreweryCONF= ${PROG}.conf 37289735SbdreweryOUTMK= ${PROG}.mk 38289735SbdreweryOUTC= ${PROG}.c 39289735SbdreweryOUTPUTS=${OUTMK} ${OUTC} ${PROG}.cache 40215226SadrianCRUNCHOBJS= ${.OBJDIR} 41289735SbdreweryCRUNCH_GENERATE_LINKS?= yes 42215226Sadrian 43289735SbdreweryCLEANFILES+= ${CONF} *.o *.lo *.c *.mk *.cache *.a *.h 44215226Sadrian 45251512Semaste# Don't try to extract debug info from ${PROG}. 46289735SbdreweryMK_DEBUG_FILES= no 47251512Semaste 48289846Sbdrewery# Set a default SRCDIR for each for simpler handling below. 49289846Sbdrewery.for D in ${CRUNCH_SRCDIRS} 50289846Sbdrewery.for P in ${CRUNCH_PROGS_${D}} 51289846SbdreweryCRUNCH_SRCDIR_${P}?= ${.CURDIR}/../../${D}/${P} 52289846Sbdrewery.endfor 53289846Sbdrewery.endfor 54289846Sbdrewery 55215226Sadrian# Program names and their aliases contribute hardlinks to 'rescue' executable, 56215226Sadrian# except for those that get suppressed. 57289735Sbdrewery.for D in ${CRUNCH_SRCDIRS} 58289735Sbdrewery.for P in ${CRUNCH_PROGS_${D}} 59289735Sbdrewery${OUTPUTS}: ${CRUNCH_SRCDIR_${P}}/Makefile 60229658Sadrian.if ${CRUNCH_GENERATE_LINKS} == "yes" 61215413Sadrian.ifndef CRUNCH_SUPPRESS_LINK_${P} 62289735SbdreweryLINKS+= ${BINDIR}/${PROG} ${BINDIR}/${P} 63215413Sadrian.endif 64289735Sbdrewery.for A in ${CRUNCH_ALIAS_${P}} 65215413Sadrian.ifndef CRUNCH_SUPPRESS_LINK_${A} 66289735SbdreweryLINKS+= ${BINDIR}/${PROG} ${BINDIR}/${A} 67215413Sadrian.endif 68215226Sadrian.endfor 69229658Sadrian.endif 70215226Sadrian.endfor 71215413Sadrian.endfor 72215226Sadrian 73296121Sbdrewery.if !defined(_SKIP_BUILD) 74289735Sbdreweryall: ${PROG} 75296121Sbdrewery.endif 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} 92289735Sbdrewery echo special ${P} srcdir ${CRUNCH_SRCDIR_${P}} >>${.TARGET} 93215226Sadrian.ifdef CRUNCH_BUILDOPTS_${P} 94289735Sbdrewery echo special ${P} buildopts DIRPRFX=${DIRPRFX}${P}/ \ 95289735Sbdrewery ${CRUNCH_BUILDOPTS_${P}} >>${.TARGET} 96215226Sadrian.else 97289735Sbdrewery echo special ${P} buildopts DIRPRFX=${DIRPRFX}${P}/ >>${.TARGET} 98215226Sadrian.endif 99289735Sbdrewery.for A in ${CRUNCH_ALIAS_${P}} 100289735Sbdrewery echo ln ${P} ${A} >>${.TARGET} 101215226Sadrian.endfor 102215226Sadrian.endfor 103215226Sadrian.endfor 104215226Sadrian 105284341SsjgCRUNCHGEN?= crunchgen 106289731SbdreweryCRUNCHENV?= MK_TESTS=no 107289735Sbdrewery.ORDER: ${OUTPUTS} objs 108289735Sbdrewery${OUTPUTS}: ${CONF} .META 109289735Sbdrewery MAKE=${MAKE} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${CRUNCHGEN} -fq \ 110289735Sbdrewery -m ${OUTMK} -c ${OUTC} ${CONF} 111215226Sadrian 112289731Sbdrewery# These 2 targets cannot use .MAKE since they depend on the generated 113289731Sbdrewery# ${OUTMK} above. 114289735Sbdrewery${PROG}: ${OUTPUTS} objs 115289735Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f ${OUTMK} exe 116215226Sadrian 117289735Sbdreweryobjs: ${OUTMK} 118289735Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f ${OUTMK} objs 119215226Sadrian 120215226Sadrian# <sigh> Someone should replace the bin/csh and bin/sh build-tools with 121215226Sadrian# shell scripts so we can remove this nonsense. 122289735Sbdrewery.for _tool in ${CRUNCH_BUILDTOOLS} 123289734Sbdrewerybuild-tools-${_tool}: 124289735Sbdrewery ${_+_}cd ${.CURDIR}/../../${_tool}; \ 125289734Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} obj; \ 126289734Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} build-tools 127289734Sbdrewerybuild-tools: build-tools-${_tool} 128215226Sadrian.endfor 129215226Sadrian 130215226Sadrian# Use a separate build tree to hold files compiled for this crunchgen binary 131215226Sadrian# Yes, this does seem to partly duplicate bsd.subdir.mk, but I can't 132215226Sadrian# get that to cooperate with bsd.prog.mk. Besides, many of the standard 133215226Sadrian# targets should NOT be propagated into the components. 134289734Sbdrewery.for __target in clean cleandepend cleandir obj objlink 135289735Sbdrewery.for D in ${CRUNCH_SRCDIRS} 136289735Sbdrewery.for P in ${CRUNCH_PROGS_${D}} 137289734Sbdrewery${__target}_crunchdir_${P}: .PHONY .MAKE 138289846Sbdrewery ${_+_}cd ${CRUNCH_SRCDIR_${P}} && \ 139289731Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \ 140289734Sbdrewery DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${__target} 141289734Sbdrewery${__target}: ${__target}_crunchdir_${P} 142215226Sadrian.endfor 143215226Sadrian.endfor 144289734Sbdrewery.endfor 145215226Sadrian 146215226Sadrianclean: 147215226Sadrian rm -f ${CLEANFILES} 148289735Sbdrewery ${_+_}if [ -e ${.OBJDIR}/${OUTMK} ]; then \ 149289735Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} \ 150289735Sbdrewery -f ${OUTMK} clean; \ 151215226Sadrian fi 152