[PATCH 00/49] image: Reduce #ifdefs and ad-hoc defines in image code

Simon Glass
2021-05-03T23:10:47Z

Much of the image-handling code predates the introduction of Kconfig and
has quite a few #ifdefs in it. It also uses its own IMAGE_... defines to
help reduce the #ifdefs, which is unnecessary now that we can use
IS_ENABLED() et al.

The image code is also where quite a bit of code is shared with the host
tools. At present this uses a lot of checks of USE_HOSTCC.

This series introduces 'host' Kconfig options and a way to use
CONFIG_IS_ENABLED() to check them. This works in a similar way to SPL, so

CONFIG_IS_ENABLED(FIT)

will evaluate to true on the host build (USE_HOSTCC) if CONFIG_HOST_FIT is
enabled. This allows quite a bit of clean-up of the image.h header file
and many of the image C files.

The 'host' Kconfig options should help to solve a more general problem in
that we mostly want the host tools to build with all features enabled, no
matter which features the 'target' build actually uses. This is a pain to
arrange at present, but with 'host' Kconfigs, we can just define them all
to y.

There are cases where the host tools do not have features which are
present on the target, for example environment and physical addressing.
To help with this, some of the core image code is split out into
image-board.c and image-host.c files.

Even with these changes, some #ifdefs remain (101 down to 42 in
common/image*). But the code is somewhat easier to follow and there are
fewer build paths.

In service of the above, this series includes a patch to add an API function
for zstd, so the code can be dropped from bootm.c

It also introduces a function to handle manual relocation.

Changes in v2:
- Add new abuf_init_set() function

Simon Glass (49):
Add support for an owned buffer
compiler: Add a comment to host_build()
zstd: Create a function for use from U-Boot
btrfs: Use U-Boot API for decompression
image: Avoid switch default in image_decomp()
image: Update zstd to avoid reporting error twice
gzip: Avoid use of u64
image: Update image_decomp() to avoid ifdefs
image: Split board code out into its own file
image: Fix up checkpatch warnings in image-board.c
image: Split host code out into its own file
image: Create a function to do manual relocation
image: Avoid #ifdefs for manual relocation
image: Remove ifdefs around image_setup_linux() el at
image: Add Kconfig options for FIT in the host build
kconfig: Add host support to CONFIG_IS_ENABLED()
image: Shorten FIT_ENABLE_SHAxxx_SUPPORT
image: Rename SPL_SHAxxx_SUPPORT to SPL_FIT_SHAxxx
hash: Use Kconfig to enable hashing in host tools
hash: Drop some #ifdefs in hash.c
image: Drop IMAGE_ENABLE_FIT
image: Drop IMAGE_ENABLE_OF_LIBFDT
image: Use Kconfig to enable CONFIG_FIT_VERBOSE on host
image: Rename CONFIG_FIT_ENABLE_RSASSA_PSS_SUPPORT
image: Use Kconfig to enable FIT_RSASSA_PSS on host
Kconfig: Rename SPL_CRC32_SUPPORT to SPL_CRC32
image: Drop IMAGE_ENABLE_CRC32
Kconfig: Rename SPL_MD5_SUPPORT to SPL_MD5
image: Drop IMAGE_ENABLE_MD5
image: Drop IMAGE_ENABLE_SHA1
image: Drop IMAGE_ENABLE_SHAxxx
image: Drop IMAGE_BOOT_GET_CMDLINE
image: Drop IMAGE_OF_BOARD_SETUP
image: Drop IMAGE_OF_SYSTEM_SETUP
image: Drop IMAGE_ENABLE_IGNORE
image: Drop IMAGE_ENABLE_SIGN/VERIFY defines
image: Drop IMAGE_ENABLE_BEST_MATCH
image: Drop IMAGE_ENABLE_EN/DECRYPT defines
image: Tidy up fit_unsupported_reset()
image: Drop unnecessary #ifdefs from image.h
image: Drop #ifdefs for fit_print_contents()
image: Drop most #ifdefs in image-board.c
image: Reduce variable scope in boot_get_ramdisk()
image: Split up boot_get_ramdisk()
image: Remove #ifdefs from select_ramdisk()
image: Remove some #ifdefs from image-fit and image-fit-sig
image: Reduce variable scope in boot_get_fdt()
image: Split up boot_get_fdt()
image: Remove #ifdefs from select_fdt()

