build: List all Kconfigs in CBFS `config` file, compress it

The coreboot build system automatically adds a `config` file to CBFS
that lists the exact Kconfig configuration that this image was built
with. This is useful to reproduce a build after the fact or to check
whether support for a specific feature is enabled in the image.

However, the file is currently generated using the `savedefconfig`
command to Kconfig, which generates the minimal .config file that is
needed to produce the required config in a coreboot build. This is fine
for reproduction, but bad when you want to check if a certain config was
enabled, since many configs get enabled by default or pulled in through
another config's `select` statement and thus don't show up in the
defconfig.

This patch tries to fix that second use case by instead including the
full .config instead. In order to save some space, we can remove all
comments (e.g. `# CONFIG_XXX is not set`) from the file, which still
makes it easy to test for a specific config (if it's in the file you can
extract the right value, if not you can assume it was set to `n`). We
can also LZMA compress it since this file is never read by firmware
itself and only intended for later re-extraction via cbfstool, which
always has LZMA support included.

On a sample Trogdor device the existing (uncompressed) `config` file
takes up 519 bytes in CBFS, whereas the new (compressed) file after this
patch will take up 1832 bytes -- still a small amount that should
hopefully not break the bank for anyone.

Signed-off-by: Julius Werner <jwerner@chromium.org>
Change-Id: I5259ec6f932cdc5780b8843f46dd476da9d19728
Reviewed-on: https://review.coreboot.org/c/coreboot/+/69710
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Yu-Ping Wu <yupingso@google.com>
Reviewed-by: Jakub Czapiga <jacz@semihalf.com>
Reviewed-by: Martin Roth <martin.roth@amd.corp-partner.google.com>
This commit is contained in:
Julius Werner 2022-11-16 17:48:46 -08:00 committed by Martin Roth
parent be585d2ece
commit 4924cdb9ac
2 changed files with 8 additions and 9 deletions

View File

@ -305,17 +305,15 @@ cbfs-files-processor-nvramtool= \
mv $(2).tmp $(2)) mv $(2).tmp $(2))
####################################################################### #######################################################################
# Reduce a .config file to its minimal representation # Reduce a .config file by removing lines about unset booleans
# arg1: input # arg1: input
# arg2: output # arg2: output
define cbfs-files-processor-defconfig define cbfs-files-processor-config
$(eval $(2): $(1) $(obj)/build.h $(objutil)/kconfig/conf; \ $(eval $(2): $(1) $(obj)/build.h; \
+printf " CREATE $(2) (from $(1))\n"; \ +printf " CREATE $(2) (from $(1))\n"; \
printf "# This image was built using coreboot " > $(2).tmp && \ printf "# This image was built using coreboot " > $(2).tmp && \
grep "\<COREBOOT_VERSION\>" $(obj)/build.h |cut -d\" -f2 >> $(2).tmp && \ grep "\<COREBOOT_VERSION\>" $(obj)/build.h |cut -d\" -f2 >> $(2).tmp && \
$(MAKE) DOTCONFIG=$(1) DEFCONFIG=$(2).tmp2 savedefconfig && \ sed -e '/^CONFIG/!d' $(1) >> $(2).tmp && \
cat $(2).tmp2 >> $(2).tmp && \
rm -f $(2).tmp2 && \
\mv -f $(2).tmp $(2)) \mv -f $(2).tmp $(2))
endef endef
@ -1212,8 +1210,9 @@ vgaroms/seavgabios.bin-file := $(CONFIG_PAYLOAD_VGABIOS_FILE)
vgaroms/seavgabios.bin-type := raw vgaroms/seavgabios.bin-type := raw
cbfs-files-$(CONFIG_INCLUDE_CONFIG_FILE) += config cbfs-files-$(CONFIG_INCLUDE_CONFIG_FILE) += config
config-file := $(DOTCONFIG):defconfig config-file := $(DOTCONFIG):config
config-type := raw config-type := raw
config-compression := LZMA
cbfs-files-$(CONFIG_INCLUDE_CONFIG_FILE) += revision cbfs-files-$(CONFIG_INCLUDE_CONFIG_FILE) += revision
revision-file := $(obj)/build.h revision-file := $(obj)/build.h

View File

@ -211,9 +211,9 @@ config INCLUDE_CONFIG_FILE
Saying Y here will increase the image size by 2-3KB. Saying Y here will increase the image size by 2-3KB.
You can use the following command to easily list the options: You can then use cbfstool to extract the config from a final image:
grep -a CONFIG_ coreboot.rom cbfstool coreboot.rom extract -n config -f <output file path>
Alternatively, you can also use cbfstool to print the image Alternatively, you can also use cbfstool to print the image
contents (including the raw 'config' item we're looking for). contents (including the raw 'config' item we're looking for).