This patch adds support for the new CONFIG_CBFS_VERIFICATION feature to cbfstool. When CBFS verification is enabled, cbfstool must automatically add a hash attribute to every CBFS file it adds (with a handful of exceptions like bootblock and "header" pseudofiles that are never read by coreboot code itself). It must also automatically update the metadata hash that is embedded in the bootblock code. It will automatically find the metadata hash by scanning the bootblock for its magic number and use its presence to auto-detect whether CBFS verification is enabled for an image (and which hash algorithm to use). Signed-off-by: Julius Werner <jwerner@chromium.org> Change-Id: I61a84add8654f60c683ef213b844a11b145a5cb7 Reviewed-on: https://review.coreboot.org/c/coreboot/+/41121 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
239 lines
8.2 KiB
Makefile
239 lines
8.2 KiB
Makefile
compressionobj :=
|
|
compressionobj += compress.o
|
|
# LZ4
|
|
compressionobj += lz4.o
|
|
compressionobj += lz4hc.o
|
|
compressionobj += lz4frame.o
|
|
compressionobj += xxhash.o
|
|
compressionobj += lz4_wrapper.o
|
|
# LZMA
|
|
compressionobj += lzma.o
|
|
compressionobj += LzFind.o
|
|
compressionobj += LzmaDec.o
|
|
compressionobj += LzmaEnc.o
|
|
|
|
cbfsobj :=
|
|
cbfsobj += cbfstool.o
|
|
cbfsobj += common.o
|
|
cbfsobj += cbfs_image.o
|
|
cbfsobj += cbfs-mkstage.o
|
|
cbfsobj += cbfs-mkpayload.o
|
|
cbfsobj += elfheaders.o
|
|
cbfsobj += rmodule.o
|
|
cbfsobj += xdr.o
|
|
cbfsobj += partitioned_file.o
|
|
# COMMONLIB
|
|
cbfsobj += cbfs_private.o
|
|
cbfsobj += fsp_relocate.o
|
|
# FMAP
|
|
cbfsobj += fmap.o
|
|
cbfsobj += kv_pair.o
|
|
cbfsobj += valstr.o
|
|
# linux as payload
|
|
cbfsobj += linux_trampoline.o
|
|
cbfsobj += cbfs-payload-linux.o
|
|
# compression algorithms
|
|
cbfsobj += $(compressionobj)
|
|
|
|
fmapobj :=
|
|
fmapobj += fmaptool.o
|
|
fmapobj += cbfs_sections.o
|
|
fmapobj += fmap_from_fmd.o
|
|
fmapobj += fmd.o
|
|
fmapobj += fmd_parser.o
|
|
fmapobj += fmd_scanner.o
|
|
# FMAP
|
|
fmapobj += fmap.o
|
|
fmapobj += kv_pair.o
|
|
fmapobj += valstr.o
|
|
|
|
rmodobj :=
|
|
rmodobj += rmodtool.o
|
|
rmodobj += rmodule.o
|
|
rmodobj += common.o
|
|
rmodobj += elfheaders.o
|
|
rmodobj += xdr.o
|
|
|
|
ifwiobj :=
|
|
ifwiobj += ifwitool.o
|
|
ifwiobj += common.o
|
|
|
|
ifitobj :=
|
|
ifitobj += ifittool.o
|
|
ifitobj += common.o
|
|
ifitobj += fit.o
|
|
ifitobj += cbfs_image.o
|
|
# Make it link ....
|
|
ifitobj += xdr.o
|
|
ifitobj += elfheaders.o
|
|
ifitobj += partitioned_file.o
|
|
ifitobj += cbfs-mkstage.o
|
|
ifitobj += cbfs-mkpayload.o
|
|
ifitobj += rmodule.o
|
|
# FMAP
|
|
ifitobj += fmap.o
|
|
ifitobj += kv_pair.o
|
|
ifitobj += valstr.o
|
|
# compression algorithms
|
|
ifitobj += $(compressionobj)
|
|
|
|
|
|
cbfscompobj :=
|
|
cbfscompobj += $(compressionobj)
|
|
cbfscompobj += cbfscomptool.o
|
|
|
|
amdcompobj :=
|
|
amdcompobj += amdcompress.o
|
|
amdcompobj += elfheaders.o
|
|
amdcompobj += common.o
|
|
amdcompobj += xdr.o
|
|
|
|
TOOLCFLAGS ?= -Werror -Wall -Wextra -Wshadow
|
|
TOOLCFLAGS += -Wcast-qual -Wmissing-prototypes -Wredundant-decls -Wshadow
|
|
TOOLCFLAGS += -Wstrict-prototypes -Wwrite-strings
|
|
TOOLCFLAGS += -O2
|
|
TOOLCPPFLAGS ?= -D_DEFAULT_SOURCE # memccpy() from string.h
|
|
TOOLCPPFLAGS += -D_BSD_SOURCE -D_SVID_SOURCE # _DEFAULT_SOURCE for older glibc
|
|
TOOLCPPFLAGS += -D_XOPEN_SOURCE=700 # strdup() from string.h
|
|
TOOLCPPFLAGS += -D_GNU_SOURCE # memmem() from string.h
|
|
TOOLCPPFLAGS += -I$(top)/util/cbfstool/flashmap
|
|
TOOLCPPFLAGS += -I$(top)/util/cbfstool
|
|
TOOLCPPFLAGS += -I$(objutil)/cbfstool
|
|
TOOLCPPFLAGS += -I$(top)/src/commonlib/include -I$(top)/src/commonlib/bsd/include
|
|
TOOLCPPFLAGS += -include $(top)/src/commonlib/bsd/include/commonlib/bsd/compiler.h
|
|
TOOLCPPFLAGS += -I$(VBOOT_SOURCE)/firmware/include
|
|
TOOLCPPFLAGS += -I$(VBOOT_SOURCE)/firmware/2lib/include
|
|
TOOLCPPFLAGS += -I$(VBOOT_SOURCE)/host/include
|
|
# UEFI header file support. It's not pretty, but that's what we currently
|
|
# have right now.
|
|
TOOLCPPFLAGS += -I$(top)/src
|
|
TOOLCPPFLAGS += -I$(top)/src/vendorcode/intel/edk2/uefi_2.4/MdePkg/Include
|
|
|
|
TOOLLDFLAGS ?=
|
|
HOSTCFLAGS += -fms-extensions
|
|
|
|
ifeq ($(shell uname -s | cut -c-7 2>/dev/null), MINGW32)
|
|
TOOLCFLAGS += -mno-ms-bitfields
|
|
endif
|
|
ifeq ($(shell uname -o 2>/dev/null), Cygwin)
|
|
TOOLCFLAGS+=-std=gnu11
|
|
TOOLCPPFLAGS+=-D_GNU_SOURCE
|
|
else
|
|
TOOLCFLAGS+=-std=c11
|
|
endif
|
|
|
|
VBOOT_HOSTLIB = $(VBOOT_HOST_BUILD)/libvboot_host.a
|
|
|
|
$(VBOOT_HOSTLIB):
|
|
printf " MAKE $(subst $(objutil)/,,$(@))\n"
|
|
unset CFLAGS LDFLAGS; $(MAKE) -C $(VBOOT_SOURCE) \
|
|
BUILD=$(VBOOT_HOST_BUILD) \
|
|
CC="$(HOSTCC)" \
|
|
PKG_CONFIG="true" \
|
|
V=$(V) \
|
|
hostlib
|
|
|
|
$(objutil)/cbfstool/%.o: $(objutil)/cbfstool/%.c
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@))\n"
|
|
$(HOSTCC) $(TOOLCPPFLAGS) $(TOOLCFLAGS) $(HOSTCFLAGS) -c -o $@ $<
|
|
|
|
$(objutil)/cbfstool/%.o: $(top)/util/cbfstool/%.c
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@))\n"
|
|
$(HOSTCC) $(TOOLCPPFLAGS) $(TOOLCFLAGS) $(HOSTCFLAGS) -c -o $@ $<
|
|
|
|
$(objutil)/cbfstool/%.o: $(top)/util/cbfstool/flashmap/%.c
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@))\n"
|
|
$(HOSTCC) $(TOOLCPPFLAGS) $(TOOLCFLAGS) $(HOSTCFLAGS) -c -o $@ $<
|
|
|
|
$(objutil)/cbfstool/%.o: $(top)/util/cbfstool/lzma/%.c
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@))\n"
|
|
$(HOSTCC) $(TOOLCPPFLAGS) $(TOOLCFLAGS) $(HOSTCFLAGS) -c -o $@ $<
|
|
|
|
$(objutil)/cbfstool/%.o: $(top)/util/cbfstool/lzma/C/%.c
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@))\n"
|
|
$(HOSTCC) $(TOOLCPPFLAGS) $(TOOLCFLAGS) $(HOSTCFLAGS) -c -o $@ $<
|
|
|
|
$(objutil)/cbfstool/%.o: $(top)/src/commonlib/%.c
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@))\n"
|
|
$(HOSTCC) $(TOOLCPPFLAGS) $(TOOLCFLAGS) $(HOSTCFLAGS) -c -o $@ $<
|
|
|
|
$(objutil)/cbfstool/%.o: $(top)/src/commonlib/bsd/%.c
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@))\n"
|
|
$(HOSTCC) $(TOOLCPPFLAGS) $(TOOLCFLAGS) $(HOSTCFLAGS) -c -o $@ $<
|
|
|
|
$(objutil)/cbfstool/%.o: $(top)/util/cbfstool/lz4/lib/%.c
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@))\n"
|
|
$(HOSTCC) $(TOOLCPPFLAGS) $(TOOLCFLAGS) $(HOSTCFLAGS) -c -o $@ $<
|
|
|
|
$(objutil)/cbfstool/cbfstool: $(addprefix $(objutil)/cbfstool/,$(cbfsobj)) $(VBOOT_HOSTLIB)
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@)) (link)\n"
|
|
$(HOSTCC) -v $(TOOLLDFLAGS) -o $@ $(addprefix $(objutil)/cbfstool/,$(cbfsobj)) $(VBOOT_HOSTLIB)
|
|
|
|
$(objutil)/cbfstool/fmaptool: $(addprefix $(objutil)/cbfstool/,$(fmapobj))
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@)) (link)\n"
|
|
$(HOSTCC) $(TOOLLDFLAGS) -o $@ $(addprefix $(objutil)/cbfstool/,$(fmapobj))
|
|
|
|
$(objutil)/cbfstool/rmodtool: $(addprefix $(objutil)/cbfstool/,$(rmodobj))
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@)) (link)\n"
|
|
$(HOSTCC) $(TOOLLDFLAGS) -o $@ $(addprefix $(objutil)/cbfstool/,$(rmodobj))
|
|
|
|
$(objutil)/cbfstool/ifwitool: $(addprefix $(objutil)/cbfstool/,$(ifwiobj))
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@)) (link)\n"
|
|
$(HOSTCC) $(TOOLLDFLAGS) -o $@ $(addprefix $(objutil)/cbfstool/,$(ifwiobj))
|
|
|
|
$(objutil)/cbfstool/ifittool: $(addprefix $(objutil)/cbfstool/,$(ifitobj)) $(VBOOT_HOSTLIB)
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@)) (link)\n"
|
|
$(HOSTCC) $(TOOLLDFLAGS) -o $@ $(addprefix $(objutil)/cbfstool/,$(ifitobj)) $(VBOOT_HOSTLIB)
|
|
|
|
$(objutil)/cbfstool/cbfs-compression-tool: $(addprefix $(objutil)/cbfstool/,$(cbfscompobj))
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@)) (link)\n"
|
|
$(HOSTCC) $(TOOLLDFLAGS) -o $@ $(addprefix $(objutil)/cbfstool/,$(cbfscompobj))
|
|
|
|
$(objutil)/cbfstool/amdcompress: $(addprefix $(objutil)/cbfstool/,$(amdcompobj))
|
|
printf " HOSTCC $(subst $(objutil)/,,$(@)) (link)\n"
|
|
$(HOSTCC) $(TOOLLDFLAGS) -o $@ $(addprefix $(objutil)/cbfstool/,$(amdcompobj)) -lz
|
|
|
|
# Yacc source is superset of header
|
|
$(objutil)/cbfstool/fmd.o: TOOLCFLAGS += -Wno-redundant-decls
|
|
$(objutil)/cbfstool/fmd_parser.o: TOOLCFLAGS += -Wno-redundant-decls
|
|
# Lex generates unneeded functions and declarations
|
|
$(objutil)/cbfstool/fmd_scanner.o: TOOLCFLAGS += -Wno-redundant-decls
|
|
$(objutil)/cbfstool/fmd_scanner.o: TOOLCFLAGS += -Wno-unused-function
|
|
# Tolerate lzma sdk warnings
|
|
$(objutil)/cbfstool/LzmaEnc.o: TOOLCFLAGS += -Wno-sign-compare -Wno-cast-qual
|
|
# Tolerate commonlib warnings
|
|
$(objutil)/cbfstool/cbfs_private.o: TOOLCFLAGS += -Wno-sign-compare
|
|
# Tolerate lz4 warnings
|
|
$(objutil)/cbfstool/lz4.o: TOOLCFLAGS += -Wno-missing-prototypes
|
|
$(objutil)/cbfstool/lz4_wrapper.o: TOOLCFLAGS += -Wno-attributes
|
|
|
|
$(objutil)/cbfstool/fmd.o: $(objutil)/cbfstool/fmd_parser.h
|
|
$(objutil)/cbfstool/fmd.o: $(objutil)/cbfstool/fmd_scanner.h
|
|
$(objutil)/cbfstool/fmd_parser.o: $(objutil)/cbfstool/fmd.o
|
|
$(objutil)/cbfstool/fmd_scanner.o: $(objutil)/cbfstool/fmd.o
|
|
$(objutil)/cbfstool/fmd_scanner.o: TOOLCFLAGS += -Wno-sign-compare
|
|
|
|
$(objutil)/cbfstool/%: $(top)/util/cbfstool/%_shipped
|
|
mkdir -p $(dir $@)
|
|
cp $< $@
|
|
|
|
ifeq ($(CONFIG_FMD_GENPARSER),y)
|
|
TOOLLEX := lex
|
|
TOOLYACC := yacc
|
|
|
|
# the .c rule also creates .h
|
|
$(top)/util/cbfstool/fmd_scanner.h_shipped: $(top)/util/cbfstool/fmd_scanner.c_shipped
|
|
$(top)/util/cbfstool/fmd_scanner.c_shipped: $(top)/util/cbfstool/fmd_scanner.l
|
|
echo " LEX util/cbfstool/fmd_scanner.[ch]"
|
|
$(TOOLLEX) -t --header-file=$(top)/util/cbfstool/fmd_scanner.h_shipped $< >$(top)/util/cbfstool/fmd_scanner.c_shipped
|
|
|
|
# the .c rule also creates .h
|
|
$(top)/util/cbfstool/fmd_parser.h_shipped: $(top)/util/cbfstool/fmd_parser.c_shipped
|
|
$(top)/util/cbfstool/fmd_parser.c_shipped: $(top)/util/cbfstool/fmd_parser.y
|
|
echo " YACC util/cbfstool/fmd_parser.[ch]"
|
|
$(TOOLYACC) -d $<
|
|
mv -f y.tab.c $(top)/util/cbfstool/fmd_parser.c_shipped
|
|
mv -f y.tab.h $(top)/util/cbfstool/fmd_parser.h_shipped
|
|
|
|
endif # CONFIG_FMD_GENPARSER
|