diff mbox series

[1/1] package/mbedtls: custom configuration file

Message ID 20200928092945.584196-1-pieter.degendt@basalte.be
State Changes Requested
Headers show
Series [1/1] package/mbedtls: custom configuration file | expand

Commit Message

Pieter De Gendt Sept. 28, 2020, 9:29 a.m. UTC
mbedlts is customizable with a single configuration header file.
Instead of altering the existing config.h file based on the selection
of packages, we can simply replace it.

Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
---
 package/mbedtls/Config.in  | 12 ++++++++++++
 package/mbedtls/mbedtls.mk |  8 ++++++++
 2 files changed, 20 insertions(+)

Comments

Thomas Petazzoni Sept. 30, 2020, 7:57 p.m. UTC | #1
Hello Pieter,

Thanks for the proposal. See below for some questions/comments.

On Mon, 28 Sep 2020 11:29:45 +0200
Pieter De Gendt <pieter.degendt@gmail.com> wrote:

> diff --git a/package/mbedtls/mbedtls.mk b/package/mbedtls/mbedtls.mk
> index 5094434e6c..fa74197004 100644
> --- a/package/mbedtls/mbedtls.mk
> +++ b/package/mbedtls/mbedtls.mk
> @@ -68,4 +68,12 @@ else ifeq ($(BR2_microblaze)$(BR2_MIPS_CPU_MIPS32R6)$(BR2_MIPS_CPU_MIPS64R6),y)
>  MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_DISABLE_ASM
>  endif
>  
> +define MBEDTLS_OVERRIDE_CONFIG
> +	cp $(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG) $(@D)/include/mbedtls/config.h
> +endef
> +
> +ifneq ($(call qstrip,$(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG)),)
> +MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_OVERRIDE_CONFIG
> +endif

We prefer to enclose everything in the conditional block, and do the
qstripping once:

MBEDTLS_CUSTOM_CONFIG = $(call qstrip,$(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG))

ifneq ($(MBEDTLS_CUSTOM_CONFIG),)
define MBEDTLS_OVERRIDE_CONFIG
	..
endef
MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_OVERRIDE_CONFIG
endif

However, what bothers me a bit is how it completely overrides all the
configuration logic that takes place before in mbedtls.mk. For example,
if you enable BR2_PACKAGE_MBEDTLS_COMPRESSION=y and use your option to
have a custom configuration file, then what
BR2_PACKAGE_MBEDTLS_COMPRESSION=y does will be ignored.

So, we would have to make BR2_PACKAGE_MBEDTLS_COMPRESSION disappear
when BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG, but then, how do you bring zlib
as a build dependency of mbedtls ?

We need to decide if the custom configuration file should override all
tweaks, or if all tweaks should be applied on top of the custom
configuration file.

Thomas
Pieter De Gendt Oct. 1, 2020, 7:29 a.m. UTC | #2
Hi Thomas,

Thanks for the feedback, see my comments below.

On Wed, Sep 30, 2020 at 9:57 PM Thomas Petazzoni
<thomas.petazzoni@bootlin.com> wrote:
>
> Hello Pieter,
>
> Thanks for the proposal. See below for some questions/comments.
>
> On Mon, 28 Sep 2020 11:29:45 +0200
> Pieter De Gendt <pieter.degendt@gmail.com> wrote:
>
> > diff --git a/package/mbedtls/mbedtls.mk b/package/mbedtls/mbedtls.mk
> > index 5094434e6c..fa74197004 100644
> > --- a/package/mbedtls/mbedtls.mk
> > +++ b/package/mbedtls/mbedtls.mk
> > @@ -68,4 +68,12 @@ else ifeq ($(BR2_microblaze)$(BR2_MIPS_CPU_MIPS32R6)$(BR2_MIPS_CPU_MIPS64R6),y)
> >  MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_DISABLE_ASM
> >  endif
> >
> > +define MBEDTLS_OVERRIDE_CONFIG
> > +     cp $(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG) $(@D)/include/mbedtls/config.h
> > +endef
> > +
> > +ifneq ($(call qstrip,$(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG)),)
> > +MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_OVERRIDE_CONFIG
> > +endif
>
> We prefer to enclose everything in the conditional block, and do the
> qstripping once:
>
> MBEDTLS_CUSTOM_CONFIG = $(call qstrip,$(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG))
>
> ifneq ($(MBEDTLS_CUSTOM_CONFIG),)
> define MBEDTLS_OVERRIDE_CONFIG
>         ..
> endef
> MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_OVERRIDE_CONFIG
> endif

