Re: [PATCH v2] Makefile: use shell to calculate map_size

2024-03-05 Thread Leon Busch-George
A colleague made me aware that the '[ -n "$$end" ]' is not necessary since 
'read' already returns an exit code.

v3 inc

On Mon,  4 Mar 2024 21:38:56 +0100
"Leon M. Busch-George"  wrote:

> From: "Leon M. Busch-George" 
> 
> The error message "bc: command not found" is easily missed since the
> build continues.
> bc is not a part of coreutils or base-devel. POSIX sh can also do the
> calculation.
> 
> Signed-off-by: Leon M. Busch-George 
> ---
>  Makefile | 13 +
>  1 file changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index a2bc9d5903..e8e794368e 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1275,10 +1275,15 @@ OBJCOPYFLAGS_u-boot-nodtb.bin := -O binary \
>  binary_size_check: u-boot-nodtb.bin FORCE
>   @file_size=$(shell wc -c u-boot-nodtb.bin | awk '{print
> $$1}') ; \ map_size=$(shell cat u-boot.map | \
> - awk '/_image_copy_start/ {start = $$1}
> /_image_binary_end/ {end = $$1} END {if (start != "" && end != "")
> print "ibase=16; " toupper(end) " - " toupper(start)}' \
> - | sed 's/0X//g' \
> - | bc); \
> - if [ "" != "$$map_size" ]; then \
> + awk ' \
> + /_image_copy_start/ { start = $$1 } \
> + /_image_binary_end/ { end = $$1 } \
> + END { \
> + if (start != "" && end != "") \
> + print end " " start; \
> + }' \
> + | sh -c 'read end start; [ -n "$$end" ] && echo
> $$((end - start))'); \
> + if [ -n "$$map_size" ]; then \
>   if test $$map_size -ne $$file_size; then \
>   echo "u-boot.map shows a binary size of
> $$map_size" >&2 ; \ echo "  but u-boot-nodtb.bin shows $$file_size"
> >&2 ; \



Re: [PATCH] Makefile: use shell to calculate map_size

2024-03-04 Thread Leon Busch-George
Oops!
That should have went to the list as well...

On Mon, 4 Mar 2024 15:40:07 +0100
Leon Busch-George  wrote:

> Hi Dragan :-)
> 
> Thanks for your reply!
> 
> On Sat, 02 Mar 2024 22:13:08 +0100
> Dragan Simic  wrote:
> 
> > > + awk '/_image_copy_start/ {start = $$1}
> > > /_image_binary_end/ {end = $$1} END {if (start != "" && end != "")
> > > print "echo $$((0x" toupper(end) " - 0x" toupper(start) "))"}' \
> > >   | sed 's/0X//g' \
> > > - | bc); \
> > > + | sh); \
> > 
> > Maybe "sh -s" could be used instead, just for some additional
> > strictness.
> 
> -s is the default already but I see no reason against adding it.
> Allow me to offer another idea to improve strictness (I'll send a v2):
> 
> awk '.. print end " " start ..' | sh -c 'read end start; echo
> $((end - start))'
> 
> That gets rid off sed and the interface between awk and sh is much
> cleaner (only the two numbers on one line rather than shell code).
> Sadly, the sed 's/0X//g' was introduced without an explanation in
> 3ce7a4fefa and but, looking at it more, I'm farly confident it was
> only for bc.
> 
> kind regards,
> Leon