All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: u-boot@lists.denx.de
Subject: [PATCH v2 16/50] image: Add Kconfig options for FIT in the host build
Date: Thu, 13 May 2021 16:56:23 -0700	[thread overview]
Message-ID: <CAPnjgZ3wxtbUzZ=gv2c2cbTB-OfcvVvc2K1jGEpDetQ43VBSUA@mail.gmail.com> (raw)
In-Reply-To: <07146d8e-c674-aa34-3f5b-f3bc53489c3e@gmail.com>

Hi Alex,

On Thu, 13 May 2021 at 10:21, Alex G. <mr.nuke.me@gmail.com> wrote:
>
>
>
> On 5/12/21 12:30 PM, Simon Glass wrote:
> > Hi Alex,
> >
> > On Wed, 12 May 2021 at 10:18, Alex G. <mr.nuke.me@gmail.com> wrote:
> >>
> >>
> >>
> >> On 5/12/21 10:54 AM, Simon Glass wrote:
> >>> Hi Alex,
> >>>
> >>> On Wed, 12 May 2021 at 09:48, Alex G. <mr.nuke.me@gmail.com> wrote:
> >>>>
> >>>>
> >>>>
> >>>> On 5/12/21 9:51 AM, Simon Glass wrote:
> >>>>> Hi Alex,
> >>>>>
> >>>>> On Tue, 11 May 2021 at 13:57, Alex G. <mr.nuke.me@gmail.com> wrote:
> >>>>>>
> >>>>>> On 5/6/21 9:24 AM, Simon Glass wrote:
> >>>>
> >>>> [snip]
> >>>>
> >>>>>>
> >>>>>>> +
> >>>>>>> +config HOST_FIT_PRINT
> >>>>>>> +     def_bool y
> >>>>>>> +     help
> >>>>>>> +       Print the content of the FIT verbosely in the host build
> >>>>>>
> >>>>>> This option also doesn't make sense.This seems to do what 'mkimage -l'
> >>>>>> already supports.
> >>>>>
> >>>>> Are you sure you have looked at the goal of the CONFIG_IS_ENABLED()
> >>>>> changes? This is here purely to avoid #ifdefs in the share code.
> >>>>
> >>>> On the one hand, we have the cosmetic inconvenience caused by #ifdefs.
> >>>> On the other hand we have the config system. To most users, the config
> >>>> system is likely more visible, while it's mostly developers who will
> >>>> ever see the ifdefs.
> >>>>
> >>>> Therefore, in order to get the developer convenience of less ifdefs, we
> >>>> have to sacrifice user convenience by cloberring the Kconfig options. I
> >>>> think this is back-to-front.
> >>>
> >>> These Kconfig options are not visible to users. They cannot be updated
> >>> in defconfig, nor in 'make menuconfig', etc. They are purely there for
> >>> the build system.
> >>>
> >>>>
> >>>> Can we reduce the host config count to just SLL/NOSSL?
> >>>
> >>> The point here is that the code has a special case for host builds,
> >>> and this is a means to remove that special case and make the code
> >>> easier to maintain and follow.
> >>
> >> I understand where you're coming from. Without these changes, the code
> >> knows what it should and should not do, correct? My argument is that if
> >> the code has the logic to do the correct thing, that logic should not be
> >> split with the config system.
> >>
> >> I agree with the goal of reducing clutter in the source code. I disagree
> >> with this specific course of fixing it. Instead, I propose a single
> >> kconfig for host tools for SSL on/off.
> >>
> >> The disadvantage of my proposal is that we have to refactor the common
> >> code in a way consistent with the goals, instead of just changing some
> >> #ifdefs to if(CONFIG_IS_ENABLED()). I admit that, off the top of my
> >> head, I don't have a detailed plan on how to achieve this.
> >
> > You are mostly describing the status quo, so far as I understand it.
> > The problem is with the code that is built for both boards and tools.
> > For boards, we want this code to be compiled conditionally, depending
> > on what options are enabled. For tools, we want the code to be
> > compiled unconditionally.
> >
> > I can think of only three ways to do this:
> >
> > - status quo (add #ifdefs USE_HOSTCC wherever we need to)
> > - my series (make use of hidden Kconfig options to avoid that)
> > - put every single feature and associated lines of code in separate
> > files and compile them conditionally for boards, but always for tools
> >
> > I believe the last option is actually impossible, or at least
> > impractical. It would cause an explosion of source files to deal with
> > all the various combinations, and would be quite painful to maintain
> > also.
>
> I don't think the status quo is such a terrible solution, so I am
> looking at the aspects that can benefit from improvement. Hence why it
> may appear I am talking about the status quo.
>
> Let's assume CONFIG_IS_ENABLED() returns true on host builds, and for
> those cases where you need to know if IS_HOST_BUILD(), there's a macro
> for that. You have the oddball case that uses a CONFIG_ value that's
> only defined on the target, and those you would have to split according
> to your option #3.
>
> I don't think the above is as dire an explosion in source files as it seems.
>
> Another point of contention is checksum_algos and crypto_algos arrays
> image-sig.c. On the target side, these should be in .u-boot-list. Status
> quo is the definition of rsa_verify is hidden behind #if macros, which
> just pushes the complexity out into the rsa.h headers.
>
> The two ideas here are CONFIG_IS_ENABLED() returns true for host code,
> and image-sig.c is split bwtween host and target versions, the target
> version making use of .uboot-list. Using these as the starting points, I
> think we can get to a much better solution

I did consider simply defining CONFIG_IS_ENABLED() to true for the
host, but rejected that because I worried it would break down at some
point. Examples I can think of at the moment:

- conflicting or alternative options (OF_LIVE, OF_HOST_FILE, OF_SEPARATE)
- code that is not actually wanted on the host (WATCHDOG,
NEEDS_MANUAL_RELOC, FPGA)
- code that we want on the host but not the board (so we end up with a
dummy CONFIG for the boards?)
- all the SPL / TPL / VPL options which would always end up being
true, when in fact we probably want none of them

I think you should more clearly explain your objection to the hidden
Kconfig options, since your original reason ("clobbering the Kconfig
space") doesn't seem to have survived further analysis.

Having said that, I can imagine with a lot of refactoring it might be
possible to address some of those. I just don't see it as a feasible
option from here. The effort would be better spent improving testing,
I think. But if you'd like to code something up for it, I'd be
interested to see it.

Re the linker-list stuff, yes we should push more things to those
instead of #ifdefs and weak functions. Hashing and crypto are prime
examples. In fact host tools can use linker lists too if we need that.

Regards,
Simon

  reply	other threads:[~2021-05-13 23:56 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-06 14:23 [PATCH v2 00/50] image: Reduce #ifdefs and ad-hoc defines in image code Simon Glass
2021-05-06 14:23 ` [PATCH v2 01/50] lib: Add memdup() Simon Glass
2021-05-06 17:07   ` Pratyush Yadav
2021-05-06 17:41     ` Simon Glass
2021-05-06 17:57       ` Sean Anderson
2021-05-10  9:00       ` Rasmus Villemoes
2021-05-10 11:21         ` Heinrich Schuchardt
2021-05-10 16:28         ` Simon Glass
2021-05-06 14:23 ` [PATCH v2 02/50] Add support for an owned buffer Simon Glass
2021-05-06 14:23 ` [PATCH v2 03/50] compiler: Add a comment to host_build() Simon Glass
2021-05-06 14:23 ` [PATCH v2 04/50] zstd: Create a function for use from U-Boot Simon Glass
2021-05-06 14:23 ` [PATCH v2 05/50] btrfs: Use U-Boot API for decompression Simon Glass
2021-05-06 14:23 ` [PATCH v2 06/50] image: Avoid switch default in image_decomp() Simon Glass
2021-05-06 14:23 ` [PATCH v2 07/50] image: Update zstd to avoid reporting error twice Simon Glass
2021-05-06 14:23 ` [PATCH v2 08/50] gzip: Avoid use of u64 Simon Glass
2021-05-06 14:23 ` [PATCH v2 09/50] image: Update image_decomp() to avoid ifdefs Simon Glass
2021-05-06 14:23 ` [PATCH v2 10/50] image: Split board code out into its own file Simon Glass
2021-05-06 14:23 ` [PATCH v2 11/50] image: Fix up checkpatch warnings in image-board.c Simon Glass
2021-05-06 14:24 ` [PATCH v2 12/50] image: Split host code out into its own file Simon Glass
2021-05-06 14:24 ` [PATCH v2 13/50] image: Create a function to do manual relocation Simon Glass
2021-05-06 14:24 ` [PATCH v2 14/50] image: Avoid #ifdefs for " Simon Glass
2021-05-06 14:24 ` [PATCH v2 15/50] image: Remove ifdefs around image_setup_linux() el at Simon Glass
2021-05-06 14:24 ` [PATCH v2 16/50] image: Add Kconfig options for FIT in the host build Simon Glass
2021-05-11 19:57   ` Alex G.
2021-05-11 22:34     ` Tom Rini
2021-05-12  0:50       ` Alex G.
2021-05-12  1:10         ` Tom Rini
2021-05-12 15:52           ` Simon Glass
2021-05-12 16:19             ` Alex G.
2021-05-12 17:14               ` Tom Rini
2021-05-17 22:29                 ` Alex G.
2021-05-18  1:23                   ` AKASHI Takahiro
2021-05-19 15:49                     ` Alex G
2021-05-12 14:51     ` Simon Glass
2021-05-12 15:48       ` Alex G.
2021-05-12 15:54         ` Simon Glass
2021-05-12 16:18           ` Alex G.
2021-05-12 17:30             ` Simon Glass
2021-05-13 16:21               ` Alex G.
2021-05-13 23:56                 ` Simon Glass [this message]
2021-05-14 15:12                   ` Alex G.
2021-05-15 15:20                     ` Simon Glass
2021-05-06 14:24 ` [PATCH v2 17/50] kconfig: Add host support to CONFIG_IS_ENABLED() Simon Glass
2021-05-06 14:24 ` [PATCH v2 18/50] image: Shorten FIT_ENABLE_SHAxxx_SUPPORT Simon Glass
2021-05-14 15:30   ` Alex G.
2021-05-06 14:24 ` [PATCH v2 19/50] image: Rename SPL_SHAxxx_SUPPORT to SPL_FIT_SHAxxx Simon Glass
2021-05-14 15:34   ` Alex G.
2021-05-06 14:24 ` [PATCH v2 20/50] hash: Use Kconfig to enable hashing in host tools Simon Glass
2021-05-06 14:24 ` [PATCH v2 21/50] hash: Drop some #ifdefs in hash.c Simon Glass
2021-05-14 15:37   ` Alex G.
2021-05-14 20:43     ` Tom Rini
2021-05-06 14:24 ` [PATCH v2 22/50] image: Drop IMAGE_ENABLE_FIT Simon Glass
2021-05-06 14:24 ` [PATCH v2 23/50] image: Drop IMAGE_ENABLE_OF_LIBFDT Simon Glass
2021-05-06 14:24 ` [PATCH v2 24/50] image: Use Kconfig to enable CONFIG_FIT_VERBOSE on host Simon Glass
2021-05-06 14:24 ` [PATCH v2 25/50] image: Rename CONFIG_FIT_ENABLE_RSASSA_PSS_SUPPORT Simon Glass
2021-05-06 14:24 ` [PATCH v2 26/50] image: Use Kconfig to enable FIT_RSASSA_PSS on host Simon Glass
2021-05-06 14:24 ` [PATCH v2 27/50] Kconfig: Rename SPL_CRC32_SUPPORT to SPL_CRC32 Simon Glass
2021-05-14 21:31   ` Alex G.
2021-05-06 14:24 ` [PATCH v2 28/50] image: Drop IMAGE_ENABLE_CRC32 Simon Glass
2021-05-06 14:24 ` [PATCH v2 29/50] Kconfig: Rename SPL_MD5_SUPPORT to SPL_MD5 Simon Glass
2021-05-14 21:31   ` Alex G.
2021-05-06 14:24 ` [PATCH v2 30/50] image: Drop IMAGE_ENABLE_MD5 Simon Glass
2021-05-06 14:24 ` [PATCH v2 31/50] image: Drop IMAGE_ENABLE_SHA1 Simon Glass
2021-05-06 14:24 ` [PATCH v2 32/50] image: Drop IMAGE_ENABLE_SHAxxx Simon Glass
2021-05-06 14:24 ` [PATCH v2 33/50] image: Drop IMAGE_BOOT_GET_CMDLINE Simon Glass
2021-05-06 14:24 ` [PATCH v2 34/50] image: Drop IMAGE_OF_BOARD_SETUP Simon Glass
2021-05-06 14:24 ` [PATCH v2 35/50] image: Drop IMAGE_OF_SYSTEM_SETUP Simon Glass
2021-05-06 14:24 ` [PATCH v2 36/50] image: Drop IMAGE_ENABLE_IGNORE Simon Glass
2021-05-06 14:24 ` [PATCH v2 37/50] image: Drop IMAGE_ENABLE_SIGN/VERIFY defines Simon Glass
2021-05-14 20:38   ` Alex G.
2021-05-14 20:44     ` Simon Glass
2021-05-14 21:17       ` Alex G.
2021-05-15 15:20         ` Simon Glass
2021-05-06 14:24 ` [PATCH v2 38/50] image: Drop IMAGE_ENABLE_BEST_MATCH Simon Glass
2021-05-14 21:32   ` Alex G.
2021-05-06 14:24 ` [PATCH v2 39/50] image: Drop IMAGE_ENABLE_EN/DECRYPT defines Simon Glass
2021-05-06 14:24 ` [PATCH v2 40/50] image: Tidy up fit_unsupported_reset() Simon Glass
2021-05-06 14:24 ` [PATCH v2 41/50] image: Drop unnecessary #ifdefs from image.h Simon Glass
2021-05-14 21:45   ` Alex G.
2021-05-06 14:24 ` [PATCH v2 42/50] image: Drop #ifdefs for fit_print_contents() Simon Glass
2021-05-14 21:46   ` Alex G.
2021-05-06 14:24 ` [PATCH v2 43/50] image: Drop most #ifdefs in image-board.c Simon Glass
2021-05-06 14:24 ` [PATCH v2 44/50] image: Reduce variable scope in boot_get_ramdisk() Simon Glass
2021-05-06 14:24 ` [PATCH v2 45/50] image: Split up boot_get_ramdisk() Simon Glass
2021-05-06 14:24 ` [PATCH v2 46/50] image: Remove #ifdefs from select_ramdisk() Simon Glass
2021-05-06 14:24 ` [PATCH v2 47/50] image: Remove some #ifdefs from image-fit and image-fit-sig Simon Glass
2021-05-14 21:50   ` Alex G.
2021-05-15 15:20     ` Simon Glass
2021-05-06 14:24 ` [PATCH v2 48/50] image: Reduce variable scope in boot_get_fdt() Simon Glass
2021-05-06 14:24 ` [PATCH v2 49/50] image: Split up boot_get_fdt() Simon Glass
2021-05-06 14:24 ` [PATCH v2 50/50] image: Remove #ifdefs from select_fdt() Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAPnjgZ3wxtbUzZ=gv2c2cbTB-OfcvVvc2K1jGEpDetQ43VBSUA@mail.gmail.com' \
    --to=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.