mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: Sascha Hauer <s.hauer@pengutronix.de>,
	Barebox List <barebox@lists.infradead.org>
Subject: Re: [PATCH] firmware: handle firmware files being links correctly
Date: Wed, 17 Sep 2025 12:21:57 +0200	[thread overview]
Message-ID: <70e5f030-a3c5-4fa8-af71-99084828d56e@pengutronix.de> (raw)
In-Reply-To: <20250917095834.2727068-1-s.hauer@pengutronix.de>

On 9/17/25 11:58 AM, Sascha Hauer wrote:
> Sometimes firmware files can be links. When rebuilding barebox correctly
> rebuilds the firmware when file the link points to is updated, but the
> firmware is not rebuilt when the link itself is changed to link to
> another file.

This is surprising. I though GNU make looks at the mtime of the destination.

> Fix this by including the sha256sum directly in the generated assembly
> file by using .byte rather than generating a file containing the
> binary sha256sum and include that using .incbin. This way the generated
> assembly file for sure changes when the firmware file changes and it's
> rebuilt when necessary (and not when it's not).

The if_changed in just one of the $(if branches looks a bit strange, so
it's good to drop it IMO..

> 
> Reproducer:
> 
> export ARCH=arm
> make imx_v8_defconfig
> echo foo > firmware/foo
> echo bar > firmware/bar
> ln -sf foo firmware/imx8mm-bl31.bin
> make
> 
> The following should rebuild the barebox image including the updated
> firmware, but doesn't:
> 
> ln -sf bar firmware/imx8mm-bl31.bin
> make
> 
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>

Reviewed-by: Ahmad Fatoum <a.fatoum@pengutronix.de>

But see suggestion below.

> ---
>  firmware/Makefile | 16 +++++-----------
>  1 file changed, 5 insertions(+), 11 deletions(-)
> 
> diff --git a/firmware/Makefile b/firmware/Makefile
> index 0c9da2996f..df9f277475 100644
> --- a/firmware/Makefile
> +++ b/firmware/Makefile
> @@ -57,6 +57,8 @@ FWSTR     = $(subst /,_,$(subst .,_,$(subst -,_,$(FWNAME))))
>  FWNAME_EXISTS = $(if $(wildcard $(FIRMWARE_DIR)/$(FWNAME)),1,0)
>  
>  filechk_fwbin = { \
> +	SHA=$$(sha256sum $(FIRMWARE_DIR)/$(FWNAME) | sed 's/ .*$$//;s/../0x&, /g;s/, $$//') ;\
> +	\
>  	echo "/* Generated by $(src)/Makefile */"		;\
>  	echo "\#include <asm-generic/pointer.h>"		;\
>  	echo ".section .note.GNU-stack,\"\",%progbits"		;\
> @@ -80,7 +82,7 @@ filechk_fwbin = { \
>  	echo "    .p2align ASM_LGPTR"				;\
>  	echo ".global _fw_$(FWSTR)_sha_start"			;\
>  	echo "_fw_$(FWSTR)_sha_start:"				;\
> -	echo "    .incbin \"$(fwobjdir)/$(FWNAME).sha.bin\""	;\
> +	echo "    .byte $${SHA}"				;\
>  	echo ".global _fw_$(FWSTR)_sha_end"			;\

How about we add here an

.if _fw_$(FWSTR)_sha_start - _fw_$(FWSTR)_sha_end
	.err
	.warnig "sha256sum empty"
.endif

As .byte doesn't require an argument, this would ensure breakage to be
noticed at compile time.

Cheers,
Ahmad

>  }
> @@ -89,20 +91,12 @@ filechk_fwbin_ext = { \
>  	$(filechk_fwbin)					;\
>  }
>  
> -$(obj)/%.gen.S: $(obj)/%.sha.bin FORCE
> +$(obj)/%.gen.S: FORCE
>  	$(call filechk,fwbin,.rodata.$(FWSTR),)
>  
> -$(obj)/%.extgen.S: $(obj)/%.sha.bin FORCE
> +$(obj)/%.extgen.S: FORCE
>  	$(call filechk,fwbin_ext,.pblext.$(FWSTR),a)
>  
> -$(obj)/%.sha.bin: $(obj)/%.sum FORCE
> -	$(call if_changed,sha256bin)
> -
> -$(obj)/%.sum: FORCE
> -	$(if $(wildcard $(FIRMWARE_DIR)/$*), $(call if_changed,sha256sum,$(FIRMWARE_DIR)/$*), @touch $@)
> -
> -clean-files += *.sha.bin *.sum
> -
>  # This dependency is used if missing firmware should fail the build immediately
>  fwdep-required-y = $(FIRMWARE_DIR)/%
>  # This dependency expands to nothing if the file doesn't exist. This allows

-- 
Pengutronix e.K.                  |                             |
Steuerwalder Str. 21              | http://www.pengutronix.de/  |
31137 Hildesheim, Germany         | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686  | Fax:   +49-5121-206917-5555 |




  parent reply	other threads:[~2025-09-17 10:22 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-17  9:58 Sascha Hauer
2025-09-17 10:06 ` Sascha Hauer
2025-09-17 10:21 ` Ahmad Fatoum [this message]
2025-09-17 13:04   ` Sascha Hauer
2025-09-18 14:24 ` Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=70e5f030-a3c5-4fa8-af71-99084828d56e@pengutronix.de \
    --to=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=s.hauer@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox