Rename META_MODE option to DIRDEPS_BUILD

This allows META_FILES option to be renamed META_MODE.
Also add META_COOKIE_TOUCH for use in targets that can benefit
from a cookie when in meta mode.

Differential Revision:	https://reviews.freebsd.org/D4153
Reviewed by:	bdrewery
This commit is contained in:
Simon J. Gerraty 2015-11-14 03:24:48 +00:00
parent ca298cac31
commit 948f327ee4
14 changed files with 73 additions and 61 deletions

View File

@ -106,7 +106,7 @@
# Note: we use this awkward construct to be compatible with FreeBSD's # Note: we use this awkward construct to be compatible with FreeBSD's
# old make used in 10.0 and 9.2 and earlier. # old make used in 10.0 and 9.2 and earlier.
.if defined(MK_META_MODE) && ${MK_META_MODE} == "yes" && !make(showconfig) .if defined(MK_DIRDEPS_BUILD) && ${MK_DIRDEPS_BUILD} == "yes" && !make(showconfig)
# targets/Makefile plays the role of top-level # targets/Makefile plays the role of top-level
.include "targets/Makefile" .include "targets/Makefile"
.else .else
@ -498,15 +498,15 @@ buildLINT:
# This makefile does not run in meta mode # This makefile does not run in meta mode
.MAKE.MODE= normal .MAKE.MODE= normal
# Normally the things we run from here don't either. # Normally the things we run from here don't either.
# Using -DWITH_META_FILES # Using -DWITH_META_MODE
# we can buildworld with meta files created which are useful # we can buildworld with meta files created which are useful
# for debugging, but without any of the rest of a meta mode build. # for debugging, but without any of the rest of a meta mode build.
MK_META_MODE= no MK_DIRDEPS_BUILD= no
MK_STAGING= no MK_STAGING= no
# tell meta.autodep.mk to not even think about updating anything. # tell meta.autodep.mk to not even think about updating anything.
UPDATE_DEPENDFILE= NO UPDATE_DEPENDFILE= NO
.if !make(showconfig) .if !make(showconfig)
.export MK_META_MODE MK_STAGING UPDATE_DEPENDFILE .export MK_DIRDEPS_BUILD MK_STAGING UPDATE_DEPENDFILE
.endif .endif
.if make(universe) .if make(universe)
@ -516,4 +516,4 @@ MAKE_JOB_ERROR_TOKEN= no
.endif .endif
.endif # bmake .endif # bmake
.endif # META_MODE .endif # DIRDEPS_BUILD

View File