arch/arc/lib/bootm.c | 2 +-
arch/arm/lib/bootm.c | 4 +-
arch/arm/mach-imx/hab.c | 2 +-
arch/microblaze/lib/bootm.c | 2 +-
arch/nds32/lib/bootm.c | 4 +-
arch/riscv/lib/bootm.c | 4 +-
board/synopsys/hsdk/hsdk.c | 2 +-
common/Kconfig.boot | 18 +-
common/Makefile | 2 +-
common/bootm.c | 30 +-
common/bootm_os.c | 8 +
common/hash.c | 96 +-
common/image-board.c | 958 +++++++++++++++++
common/image-cipher.c | 6 +-
common/image-fdt.c | 275 ++---
common/image-fit-sig.c | 7 +-
common/image-fit.c | 42 +-
common/image-host.c | 27 +
common/image-sig.c | 57 +-
common/image.c | 1179 ++-------------------
common/spl/Kconfig | 27 +-
configs/axm_defconfig | 2 +-
configs/bcm963158_ram_defconfig | 2 +-
configs/chromebit_mickey_defconfig | 2 +-
configs/chromebook_jerry_defconfig | 2 +-
configs/chromebook_minnie_defconfig | 2 +-
configs/chromebook_speedy_defconfig | 2 +-
configs/evb-px30_defconfig | 2 +-
configs/firefly-px30_defconfig | 2 +-
configs/imxrt1020-evk_defconfig | 2 +-
configs/imxrt1050-evk_defconfig | 2 +-
configs/mt8516_pumpkin_defconfig | 2 +-
configs/odroid-go2_defconfig | 2 +-
configs/px30-core-ctouch2-px30_defconfig | 2 +-
configs/px30-core-edimm2.2-px30_defconfig | 2 +-
configs/sandbox_defconfig | 3 +-
configs/socfpga_agilex_atf_defconfig | 2 +-
configs/socfpga_agilex_vab_defconfig | 2 +-
configs/socfpga_stratix10_atf_defconfig | 2 +-
configs/taurus_defconfig | 2 +-
fs/btrfs/compression.c | 51 +-
include/abuf.h | 148 +++
include/compiler.h | 8 +
include/fdt_support.h | 2 +-
include/gzip.h | 8 +-
include/image.h | 178 +---
include/linux/kconfig.h | 13 +-
include/linux/zstd.h | 11 +
include/relocate.h | 30 +-
include/u-boot/aes.h | 8 +-
include/u-boot/ecdsa.h | 2 +-
include/u-boot/hash-checksum.h | 5 +-
include/u-boot/rsa.h | 12 +-
lib/Kconfig | 5 +
lib/Makefile | 5 +-
lib/abuf.c | 103 ++
lib/gunzip.c | 28 +-
lib/hash-checksum.c | 2 +-
lib/lmb.c | 2 +-
lib/rsa/rsa-sign.c | 4 +-
lib/rsa/rsa-verify.c | 4 +-
lib/zstd/Makefile | 2 +-
lib/zstd/zstd.c | 64 ++
test/lib/Makefile | 1 +
test/lib/abuf.c | 303 ++++++
tools/Kconfig | 111 ++
tools/Makefile | 19 +-
tools/image-host.c | 6 +-
68 files changed, 2276 insertions(+), 1650 deletions(-)
create mode 100644 common/image-board.c
create mode 100644 common/image-host.c
create mode 100644 include/abuf.h
create mode 100644 lib/abuf.c
create mode 100644 lib/zstd/zstd.c
create mode 100644 test/lib/abuf.c

--
2.31.1.527.g47e6f16901-goog