I can adjust that.

>
> However, what bothers me a bit is how it completely overrides all the
> configuration logic that takes place before in mbedtls.mk. For example,
> if you enable BR2_PACKAGE_MBEDTLS_COMPRESSION=y and use your option to
> have a custom configuration file, then what
> BR2_PACKAGE_MBEDTLS_COMPRESSION=y does will be ignored.
>
> So, we would have to make BR2_PACKAGE_MBEDTLS_COMPRESSION disappear
> when BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG, but then, how do you bring zlib
> as a build dependency of mbedtls ?
>
> We need to decide if the custom configuration file should override all
> tweaks, or if all tweaks should be applied on top of the custom
> configuration file.

I understand why you are bothered with completely overriding the configuration,
however I couldn't think of a workable alternative. There are a lot of
settings in the
config.h file. See: https://tls.mbed.org/api/config_8h.html

Agreed, there are more settings that don't require altering the
dependency chain,
but exposing all in buildroot would be a lot of work and hard to maintain?

Applying tweaks on the custom config also feels a bit awkward, since
you already
took the effort of creating the custom config and the "sed" commands might not
even apply.

>
> Thomas
> --
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com

Let me know how we can move forward with something you agree with.

Best regards,
Pieter
Yann E. MORIN Oct. 1, 2020, 7:31 p.m. UTC | #3
Pieter, Thomas, All,

On 2020-10-01 09:29 +0200, Pieter De Gendt spake thusly:
> On Wed, Sep 30, 2020 at 9:57 PM Thomas Petazzoni
> <thomas.petazzoni@bootlin.com> wrote:
> > On Mon, 28 Sep 2020 11:29:45 +0200
> > Pieter De Gendt <pieter.degendt@gmail.com> wrote:
> > > diff --git a/package/mbedtls/mbedtls.mk b/package/mbedtls/mbedtls.mk
> > > index 5094434e6c..fa74197004 100644
> > > --- a/package/mbedtls/mbedtls.mk
> > > +++ b/package/mbedtls/mbedtls.mk
> > > @@ -68,4 +68,12 @@ else ifeq ($(BR2_microblaze)$(BR2_MIPS_CPU_MIPS32R6)$(BR2_MIPS_CPU_MIPS64R6),y)
> > >  MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_DISABLE_ASM
> > >  endif
> > >
> > > +define MBEDTLS_OVERRIDE_CONFIG
> > > +     cp $(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG) $(@D)/include/mbedtls/config.h
> > > +endef
> > > +
> > > +ifneq ($(call qstrip,$(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG)),)
> > > +MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_OVERRIDE_CONFIG
> > > +endif
[--SNIP--]
> > However, what bothers me a bit is how it completely overrides all the
> > configuration logic that takes place before in mbedtls.mk. For example,
> > if you enable BR2_PACKAGE_MBEDTLS_COMPRESSION=y and use your option to
> > have a custom configuration file, then what
> > BR2_PACKAGE_MBEDTLS_COMPRESSION=y does will be ignored.
> >
> > So, we would have to make BR2_PACKAGE_MBEDTLS_COMPRESSION disappear
> > when BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG, but then, how do you bring zlib
> > as a build dependency of mbedtls ?
> >
> > We need to decide if the custom configuration file should override all
> > tweaks, or if all tweaks should be applied on top of the custom
> > configuration file.
> 
> I understand why you are bothered with completely overriding the configuration,
> however I couldn't think of a workable alternative. There are a lot of
> settings in the
> config.h file. See: https://tls.mbed.org/api/config_8h.html
> 
> Agreed, there are more settings that don't require altering the
> dependency chain,
> but exposing all in buildroot would be a lot of work and hard to maintain?
> 
> Applying tweaks on the custom config also feels a bit awkward, since
> you already
> took the effort of creating the custom config and the "sed" commands might not
> even apply.

