Makefile: rm u-boot.cfg dependencies are missing

Prior to the previous patch, a freshly created .u-boot.cfg.cmd may not
correctly represent all dependencies for u-boot.cfg. The previous change
only solved this issue for fresh builds; when performing an incremental
build, the deficient .u-boot.cfg.cmd is already present, so u-boot.cfg
is not rebuilt, and hence .u-boot.cfg.cmd is not rebuilt with the correct
content.

Solve this by explicitly detecting when the dependency file .u-boot.cfg.d
has not been integrated into .u-boot.cfg.cmd, and force u-boot.cfg to be
rebuilt in this case by deleting it first. This is possible since
if_changed_dep will always delete .u-boot.cfg.d when it executes
successfully, so its presence means either that the previous build was
made by a source tree that contained a Makefile that didn't include the
previous patch, or that the build failed part way through executing
if_changed_dep for u-boot.cfg. Forcing a rebuild of u-boot.cfg is required
in the former case, and will cause no additional work in the latter case,
since the file would be rebuilt anyway for the same reason it was being
rebuilt by the previous build.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
This commit is contained in:
Stephen Warren 2016-09-19 12:20:26 -06:00 committed by Tom Rini
parent fcd29a4d0e
commit a6c1309782
2 changed files with 22 additions and 0 deletions

View File

@ -936,6 +936,17 @@ u-boot.sha1: u-boot.bin
u-boot.dis: u-boot
$(OBJDUMP) -d $< > $@
# If .u-boot.cfg.d is still present, then either:
# a) The previous build used a Makefile that used if_changed rather than
# if_changed_dep when building u-boot.cfg, and hence any later builds will
# be unaware of the dependencies for u-boot.cfg. In this case, we must
# delete u-boot.cfg to force it and .u-boot.cfg.cmd to be rebuilt the
# correct way.
# b) The previous build failed or was interrupted while building u-boot.cfg,
# so deleting u-boot.cfg isn't going to cause any additional work.
ifneq ($(wildcard $(obj)/.u-boot.cfg.d),)
unused := $(shell rm -f $(obj)/u-boot.cfg)
endif
u-boot.cfg: include/config.h FORCE
$(call if_changed_dep,cpp_cfg)

View File

@ -216,6 +216,17 @@ quiet_cmd_cpp_cfg = CFG $@
cmd_cpp_cfg = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) -ansi \
-DDO_DEPS_ONLY -D__ASSEMBLY__ -x assembler-with-cpp -P -dM -E -o $@ $<
# If .u-boot.cfg.d is still present, then either:
# a) The previous build used a Makefile that used if_changed rather than
# if_changed_dep when building u-boot.cfg, and hence any later builds will
# be unaware of the dependencies for u-boot.cfg. In this case, we must
# delete u-boot.cfg to force it and .u-boot.cfg.cmd to be rebuilt the
# correct way.
# b) The previous build failed or was interrupted while building u-boot.cfg,
# so deleting u-boot.cfg isn't going to cause any additional work.
ifneq ($(wildcard $(obj)/.$(SPL_BIN).d),)
unused := $(shell rm -f $(obj)/$(SPL_BIN).cfg)
endif
$(obj)/$(SPL_BIN).cfg: include/config.h FORCE
$(call if_changed_dep,cpp_cfg)