[PATCH] Makefile: make u-boot-initial-env target depend explicitly on scripts_basic

Simon Glass sjg at chromium.org
Wed Oct 4 04:10:54 CEST 2023


On Tue, 3 Oct 2023 at 04:02, Rasmus Villemoes
<rasmus.villemoes at prevas.dk> wrote:
>
> We're seeing sporadic errors like
>
>   ENVC    include/generated/env.txt
>   HOSTCC  scripts/basic/fixdep
>   ENVP    include/generated/env.in
>   ENVT    include/generated/environment.h
>   HOSTCC  tools/printinitialenv
> /bin/sh: 1: scripts/basic/fixdep: not found
> make[1]: *** [scripts/Makefile.host:95: tools/printinitialenv] Error 127
> make[1]: *** Deleting file 'tools/printinitialenv'
> make: *** [Makefile:2446: u-boot-initial-env] Error 2
> make: *** Waiting for unfinished jobs....
>
> where sometimes the "fixdep: not found" is instead "fixdep: Permission
> denied" and the Error 127 becomes 126.
>
> This smells like a race condition, and indeed it is: Currently,
> u-boot-initial-env is a prerequisite of the envtools target, which
> also lists scripts_basic as a prerequisite:
>
> envtools: u-boot-initial-env scripts_basic $(version_h) $(timestamp_h) tools/version.h
>         $(Q)$(MAKE) $(build)=tools/env
>
> However, the u-boot-initial-env rule involves building the
> printinitialenv helper, which in turn is built using an if_changed_dep
> rule. That means we must ensure scripts/basic/fixdep is built and
> ready before trying to build printinitialenv, i.e. the
> u-boot-initial-env rule itself must depend on the phony scripts_basic
> target.
>
> Signed-off-by: Rasmus Villemoes <rasmus.villemoes at prevas.dk>
> ---
>  Makefile | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>

Reviewed-by: Simon Glass <sjg at chromium.org>

I have wondered for a while if we could have a few tests of the form:

- build sandbox
- delete an output file
- build again
- check that the build succeeds and the file is there

Regards,
Simon


More information about the U-Boot mailing list