bsd.crunchgen.mk revision 289846
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 289846 2015-10-23 19:41:58Z 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} 39289737Sbdrewery.if defined(MAKEOBJDIRPREFIX) 40215226SadrianCANONICALOBJDIR:= ${MAKEOBJDIRPREFIX}${.CURDIR} 41289737Sbdrewery.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 53289846Sbdrewery# Set a default SRCDIR for each for simpler handling below. 54289846Sbdrewery.for D in ${CRUNCH_SRCDIRS} 55289846Sbdrewery.for P in ${CRUNCH_PROGS_${D}} 56289846SbdreweryCRUNCH_SRCDIR_${P}?= ${.CURDIR}/../../${D}/${P} 57289846Sbdrewery.endfor 58289846Sbdrewery.endfor 59289846Sbdrewery 60215226Sadrian# Program names and their aliases contribute hardlinks to 'rescue' executable, 61215226Sadrian# except for those that get suppressed. 62289735Sbdrewery.for D in ${CRUNCH_SRCDIRS} 63289735Sbdrewery.for P in ${CRUNCH_PROGS_${D}} 64289735Sbdrewery${OUTPUTS}: ${CRUNCH_SRCDIR_${P}}/Makefile 65229658Sadrian.if ${CRUNCH_GENERATE_LINKS} == "yes" 66215413Sadrian.ifndef CRUNCH_SUPPRESS_LINK_${P} 67289735SbdreweryLINKS+= ${BINDIR}/${PROG} ${BINDIR}/${P} 68215413Sadrian.endif 69289735Sbdrewery.for A in ${CRUNCH_ALIAS_${P}} 70215413Sadrian.ifndef CRUNCH_SUPPRESS_LINK_${A} 71289735SbdreweryLINKS+= ${BINDIR}/${PROG} ${BINDIR}/${A} 72215413Sadrian.endif 73215226Sadrian.endfor 74229658Sadrian.endif 75215226Sadrian.endfor 76215413Sadrian.endfor 77215226Sadrian 78289735Sbdreweryall: ${PROG} 79289735Sbdreweryexe: ${PROG} 80215226Sadrian 81289735Sbdrewery${CONF}: Makefile 82289735Sbdrewery echo \# Auto-generated, do not edit >${.TARGET} 83215226Sadrian.ifdef CRUNCH_BUILDOPTS 84289735Sbdrewery echo buildopts ${CRUNCH_BUILDOPTS} >>${.TARGET} 85215226Sadrian.endif 86215226Sadrian.ifdef CRUNCH_LIBS 87289735Sbdrewery echo libs ${CRUNCH_LIBS} >>${.TARGET} 88215226Sadrian.endif 89215226Sadrian.ifdef CRUNCH_SHLIBS 90289735Sbdrewery echo libs_so ${CRUNCH_SHLIBS} >>${.TARGET} 91215226Sadrian.endif 92289735Sbdrewery.for D in ${CRUNCH_SRCDIRS} 93289735Sbdrewery.for P in ${CRUNCH_PROGS_${D}} 94289735Sbdrewery echo progs ${P} >>${.TARGET} 95289735Sbdrewery echo special ${P} srcdir ${CRUNCH_SRCDIR_${P}} >>${.TARGET} 96215226Sadrian.ifdef CRUNCH_BUILDOPTS_${P} 97289735Sbdrewery echo special ${P} buildopts DIRPRFX=${DIRPRFX}${P}/ \ 98289735Sbdrewery ${CRUNCH_BUILDOPTS_${P}} >>${.TARGET} 99215226Sadrian.else 100289735Sbdrewery echo special ${P} buildopts DIRPRFX=${DIRPRFX}${P}/ >>${.TARGET} 101215226Sadrian.endif 102289735Sbdrewery.for A in ${CRUNCH_ALIAS_${P}} 103289735Sbdrewery echo ln ${P} ${A} >>${.TARGET} 104215226Sadrian.endfor 105215226Sadrian.endfor 106215226Sadrian.endfor 107215226Sadrian 108284341SsjgCRUNCHGEN?= crunchgen 109289731SbdreweryCRUNCHENV?= MK_TESTS=no 110289735Sbdrewery.ORDER: ${OUTPUTS} objs 111289735Sbdrewery${OUTPUTS}: ${CONF} .META 112289735Sbdrewery MAKE=${MAKE} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${CRUNCHGEN} -fq \ 113289735Sbdrewery -m ${OUTMK} -c ${OUTC} ${CONF} 114215226Sadrian 115289731Sbdrewery# These 2 targets cannot use .MAKE since they depend on the generated 116289731Sbdrewery# ${OUTMK} above. 117289735Sbdrewery${PROG}: ${OUTPUTS} objs 118289735Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f ${OUTMK} exe 119215226Sadrian 120289735Sbdreweryobjs: ${OUTMK} 121289735Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f ${OUTMK} objs 122215226Sadrian 123215226Sadrian# <sigh> Someone should replace the bin/csh and bin/sh build-tools with 124215226Sadrian# shell scripts so we can remove this nonsense. 125289735Sbdrewery.for _tool in ${CRUNCH_BUILDTOOLS} 126289734Sbdrewerybuild-tools-${_tool}: 127289735Sbdrewery ${_+_}cd ${.CURDIR}/../../${_tool}; \ 128289734Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} obj; \ 129289734Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} build-tools 130289734Sbdrewerybuild-tools: build-tools-${_tool} 131215226Sadrian.endfor 132215226Sadrian 133215226Sadrian# Use a separate build tree to hold files compiled for this crunchgen binary 134215226Sadrian# Yes, this does seem to partly duplicate bsd.subdir.mk, but I can't 135215226Sadrian# get that to cooperate with bsd.prog.mk. Besides, many of the standard 136215226Sadrian# targets should NOT be propagated into the components. 137289734Sbdrewery.for __target in clean cleandepend cleandir obj objlink 138289735Sbdrewery.for D in ${CRUNCH_SRCDIRS} 139289735Sbdrewery.for P in ${CRUNCH_PROGS_${D}} 140289734Sbdrewery${__target}_crunchdir_${P}: .PHONY .MAKE 141289846Sbdrewery ${_+_}cd ${CRUNCH_SRCDIR_${P}} && \ 142289731Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \ 143289734Sbdrewery DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${__target} 144289734Sbdrewery${__target}: ${__target}_crunchdir_${P} 145215226Sadrian.endfor 146215226Sadrian.endfor 147289734Sbdrewery.endfor 148215226Sadrian 149215226Sadrianclean: 150215226Sadrian rm -f ${CLEANFILES} 151289735Sbdrewery ${_+_}if [ -e ${.OBJDIR}/${OUTMK} ]; then \ 152289735Sbdrewery ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} \ 153289735Sbdrewery -f ${OUTMK} clean; \ 154215226Sadrian fi 155