NetBSD/distrib/common/Makefile.crunch
christos 128e5f5e67 1. Remove all the special handling of variables (-d -p -P -s -S) that
were dealing with DBG (-d) LDSTATIC/NOPIE (-p), and the rest with
   disabling/enabling sanitizers.
2. Use emalloc/estrdup for all the allocators instead of only some cases.
3. Add -V varspec which passes variables on the command line (as DBG
   and LDSTATIC used to be passed before) instead of appending them
   to the on-the-fly Makefile using -v varspec.
4. Change the distrib and rescue Makefiles to use -V instead of the removed
   flags.

The motivation of this is to make variable handling consistent, less magical,
and remove the need for changing crunchgen each time we want to add disabling
an option by default.

(as proposed in tech-toolchain)
2019-12-29 18:26:16 +00:00

89 lines
2.4 KiB
Makefile

# $NetBSD: Makefile.crunch,v 1.26 2019/12/29 18:26:16 christos Exp $
#
# Makefile snippet to build a crunchgen(1)ed binary from the provided lists
#
# Required variables:
# NETBSDSRCDIR top level of src tree (set by <bsd.own.mk>)
# CRUNCHBIN name of crunchgen(1)ed binary
# LISTS list file(s) to use
#
# Optional variables:
# SMALLPROG if != 0, add SMALLPROG=1 to CRUNCHENV. [default: 1]
# SMALLPROG_INET6 if != 0 and SMALLPROG != 0, and ${USE_INET6} != "no",
# add SMALLPROG_INET6=1 to CRUNCHENV. [default: 0]
# CRUNCHENV environment to pass to crunchgen(1) and when building
# the crunched program with make(1) (as command line
# variables, to override any user provided environment
# or make(1) cmdline vars).
# CRUNCHGEN_FLAGS extra options to crunchgen(1)
# DESTDIR destination directory
# PARSELISTENV environment variables to set for parselist.awk
#
# Variables modified by this:
# CRUNCHENV may get SMALLPROG=1 or SMALLPROG_INET6=1 added
#
.if !defined(_MAKEFILE_CRUNCH_)
_MAKEFILE_CRUNCH_=1
DBG?=-Os
CRUNCHGEN_FLAGS?=\
-V LDSTATIC=-static \
-V DBG="${DBG}" \
-V NOMAN= \
-V NOLIBCSANITIZER= \
-V NOSANITIZER= \
-V NOPIE= \
-V NOSSP= \
-V NOFORT=
CRUNCHENV+= AWK=${TOOL_AWK:Q}
SMALLPROG?= 1
SMALLPROG_INET6?= 0
.if ${SMALLPROG} # {
CRUNCHENV+= SMALLPROG=1
.if ${SMALLPROG_INET6} && (${USE_INET6} != "no")
CRUNCHENV+= SMALLPROG_INET6=1
.endif
.endif # }
.include "${DISTRIBDIR}/common/Makefile.parselist"
.PHONY: ${CRUNCHBIN}
${CRUNCHBIN}: ${CRUNCHBIN}.mk ${CRUNCHBIN}.cache ${CRUNCHBIN}.c
${MAKE} ${CRUNCHENV} -f ${CRUNCHBIN}.mk ${CRUNCHBIN}.crunched
${CRUNCHBIN}.c: ${CRUNCHBIN}.mk
[ ! -f ${.TARGET} ] || touch ${.TARGET}
${CRUNCHBIN}.cache: ${CRUNCHBIN}.mk
[ ! -f ${.TARGET} ] || touch ${.TARGET}
CRUNCHGEN != command -v ${TOOL_CRUNCHGEN:[-1]} || echo
${CRUNCHBIN}.mk: ${CRUNCHBIN}.conf ${CRUNCHGEN}
${CRUNCHENV} ${TOOL_CRUNCHGEN} -f -D ${NETBSDSRCDIR} \
-L ${DESTDIR}/usr/lib -q ${CRUNCHGEN_FLAGS} ${CRUNCHBIN}.conf
${CRUNCHBIN}.conf: ${LISTS} ${PARSELISTDEP}
-rm -f ${.TARGET} ${.TARGET}.tmp
${PARSELIST} -v mode=crunch ${LISTS} > ${.TARGET}.tmp \
&& mv ${.TARGET}.tmp ${.TARGET}
CLEANFILES+= ${CRUNCHBIN} ${CRUNCHBIN}.conf ${CRUNCHBIN}.conf.tmp \
${CRUNCHBIN}.cache *.o *.cro *.c
clean cleandir distclean: cleancrunchgen
.PHONY: cleancrunchgen
cleancrunchgen:
if [ -f ${CRUNCHBIN}.mk ]; then \
${MAKE} -f ${CRUNCHBIN}.mk clean; \
fi
rm -f ${CRUNCHBIN}.mk
.endif # _MAKEFILE_CRUNCH_