lib/Makefile.inc: Generate placeholder spd.bin in lib/Makefile.inc

When a new variant is created, it needs to have a path to its SPD binary
defined. Currently, this is done by setting SPD_SOURCES to a placeholder
SPD file, which just contains zero bytes.

To remove the need for a placeholder file, automatically generate a
single-byte spd.bin in lib/Makefile.inc when SPD_SOURCES is set to the
marker value 'placeholder'.

BUG=b:191776301
TEST=Change cappy/memory/Makefile to `SPD_SOURCES = placeholder`. Build
and check that spd.bin contains a single zero byte.

Signed-off-by: Reka Norman <rekanorman@google.com>
Change-Id: I11f8f9b7ea3bc32aa5c7a617558572a5c1c74c72
Reviewed-on: https://review.coreboot.org/c/coreboot/+/57795
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc
index 7b21c80..8da875e 100644
--- a/src/lib/Makefile.inc
+++ b/src/lib/Makefile.inc
@@ -366,15 +366,19 @@
 	    (echo "HAVE_SPD_IN_CBFS is set but SPD_SOURCES is empty" && exit 1)
 	test -n "$(LIB_SPD_DEPS)" || \
 	    (echo "SPD_SOURCES is set but no SPD file was found" && exit 1)
-	for f in $(LIB_SPD_DEPS); do \
-	    if [ ! -f $$f ]; then \
-	        echo "File not found: $$f" >&2; \
-	        exit 1; \
-	    fi; \
-	    for c in $$(cat $$f | grep --binary-files=text -v ^#); \
-	        do printf $$(printf '\\%o' 0x$$c); \
+	if [ "$(SPD_SOURCES)" = "placeholder" ]; then \
+	    printf '\0'; \
+	else \
+	    for f in $(LIB_SPD_DEPS); do \
+	        if [ ! -f $$f ]; then \
+	            echo "File not found: $$f" >&2; \
+	            exit 1; \
+	        fi; \
+	        for c in $$(cat $$f | grep --binary-files=text -v ^#); \
+	            do printf $$(printf '\\%o' 0x$$c); \
+	        done; \
 	    done; \
-	done > $@
+	fi > $@
 
 cbfs-files-y += spd.bin
 spd.bin-file := $(LIB_SPD_BIN)