But that is what we are doing with the user-provided configuration files
for:
  - uClibc-ng
  - the linux kernel
  - busybox
  - uboot
  - and probably a few others as well...

So it would feel natural that we do the same for mbedtls, so that there
is a consistent behaviour across the board.

Regards,
Yann E. MORIN.
Pieter De Gendt Oct. 2, 2020, 7:16 a.m. UTC | #4
Hi Yann,

See comment below.

On Thu, Oct 1, 2020 at 9:31 PM Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>
> Pieter, Thomas, All,
>
> On 2020-10-01 09:29 +0200, Pieter De Gendt spake thusly:
> > On Wed, Sep 30, 2020 at 9:57 PM Thomas Petazzoni
> > <thomas.petazzoni@bootlin.com> wrote:
> > > On Mon, 28 Sep 2020 11:29:45 +0200
> > > Pieter De Gendt <pieter.degendt@gmail.com> wrote:
> > > > diff --git a/package/mbedtls/mbedtls.mk b/package/mbedtls/mbedtls.mk
> > > > index 5094434e6c..fa74197004 100644
> > > > --- a/package/mbedtls/mbedtls.mk
> > > > +++ b/package/mbedtls/mbedtls.mk
> > > > @@ -68,4 +68,12 @@ else ifeq ($(BR2_microblaze)$(BR2_MIPS_CPU_MIPS32R6)$(BR2_MIPS_CPU_MIPS64R6),y)
> > > >  MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_DISABLE_ASM
> > > >  endif
> > > >
> > > > +define MBEDTLS_OVERRIDE_CONFIG
> > > > +     cp $(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG) $(@D)/include/mbedtls/config.h
> > > > +endef
> > > > +
> > > > +ifneq ($(call qstrip,$(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG)),)
> > > > +MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_OVERRIDE_CONFIG
> > > > +endif
> [--SNIP--]
> > > However, what bothers me a bit is how it completely overrides all the
> > > configuration logic that takes place before in mbedtls.mk. For example,
> > > if you enable BR2_PACKAGE_MBEDTLS_COMPRESSION=y and use your option to
> > > have a custom configuration file, then what
> > > BR2_PACKAGE_MBEDTLS_COMPRESSION=y does will be ignored.
> > >
> > > So, we would have to make BR2_PACKAGE_MBEDTLS_COMPRESSION disappear
> > > when BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG, but then, how do you bring zlib
> > > as a build dependency of mbedtls ?
> > >
> > > We need to decide if the custom configuration file should override all
> > > tweaks, or if all tweaks should be applied on top of the custom
> > > configuration file.
> >
> > I understand why you are bothered with completely overriding the configuration,
> > however I couldn't think of a workable alternative. There are a lot of
> > settings in the
> > config.h file. See: https://tls.mbed.org/api/config_8h.html
> >
> > Agreed, there are more settings that don't require altering the
> > dependency chain,
> > but exposing all in buildroot would be a lot of work and hard to maintain?
> >
> > Applying tweaks on the custom config also feels a bit awkward, since
> > you already
> > took the effort of creating the custom config and the "sed" commands might not
> > even apply.
>
> But that is what we are doing with the user-provided configuration files
> for:
>   - uClibc-ng
>   - the linux kernel
>   - busybox
>   - uboot
>   - and probably a few others as well...
>
> So it would feel natural that we do the same for mbedtls, so that there
> is a consistent behaviour across the board.
>
> Regards,
> Yann E. MORIN.
>
> --
> .-----------------.--------------------.------------------.--------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> | +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> '------------------------------^-------^------------------^--------------------'

The packages you list have a kconfig provided by the package itself,
for mbedtls it's
simply a header file. Do you suggest adding this, and maintaining it
within buildroot?

Regards,
Pieter
Yann E. MORIN Oct. 4, 2020, 7:43 p.m. UTC | #5
Pieter, All,

