Commit d3dd3b5a authored by H. Peter Anvin's avatar H. Peter Anvin
Browse files

kbuild: allow compressors (gzip, bzip2, lzma) to take multiple inputs



Allow the compression commands in Kbuild (i.e. gzip, bzip2, lzma) to
take multiple input files and emit the concatenated compressed
output.  This avoids an intermediate step when a kernel image is built
from multiple components, such as the relocatable x86-32 kernel.

Sam Ravnborg integrated the bin_size script into the Makefile.

[ Impact: new build feature, not yet used ]

Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
parent 0b4eb462
Loading
Loading
Loading
Loading
+21 −7
Original line number Diff line number Diff line
@@ -183,20 +183,34 @@ cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
# ---------------------------------------------------------------------------

quiet_cmd_gzip = GZIP    $@
cmd_gzip = gzip -f -9 < $< > $@
cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) || \
	(rm -f $@ ; false)


# Bzip2
# ---------------------------------------------------------------------------

# Bzip2 does not include size in file... so we have to fake that
size_append=$(CONFIG_SHELL) $(srctree)/scripts/bin_size
# Bzip2 and LZMA do not include size in file... so we have to fake that;
# append the size as a 32-bit littleendian number as gzip does.
size_append = echo -ne $(shell						\
dec_size=0;								\
for F in $1; do								\
	fsize=$$(stat -c "%s" $$F);					\
	dec_size=$$(expr $$dec_size + $$fsize);				\
done;									\
printf "%08x" $$dec_size |						\
	sed 's/\(..\)\(..\)\(..\)\(..\)/\\\\x\4\\\\x\3\\\\x\2\\\\x\1/g'	\
)

quiet_cmd_bzip2 = BZIP2   $@
cmd_bzip2 = (bzip2 -9 < $< && $(size_append) $<) > $@ || (rm -f $@ ; false)
cmd_bzip2 = (cat $(filter-out FORCE,$^) | \
	bzip2 -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
	(rm -f $@ ; false)

# Lzma
# ---------------------------------------------------------------------------

quiet_cmd_lzma = LZMA    $@
cmd_lzma = (lzma -9 -c $< && $(size_append) $<) >$@ || (rm -f $@ ; false)
cmd_lzma = (cat $(filter-out FORCE,$^) | \
	lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
	(rm -f $@ ; false)

scripts/bin_size

deleted100644 → 0
+0 −10
Original line number Diff line number Diff line
#!/bin/sh

if [ $# = 0 ] ; then
   echo Usage: $0 file
fi

size_dec=`stat -c "%s" $1`
size_hex_echo_string=`printf "%08x" $size_dec |
     sed 's/\(..\)\(..\)\(..\)\(..\)/\\\\x\4\\\\x\3\\\\x\2\\\\x\1/g'`
/bin/echo -ne $size_hex_echo_string