@ -166,7 +166,7 @@ compat:
mtree -deU ${MTREE_FOLLOWS_SYMLINKS} \ mtree -deU ${MTREE_FOLLOWS_SYMLINKS} \
-f ${.CURDIR}/../etc/mtree/BSD.include.dist \ -f ${.CURDIR}/../etc/mtree/BSD.include.dist \
-p ${DESTDIR}${INCLUDEDIR} > /dev/null -p ${DESTDIR}${INCLUDEDIR} > /dev/null
.if ${MK_META_MODE} == "yes" .if ${MK_DIRDEPS_BUILD} == "yes"
@touch ${.TARGET} @touch ${.TARGET}
.endif .endif
@ -255,7 +255,7 @@ copies:
cd ${.CURDIR}/../sys/teken; \ cd ${.CURDIR}/../sys/teken; \
${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 teken.h \ ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 teken.h \
${DESTDIR}${INCLUDEDIR}/teken ${DESTDIR}${INCLUDEDIR}/teken
.if ${MK_META_MODE} == "yes" .if ${MK_DIRDEPS_BUILD} == "yes"
@touch ${.OBJDIR}/${.TARGET} @touch ${.OBJDIR}/${.TARGET}
.endif .endif
@ -372,7 +372,7 @@ symlinks:
ln -fs ../../../sys/rpc/$$h \ ln -fs ../../../sys/rpc/$$h \
${DESTDIR}${INCLUDEDIR}/rpc; \ ${DESTDIR}${INCLUDEDIR}/rpc; \
done done
.if ${MK_META_MODE} == "yes" .if ${MK_DIRDEPS_BUILD} == "yes"
@touch ${.OBJDIR}/${.TARGET} @touch ${.OBJDIR}/${.TARGET}
.endif .endif

View File

@ -163,7 +163,7 @@ beforedepend: ${DHDRS}
beforebuild: ${DHDRS} beforebuild: ${DHDRS}
.endif .endif
.if ${MK_META_MODE} == "yes" .if ${MK_DIRDEPS_BUILD} == "yes"
.include <meta.autodep.mk> .include <meta.autodep.mk>
# this depend: bypasses that below # this depend: bypasses that below
# the dependency helps when bootstrapping # the dependency helps when bootstrapping

View File

@ -49,7 +49,7 @@ STANDALONE_SUBDIR_TARGETS?= obj checkdpadd clean cleandepend cleandir \
.include <bsd.init.mk> .include <bsd.init.mk>
.if !defined(NEED_SUBDIR) .if !defined(NEED_SUBDIR)
.if ${.MAKE.LEVEL} == 0 && ${MK_META_MODE} == "yes" && !empty(SUBDIR) && !(make(clean*) || make(destroy*)) .if ${.MAKE.LEVEL} == 0 && ${MK_DIRDEPS_BUILD} == "yes" && !empty(SUBDIR) && !(make(clean*) || make(destroy*))
.include <meta.subdir.mk> .include <meta.subdir.mk>
# ignore this # ignore this
_SUBDIR: _SUBDIR:

View File

@ -2,7 +2,7 @@
# local configuration specific to meta mode # local configuration specific to meta mode
# XXX some of this should be in meta.sys.mk # XXX some of this should be in meta.sys.mk
# we assume that MK_META_MODE=yes # we assume that MK_DIRDEPS_BUILD=yes
# we need this until there is an alternative # we need this until there is an alternative
MK_INSTALL_AS_USER= yes MK_INSTALL_AS_USER= yes

View File

@ -1,6 +1,6 @@
# $FreeBSD$ # $FreeBSD$
.if ${MK_META_MODE} == "yes" .if ${MK_DIRDEPS_BUILD} == "yes"
MAKE_PRINT_VAR_ON_ERROR+= \ MAKE_PRINT_VAR_ON_ERROR+= \
.CURDIR \ .CURDIR \
.MAKE \ .MAKE \
@ -23,3 +23,15 @@ MAKE_PRINT_VAR_ON_ERROR += .MAKE.MAKEFILES .PATH
.endif .endif
.include "src.sys.mk" .include "src.sys.mk"
.if ${.MAKE.MODE:Unormal:Mmeta*} != ""
# we can afford to use cookies to prevent some targets
# re-running needlessly
META_COOKIE_TOUCH= touch ${COOKIE.${.TARGET}:U${.OBJDIR}/${.TARGET}}
# some targets need to be .PHONY - but not in meta mode
META_NOPHONY=
.else
META_COOKIE_TOUCH=
META_NOPHONY= .PHONY
.endif

View File

@ -20,14 +20,14 @@ MACHINE_CPUARCH=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm
# Some options we need now # Some options we need now
__DEFAULT_NO_OPTIONS= \ __DEFAULT_NO_OPTIONS= \
DIRDEPS_CACHE \ DIRDEPS_CACHE \
DIRDEPS_BUILD \
META_MODE \ META_MODE \
META_FILES \
__DEFAULT_DEPENDENT_OPTIONS= \ __DEFAULT_DEPENDENT_OPTIONS= \
AUTO_OBJ/META_MODE \ AUTO_OBJ/DIRDEPS_BUILD \
STAGING/META_MODE \ STAGING/DIRDEPS_BUILD \
SYSROOT/META_MODE SYSROOT/DIRDEPS_BUILD
__ENV_ONLY_OPTIONS:= \ __ENV_ONLY_OPTIONS:= \
${__DEFAULT_NO_OPTIONS} \ ${__DEFAULT_NO_OPTIONS} \
@ -43,9 +43,9 @@ __ENV_ONLY_OPTIONS:= \
.include <bsd.mkopt.mk> .include <bsd.mkopt.mk>
.if ${MK_META_MODE} == "yes" .if ${MK_DIRDEPS_BUILD} == "yes"
.sinclude <meta.sys.mk> .sinclude <meta.sys.mk>
.elif ${MK_META_FILES} == "yes" && defined(.MAKEFLAGS) .elif ${MK_META_MODE} == "yes" && defined(.MAKEFLAGS)
.if ${.MAKEFLAGS:M-B} == "" .if ${.MAKEFLAGS:M-B} == ""
.MAKE.MODE= meta verbose .MAKE.MODE= meta verbose
.endif .endif

View File

@ -0,0 +1,37 @@
.\" $FreeBSD$
Enable building in meta mode.
This is an experimental build feature.
For details see
http://www.crufty.net/sjg/docs/freebsd-meta-mode.htm.
.Pp
The build is driven by dirdeps.mk using
.Va DIRDEPS
stored in
Makefile.depend files found in each directory.
.Pp
The build can be started from anywhere, and behaves the same.
The initial instance of
.Xr make 1
recursively reads
.Va DIRDEPS
from Makefile.depend
computing a graph of tree dependencies from the current origin.
Setting
.Va NO_DIRDEPS
will skip checking dirdep dependencies and will only build in the current
directory.
.Pp
As each target is made
.Xr make 1
produces a meta file which is used to capture (and compare)
the command line,
as well as any command output.
If
.Xr filemon 4
is available the meta file will also capture a record of files
used to produce the target by tracking syscalls.
.Pp
The build will hide commands ran unless
.Va NO_SILENT
is defined.
.Pp

View File

@ -2,4 +2,4 @@
Cache result of dirdeps.mk which can save significant time Cache result of dirdeps.mk which can save significant time
for subsequent builds. for subsequent builds.
Depends on Depends on
.Va WITH_META_MODE . .Va WITH_DIRDEPS_BUILD .

View File

@ -1,3 +0,0 @@
.\" $FreeBSD$
Create meta files during non META_MODE build.
The meta files can be useful for debugging.

View File

@ -1,37 +1,3 @@
.\" $FreeBSD$ .\" $FreeBSD$
Enable building in meta mode. Create meta files when not doing DIRDEPS_BUILD.
This is an experimental build feature. The meta files can be useful for debugging.
For details see
http://www.crufty.net/sjg/docs/freebsd-meta-mode.htm.
.Pp
The build is driven by dirdeps.mk using
.Va DIRDEPS
stored in
Makefile.depend files found in each directory.
.Pp
The build can be started from anywhere, and behaves the same.
The initial instance of
.Xr make 1
recursively reads
.Va DIRDEPS
from Makefile.depend
computing a graph of tree dependencies from the current origin.
Setting
.Va NO_DIRDEPS
will skip checking dirdep dependencies and will only build in the current
directory.
.Pp
As each target is made
.Xr make 1
produces a meta file which is used to capture (and compare)
the command line,
as well as any command output.
If
.Xr filemon 4
is available the meta file will also capture a record of files
used to produce the target by tracking syscalls.
.Pp
The build will hide commands ran unless
.Va NO_SILENT
is defined.
.Pp

View File

@ -4,4 +4,4 @@ This can be best thought of as auto-install to
.Va DESTDIR .Va DESTDIR
with some extra meta data to ensure dependencies can be tracked. with some extra meta data to ensure dependencies can be tracked.
Depends on Depends on
.Va WITH_META_MODE . .Va WITH_DIRDEPS_BUILD .

View File

@ -1,4 +1,4 @@
.\" $FreeBSD$ .\" $FreeBSD$
Enable use of sysroot during build. Enable use of sysroot during build.
Depends on Depends on
.Va WITH_META_MODE . .Va WITH_DIRDEPS_BUILD .

View File

@ -16,6 +16,6 @@ llib-lstdc.ln: llib-lstdc
.include <bsd.prog.mk> .include <bsd.prog.mk>
.if ${MK_META_MODE} == "yes" .if ${MK_DIRDEPS_BUILD} == "yes"
LINTFLAGS+= -I${STAGE_INCLUDEDIR} LINTFLAGS+= -I${STAGE_INCLUDEDIR}
.endif .endif