• Masahiro Yamada's avatar
    efi/libstub: zboot: do not use $(shell ...) in cmd_copy_and_pad · 97ba4416
    Masahiro Yamada authored
    You do not need to use $(shell ...) in recipe lines, as they are already
    executed in a shell. An alternative solution is $$(...), which is an
    escaped sequence of the shell's command substituion, $(...).
    
    For this case, there is a reason to avoid $(shell ...).
    
    Kbuild detects command changes by using the if_changed macro, which
    compares the previous command recorded in .*.cmd with the current
    command from Makefile. If they differ, Kbuild re-runs the build rule.
    
    To diff the commands, Make must expand $(shell ...) first. It means that
    hexdump is executed every time, even when nothing needs rebuilding. If
    Kbuild determines that vmlinux.bin needs rebuilding, hexdump will be
    executed again to evaluate the 'cmd' macro, one more time to really
    build vmlinux.bin, and finally yet again to record the expanded command
    into .*.cmd.
    
    Replace $(shell ...) with $$(...) to avoid multiple, unnecessay shell
    evaluations. Since Make is agnostic about the shell code, $(...), the
    if_changed macro compares the string "$(hexdump -s16 -n4 ...)" verbatim,
    so hexdump is run only for building vmlinux.bin.
    
    For the same reason, $(shell ...) in EFI_ZBOOT_OBJCOPY_FLAGS should be
    eliminated.
    
    While I was here, I replaced '&&' with ';' because a command for
    if_changed is executed with 'set -e'.
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    Reviewed-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20231218080127.907460-1-masahiroy@kernel.orgSigned-off-by: default avatarWill Deacon <will@kernel.org>
    97ba4416
Makefile 1.34 KB