On 2020-10-02 09:16 +0200, Pieter De Gendt spake thusly:
> On Thu, Oct 1, 2020 at 9:31 PM Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> > On 2020-10-01 09:29 +0200, Pieter De Gendt spake thusly:
> > > Applying tweaks on the custom config also feels a bit awkward, since
> > > you already
> > > took the effort of creating the custom config and the "sed" commands might not
> > > even apply.
> > But that is what we are doing with the user-provided configuration files
> > for:
> >   - uClibc-ng
> >   - the linux kernel
> >   - busybox
> >   - uboot
> >   - and probably a few others as well...
[--SNIP--]
> The packages you list have a kconfig provided by the package itself,
> for mbedtls it's
> simply a header file. Do you suggest adding this, and maintaining it
> within buildroot?

What I suggest, and what I think Thomas would also suggest, is that the
user-supplied configuration file is copied over the one bundled in the
mbedtls source tree, then our tweaks are applied.

If the user does not supply any configuration file, we do as we do
today.

Basically, tht would be that patch (mbedtls.mk only):

    diff --git a/package/mbedtls/mbedtls.mk b/package/mbedtls/mbedtls.mk
    index 5094434e6c..487fe9a310 100644
    --- a/package/mbedtls/mbedtls.mk
    +++ b/package/mbedtls/mbedtls.mk
    @@ -13,6 +13,14 @@ MBEDTLS_INSTALL_STAGING = YES
     MBEDTLS_LICENSE = Apache-2.0
     MBEDTLS_LICENSE_FILES = apache-2.0.txt
     
    +MBEDTLS_CONFIG_H = $(call qstrip,$(BR2_PACKAGE_MBEDTLS_CONFIG_H))
    +ifneq ($(MBEDTLS_CONFIG_H),)
    +define MBEDTLS_INSTALL_CONFIG_H
    +	cp $(MBEDTLS_INSTALL_CONFIG_H) $(@D)/include/mbedtls/config.h
    +endef
    +MBEDTLS_POST_PATCH_HOOKS += MBEDTLS_INSTALL_CONFIG_H
    +endif
    +
     # This is mandatory for hiawatha
     ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
     define MBEDTLS_ENABLE_THREADING

Note however, that mbedtls uses a mix of _POST_PATCH and _POST_CONFIGURE
hooks to tweak config.h; this is not very sound. Instead, they should all
be switched over to using _POST_CONFIGURE hooks, except for hte copy of
the user supplied file, which should stay a post-patch hook.

Regards,
Yann E. MORIN.
diff mbox series

Patch

diff --git a/package/mbedtls/Config.in b/package/mbedtls/Config.in
index a39ba65d98..b5000f422d 100644
--- a/package/mbedtls/Config.in
+++ b/package/mbedtls/Config.in
@@ -29,4 +29,16 @@  config BR2_PACKAGE_MBEDTLS_COMPRESSION
 	  sure CRIME and similar attacks are not applicable to your
 	  particular situation.
 
+config BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG
+	string "mbedtls custom configuration"
+	help
+	  Mbed TLS should build out-of-the box on a large variety of
+	  platforms. However, you may need to adjust a few platform-
+	  specific settings or want to customize the set of features
+	  that will be built. You can do all of this in a single
+	  configuration file.
+
+	  Provide the location of the custom configuration file or
+	  leave this empty to keep the default.
+
 endif
diff --git a/package/mbedtls/mbedtls.mk b/package/mbedtls/mbedtls.mk
index 5094434e6c..fa74197004 100644
--- a/package/mbedtls/mbedtls.mk
+++ b/package/mbedtls/mbedtls.mk
@@ -68,4 +68,12 @@  else ifeq ($(BR2_microblaze)$(BR2_MIPS_CPU_MIPS32R6)$(BR2_MIPS_CPU_MIPS64R6),y)
 MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_DISABLE_ASM
 endif
 
+define MBEDTLS_OVERRIDE_CONFIG
+	cp $(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG) $(@D)/include/mbedtls/config.h
+endef
+
+ifneq ($(call qstrip,$(BR2_PACKAGE_MBEDTLS_CUSTOM_CONFIG)),)
+MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_OVERRIDE_CONFIG
+endif
+
 $(eval $(cmake-package))