diff mbox series

[meta-networking] mbedtls: fix builds with crypto extensions

Message ID 20230626115040.71199-1-beniaminsandu@gmail.com
State Under Review
Headers show
Series [meta-networking] mbedtls: fix builds with crypto extensions | expand

Commit Message

Beniamin Sandu June 26, 2023, 11:50 a.m. UTC
Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
---
 ...cify-an-arch-version-when-enabling-c.patch | 33 ++++++++++++++++++
 ...t-target-attribute-when-building-wit.patch | 34 +++++++++++++++++++
 .../mbedtls/mbedtls_3.4.0.bb                  |  8 ++---
 3 files changed, 70 insertions(+), 5 deletions(-)
 create mode 100644 meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
 create mode 100644 meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch

Comments

Khem Raj June 26, 2023, 12:12 p.m. UTC | #1
On Mon, Jun 26, 2023 at 1:51 PM Beniamin Sandu <beniaminsandu@gmail.com> wrote:
>
> Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
> ---
>  ...cify-an-arch-version-when-enabling-c.patch | 33 ++++++++++++++++++
>  ...t-target-attribute-when-building-wit.patch | 34 +++++++++++++++++++
>  .../mbedtls/mbedtls_3.4.0.bb                  |  8 ++---
>  3 files changed, 70 insertions(+), 5 deletions(-)
>  create mode 100644 meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
>  create mode 100644 meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
>
> diff --git a/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
> new file mode 100644
> index 000000000..d98d8fa57
> --- /dev/null
> +++ b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
> @@ -0,0 +1,33 @@
> +From 2246925e3cb16183e25d4e2cfd13fb800df86270 Mon Sep 17 00:00:00 2001
> +From: Beniamin Sandu <beniaminsandu@gmail.com>
> +Date: Sun, 25 Jun 2023 19:58:08 +0300
> +Subject: [PATCH] aesce: do not specify an arch version when enabling crypto
> + instructions
> +
> +Building mbedtls with different aarch64 tuning variations revealed
> +that we should use the crypto extensions without forcing a particular
> +architecture version or core, as that can create issues.
> +
> +Upstream-Status: Submitted [https://github.com/Mbed-TLS/mbedtls/pull/7834]
> +
> +Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
> +---
> + library/aesce.c | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/library/aesce.c b/library/aesce.c
> +index fe056dc4c..843de3973 100644
> +--- a/library/aesce.c
> ++++ b/library/aesce.c
> +@@ -60,7 +60,7 @@
> + #           error "A more recent GCC is required for MBEDTLS_AESCE_C"
> + #       endif
> + #       pragma GCC push_options
> +-#       pragma GCC target ("arch=armv8-a+crypto")

I think you need so add something similar for clang case as well.

> ++#       pragma GCC target ("+crypto")
> + #       define MBEDTLS_POP_TARGET_PRAGMA
> + #   else
> + #       error "Only GCC and Clang supported for MBEDTLS_AESCE_C"
> +--
> +2.25.1
> +
> diff --git a/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
> new file mode 100644
> index 000000000..4775c8ddb
> --- /dev/null
> +++ b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
> @@ -0,0 +1,34 @@
> +From 03d3523f974536f2358047382aadb0d4cc762f8a Mon Sep 17 00:00:00 2001
> +From: Beniamin Sandu <beniaminsandu@gmail.com>
> +Date: Mon, 26 Jun 2023 12:07:21 +0300
> +Subject: [PATCH] aesce: use correct target attribute when building with clang
> +
> +Seems clang has its own issues when it comes to crypto extensions,
> +and right now the best way to avoid them is to accurately enable
> +the needed instructions instead of the broad crypto feature.
> +
> +E.g.: https://github.com/llvm/llvm-project/issues/61645
> +
> +Upstream-Status: Pending
> +
> +Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
> +---
> + library/aesce.c | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/library/aesce.c b/library/aesce.c
> +index 843de3973..7bea088ba 100644
> +--- a/library/aesce.c
> ++++ b/library/aesce.c
> +@@ -53,7 +53,7 @@
> + #       if __clang_major__ < 4
> + #           error "A more recent Clang is required for MBEDTLS_AESCE_C"
> + #       endif
> +-#       pragma clang attribute push (__attribute__((target("crypto"))), apply_to=function)
> ++#       pragma clang attribute push (__attribute__((target("aes"))), apply_to=function)
> + #       define MBEDTLS_POP_TARGET_PRAGMA
> + #   elif defined(__GNUC__)
> + #       if __GNUC__ < 6
> +--
> +2.25.1
> +
> diff --git a/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb b/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
> index ebc6ba573..b8c9662de 100644
> --- a/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
> +++ b/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
> @@ -25,8 +25,9 @@ SECTION = "libs"
>  S = "${WORKDIR}/git"
>  SRCREV = "1873d3bfc2da771672bd8e7e8f41f57e0af77f33"
>  SRC_URI = "git://github.com/ARMmbed/mbedtls.git;protocol=https;branch=master \
> -           file://run-ptest \
> -          "
> +       file://0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch \
> +       file://0002-aesce-use-correct-target-attribute-when-building-wit.patch \
> +       file://run-ptest"
>
>  inherit cmake update-alternatives ptest
>
> @@ -41,9 +42,6 @@ PACKAGECONFIG[tests] = "-DENABLE_TESTING=ON,-DENABLE_TESTING=OFF"
>
>  EXTRA_OECMAKE = "-DLIB_INSTALL_DIR:STRING=${libdir}"
>
> -# Needs crypto instructions on aarch64
> -TUNE_CCARGS_MARCH_OPTS:append:aarch64 = "${@bb.utils.contains('TUNE_FEATURES', 'crypto', '', '+crypto', d)}"
> -

It will be good to turn this into a parse warning or note and ignore
to build this recipe if crypro is not available on armv8+ tune
selection.

>  # For now the only way to enable PSA is to explicitly pass a -D via CFLAGS
>  CFLAGS:append = "${@bb.utils.contains('PACKAGECONFIG', 'psa', ' -DMBEDTLS_USE_PSA_CRYPTO', '', d)}"
>
> --
> 2.25.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#103575): https://lists.openembedded.org/g/openembedded-devel/message/103575
> Mute This Topic: https://lists.openembedded.org/mt/99785788/1997914
> Group Owner: openembedded-devel+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Beniamin Sandu June 26, 2023, 12:50 p.m. UTC | #2
On Mon, 26 Jun 2023, 15:12 Khem Raj, <raj.khem@gmail.com> wrote:

> On Mon, Jun 26, 2023 at 1:51 PM Beniamin Sandu <beniaminsandu@gmail.com>
> wrote:
> >
> > Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
> > ---
> >  ...cify-an-arch-version-when-enabling-c.patch | 33 ++++++++++++++++++
> >  ...t-target-attribute-when-building-wit.patch | 34 +++++++++++++++++++
> >  .../mbedtls/mbedtls_3.4.0.bb                  |  8 ++---
> >  3 files changed, 70 insertions(+), 5 deletions(-)
> >  create mode 100644
> meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
> >  create mode 100644
> meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
> >
> > diff --git
> a/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
> > new file mode 100644
> > index 000000000..d98d8fa57
> > --- /dev/null
> > +++
> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
> > @@ -0,0 +1,33 @@
> > +From 2246925e3cb16183e25d4e2cfd13fb800df86270 Mon Sep 17 00:00:00 2001
> > +From: Beniamin Sandu <beniaminsandu@gmail.com>
> > +Date: Sun, 25 Jun 2023 19:58:08 +0300
> > +Subject: [PATCH] aesce: do not specify an arch version when enabling
> crypto
> > + instructions
> > +
> > +Building mbedtls with different aarch64 tuning variations revealed
> > +that we should use the crypto extensions without forcing a particular
> > +architecture version or core, as that can create issues.
> > +
> > +Upstream-Status: Submitted [
> https://github.com/Mbed-TLS/mbedtls/pull/7834]
> > +
> > +Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
> > +---
> > + library/aesce.c | 2 +-
> > + 1 file changed, 1 insertion(+), 1 deletion(-)
> > +
> > +diff --git a/library/aesce.c b/library/aesce.c
> > +index fe056dc4c..843de3973 100644
> > +--- a/library/aesce.c
> > ++++ b/library/aesce.c
> > +@@ -60,7 +60,7 @@
> > + #           error "A more recent GCC is required for MBEDTLS_AESCE_C"
> > + #       endif
> > + #       pragma GCC push_options
> > +-#       pragma GCC target ("arch=armv8-a+crypto")
>
> I think you need so add something similar for clang case as well.
>

There is 2 patches, I have included one for clang too.


> > ++#       pragma GCC target ("+crypto")
> > + #       define MBEDTLS_POP_TARGET_PRAGMA
> > + #   else
> > + #       error "Only GCC and Clang supported for MBEDTLS_AESCE_C"
> > +--
> > +2.25.1
> > +
> > diff --git
> a/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
> > new file mode 100644
> > index 000000000..4775c8ddb
> > --- /dev/null
> > +++
> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
> > @@ -0,0 +1,34 @@
> > +From 03d3523f974536f2358047382aadb0d4cc762f8a Mon Sep 17 00:00:00 2001
> > +From: Beniamin Sandu <beniaminsandu@gmail.com>
> > +Date: Mon, 26 Jun 2023 12:07:21 +0300
> > +Subject: [PATCH] aesce: use correct target attribute when building with
> clang
> > +
> > +Seems clang has its own issues when it comes to crypto extensions,
> > +and right now the best way to avoid them is to accurately enable
> > +the needed instructions instead of the broad crypto feature.
> > +
> > +E.g.: https://github.com/llvm/llvm-project/issues/61645
> > +
> > +Upstream-Status: Pending
> > +
> > +Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
> > +---
> > + library/aesce.c | 2 +-
> > + 1 file changed, 1 insertion(+), 1 deletion(-)
> > +
> > +diff --git a/library/aesce.c b/library/aesce.c
> > +index 843de3973..7bea088ba 100644
> > +--- a/library/aesce.c
> > ++++ b/library/aesce.c
> > +@@ -53,7 +53,7 @@
> > + #       if __clang_major__ < 4
> > + #           error "A more recent Clang is required for MBEDTLS_AESCE_C"
> > + #       endif
> > +-#       pragma clang attribute push
> (__attribute__((target("crypto"))), apply_to=function)
> > ++#       pragma clang attribute push (__attribute__((target("aes"))),
> apply_to=function)
> > + #       define MBEDTLS_POP_TARGET_PRAGMA
> > + #   elif defined(__GNUC__)
> > + #       if __GNUC__ < 6
> > +--
> > +2.25.1
> > +
> > diff --git a/meta-networking/recipes-connectivity/mbedtls/
> mbedtls_3.4.0.bb b/meta-networking/recipes-connectivity/mbedtls/
> mbedtls_3.4.0.bb
> > index ebc6ba573..b8c9662de 100644
> > --- a/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
> > +++ b/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
> > @@ -25,8 +25,9 @@ SECTION = "libs"
> >  S = "${WORKDIR}/git"
> >  SRCREV = "1873d3bfc2da771672bd8e7e8f41f57e0af77f33"
> >  SRC_URI = "git://
> github.com/ARMmbed/mbedtls.git;protocol=https;branch=master \
> > -           file://run-ptest \
> > -          "
> > +
>  file://0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch \
> > +
>  file://0002-aesce-use-correct-target-attribute-when-building-wit.patch \
> > +       file://run-ptest"
> >
> >  inherit cmake update-alternatives ptest
> >
> > @@ -41,9 +42,6 @@ PACKAGECONFIG[tests] =
> "-DENABLE_TESTING=ON,-DENABLE_TESTING=OFF"
> >
> >  EXTRA_OECMAKE = "-DLIB_INSTALL_DIR:STRING=${libdir}"
> >
> > -# Needs crypto instructions on aarch64
> > -TUNE_CCARGS_MARCH_OPTS:append:aarch64 =
> "${@bb.utils.contains('TUNE_FEATURES', 'crypto', '', '+crypto', d)}"
> > -
>
> It will be good to turn this into a parse warning or note and ignore
> to build this recipe if crypro is not available on armv8+ tune
> selection.
>

This is not needed anymore, as the flags are specified from source code in
both cases, so it should now work with all tune variations, with or without
crypto.


> >  # For now the only way to enable PSA is to explicitly pass a -D via
> CFLAGS
> >  CFLAGS:append = "${@bb.utils.contains('PACKAGECONFIG', 'psa', '
> -DMBEDTLS_USE_PSA_CRYPTO', '', d)}"
> >
> > --
> > 2.25.1
> >
> >
> > -=-=-=-=-=-=-=-=-=-=-=-
> > Links: You receive all messages sent to this group.
> > View/Reply Online (#103575):
> https://lists.openembedded.org/g/openembedded-devel/message/103575
> > Mute This Topic: https://lists.openembedded.org/mt/99785788/1997914
> > Group Owner: openembedded-devel+owner@lists.openembedded.org
> > Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [
> raj.khem@gmail.com]
> > -=-=-=-=-=-=-=-=-=-=-=-
> >
>
Khem Raj June 26, 2023, 1 p.m. UTC | #3
On Mon, Jun 26, 2023 at 2:50 PM Beniamin Sandu <beniaminsandu@gmail.com>
wrote:

> On Mon, 26 Jun 2023, 15:12 Khem Raj, <raj.khem@gmail.com> wrote:
>
>> On Mon, Jun 26, 2023 at 1:51 PM Beniamin Sandu <beniaminsandu@gmail.com>
>> wrote:
>> >
>> > Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
>> > ---
>> >  ...cify-an-arch-version-when-enabling-c.patch | 33 ++++++++++++++++++
>> >  ...t-target-attribute-when-building-wit.patch | 34 +++++++++++++++++++
>> >  .../mbedtls/mbedtls_3.4.0.bb                  |  8 ++---
>> >  3 files changed, 70 insertions(+), 5 deletions(-)
>> >  create mode 100644
>> meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
>> >  create mode 100644
>> meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
>> >
>> > diff --git
>> a/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
>> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
>> > new file mode 100644
>> > index 000000000..d98d8fa57
>> > --- /dev/null
>> > +++
>> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
>> > @@ -0,0 +1,33 @@
>> > +From 2246925e3cb16183e25d4e2cfd13fb800df86270 Mon Sep 17 00:00:00 2001
>> > +From: Beniamin Sandu <beniaminsandu@gmail.com>
>> > +Date: Sun, 25 Jun 2023 19:58:08 +0300
>> > +Subject: [PATCH] aesce: do not specify an arch version when enabling
>> crypto
>> > + instructions
>> > +
>> > +Building mbedtls with different aarch64 tuning variations revealed
>> > +that we should use the crypto extensions without forcing a particular
>> > +architecture version or core, as that can create issues.
>> > +
>> > +Upstream-Status: Submitted [
>> https://github.com/Mbed-TLS/mbedtls/pull/7834]
>> > +
>> > +Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
>> > +---
>> > + library/aesce.c | 2 +-
>> > + 1 file changed, 1 insertion(+), 1 deletion(-)
>> > +
>> > +diff --git a/library/aesce.c b/library/aesce.c
>> > +index fe056dc4c..843de3973 100644
>> > +--- a/library/aesce.c
>> > ++++ b/library/aesce.c
>> > +@@ -60,7 +60,7 @@
>> > + #           error "A more recent GCC is required for MBEDTLS_AESCE_C"
>> > + #       endif
>> > + #       pragma GCC push_options
>> > +-#       pragma GCC target ("arch=armv8-a+crypto")
>>
>> I think you need so add something similar for clang case as well.
>>
>
> There is 2 patches, I have included one for clang too.
>
>
>> > ++#       pragma GCC target ("+crypto")
>> > + #       define MBEDTLS_POP_TARGET_PRAGMA
>> > + #   else
>> > + #       error "Only GCC and Clang supported for MBEDTLS_AESCE_C"
>> > +--
>> > +2.25.1
>> > +
>> > diff --git
>> a/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
>> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
>> > new file mode 100644
>> > index 000000000..4775c8ddb
>> > --- /dev/null
>> > +++
>> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
>> > @@ -0,0 +1,34 @@
>> > +From 03d3523f974536f2358047382aadb0d4cc762f8a Mon Sep 17 00:00:00 2001
>> > +From: Beniamin Sandu <beniaminsandu@gmail.com>
>> > +Date: Mon, 26 Jun 2023 12:07:21 +0300
>> > +Subject: [PATCH] aesce: use correct target attribute when building
>> with clang
>> > +
>> > +Seems clang has its own issues when it comes to crypto extensions,
>> > +and right now the best way to avoid them is to accurately enable
>> > +the needed instructions instead of the broad crypto feature.
>> > +
>> > +E.g.: https://github.com/llvm/llvm-project/issues/61645
>> > +
>> > +Upstream-Status: Pending
>> > +
>> > +Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
>> > +---
>> > + library/aesce.c | 2 +-
>> > + 1 file changed, 1 insertion(+), 1 deletion(-)
>> > +
>> > +diff --git a/library/aesce.c b/library/aesce.c
>> > +index 843de3973..7bea088ba 100644
>> > +--- a/library/aesce.c
>> > ++++ b/library/aesce.c
>> > +@@ -53,7 +53,7 @@
>> > + #       if __clang_major__ < 4
>> > + #           error "A more recent Clang is required for
>> MBEDTLS_AESCE_C"
>> > + #       endif
>> > +-#       pragma clang attribute push
>> (__attribute__((target("crypto"))), apply_to=function)
>> > ++#       pragma clang attribute push (__attribute__((target("aes"))),
>> apply_to=function)
>> > + #       define MBEDTLS_POP_TARGET_PRAGMA
>> > + #   elif defined(__GNUC__)
>> > + #       if __GNUC__ < 6
>> > +--
>> > +2.25.1
>> > +
>> > diff --git a/meta-networking/recipes-connectivity/mbedtls/
>> mbedtls_3.4.0.bb b/meta-networking/recipes-connectivity/mbedtls/
>> mbedtls_3.4.0.bb
>> > index ebc6ba573..b8c9662de 100644
>> > --- a/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
>> > +++ b/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
>> > @@ -25,8 +25,9 @@ SECTION = "libs"
>> >  S = "${WORKDIR}/git"
>> >  SRCREV = "1873d3bfc2da771672bd8e7e8f41f57e0af77f33"
>> >  SRC_URI = "git://
>> github.com/ARMmbed/mbedtls.git;protocol=https;branch=master \
>> > -           file://run-ptest \
>> > -          "
>> > +
>>  file://0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch \
>> > +
>>  file://0002-aesce-use-correct-target-attribute-when-building-wit.patch \
>> > +       file://run-ptest"
>> >
>> >  inherit cmake update-alternatives ptest
>> >
>> > @@ -41,9 +42,6 @@ PACKAGECONFIG[tests] =
>> "-DENABLE_TESTING=ON,-DENABLE_TESTING=OFF"
>> >
>> >  EXTRA_OECMAKE = "-DLIB_INSTALL_DIR:STRING=${libdir}"
>> >
>> > -# Needs crypto instructions on aarch64
>> > -TUNE_CCARGS_MARCH_OPTS:append:aarch64 =
>> "${@bb.utils.contains('TUNE_FEATURES', 'crypto', '', '+crypto', d)}"
>> > -
>>
>> It will be good to turn this into a parse warning or note and ignore
>> to build this recipe if crypro is not available on armv8+ tune
>> selection.
>>
>
> This is not needed anymore, as the flags are specified from source code in
> both cases, so it should now work with all tune variations, with or without
> crypto.
>

Compile will work but will it run on a cpu without crypto

>
>
>> >  # For now the only way to enable PSA is to explicitly pass a -D via
>> CFLAGS
>> >  CFLAGS:append = "${@bb.utils.contains('PACKAGECONFIG', 'psa', '
>> -DMBEDTLS_USE_PSA_CRYPTO', '', d)}"
>> >
>> > --
>> > 2.25.1
>> >
>> >
>> > -=-=-=-=-=-=-=-=-=-=-=-
>> > Links: You receive all messages sent to this group.
>> > View/Reply Online (#103575):
>> https://lists.openembedded.org/g/openembedded-devel/message/103575
>> > Mute This Topic: https://lists.openembedded.org/mt/99785788/1997914
>> > Group Owner: openembedded-devel+owner@lists.openembedded.org
>> > Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub
>> [raj.khem@gmail.com]
>> > -=-=-=-=-=-=-=-=-=-=-=-
>> >
>>
>
Beniamin Sandu June 26, 2023, 1:05 p.m. UTC | #4
On Mon, 26 Jun 2023, 16:00 Khem Raj, <raj.khem@gmail.com> wrote:

>
>
> On Mon, Jun 26, 2023 at 2:50 PM Beniamin Sandu <beniaminsandu@gmail.com>
> wrote:
>
>> On Mon, 26 Jun 2023, 15:12 Khem Raj, <raj.khem@gmail.com> wrote:
>>
>>> On Mon, Jun 26, 2023 at 1:51 PM Beniamin Sandu <beniaminsandu@gmail.com>
>>> wrote:
>>> >
>>> > Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
>>> > ---
>>> >  ...cify-an-arch-version-when-enabling-c.patch | 33 ++++++++++++++++++
>>> >  ...t-target-attribute-when-building-wit.patch | 34 +++++++++++++++++++
>>> >  .../mbedtls/mbedtls_3.4.0.bb                  |  8 ++---
>>> >  3 files changed, 70 insertions(+), 5 deletions(-)
>>> >  create mode 100644
>>> meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
>>> >  create mode 100644
>>> meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
>>> >
>>> > diff --git
>>> a/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
>>> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
>>> > new file mode 100644
>>> > index 000000000..d98d8fa57
>>> > --- /dev/null
>>> > +++
>>> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
>>> > @@ -0,0 +1,33 @@
>>> > +From 2246925e3cb16183e25d4e2cfd13fb800df86270 Mon Sep 17 00:00:00 2001
>>> > +From: Beniamin Sandu <beniaminsandu@gmail.com>
>>> > +Date: Sun, 25 Jun 2023 19:58:08 +0300
>>> > +Subject: [PATCH] aesce: do not specify an arch version when enabling
>>> crypto
>>> > + instructions
>>> > +
>>> > +Building mbedtls with different aarch64 tuning variations revealed
>>> > +that we should use the crypto extensions without forcing a particular
>>> > +architecture version or core, as that can create issues.
>>> > +
>>> > +Upstream-Status: Submitted [
>>> https://github.com/Mbed-TLS/mbedtls/pull/7834]
>>> > +
>>> > +Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
>>> > +---
>>> > + library/aesce.c | 2 +-
>>> > + 1 file changed, 1 insertion(+), 1 deletion(-)
>>> > +
>>> > +diff --git a/library/aesce.c b/library/aesce.c
>>> > +index fe056dc4c..843de3973 100644
>>> > +--- a/library/aesce.c
>>> > ++++ b/library/aesce.c
>>> > +@@ -60,7 +60,7 @@
>>> > + #           error "A more recent GCC is required for MBEDTLS_AESCE_C"
>>> > + #       endif
>>> > + #       pragma GCC push_options
>>> > +-#       pragma GCC target ("arch=armv8-a+crypto")
>>>
>>> I think you need so add something similar for clang case as well.
>>>
>>
>> There is 2 patches, I have included one for clang too.
>>
>>
>>> > ++#       pragma GCC target ("+crypto")
>>> > + #       define MBEDTLS_POP_TARGET_PRAGMA
>>> > + #   else
>>> > + #       error "Only GCC and Clang supported for MBEDTLS_AESCE_C"
>>> > +--
>>> > +2.25.1
>>> > +
>>> > diff --git
>>> a/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
>>> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
>>> > new file mode 100644
>>> > index 000000000..4775c8ddb
>>> > --- /dev/null
>>> > +++
>>> b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
>>> > @@ -0,0 +1,34 @@
>>> > +From 03d3523f974536f2358047382aadb0d4cc762f8a Mon Sep 17 00:00:00 2001
>>> > +From: Beniamin Sandu <beniaminsandu@gmail.com>
>>> > +Date: Mon, 26 Jun 2023 12:07:21 +0300
>>> > +Subject: [PATCH] aesce: use correct target attribute when building
>>> with clang
>>> > +
>>> > +Seems clang has its own issues when it comes to crypto extensions,
>>> > +and right now the best way to avoid them is to accurately enable
>>> > +the needed instructions instead of the broad crypto feature.
>>> > +
>>> > +E.g.: https://github.com/llvm/llvm-project/issues/61645
>>> > +
>>> > +Upstream-Status: Pending
>>> > +
>>> > +Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
>>> > +---
>>> > + library/aesce.c | 2 +-
>>> > + 1 file changed, 1 insertion(+), 1 deletion(-)
>>> > +
>>> > +diff --git a/library/aesce.c b/library/aesce.c
>>> > +index 843de3973..7bea088ba 100644
>>> > +--- a/library/aesce.c
>>> > ++++ b/library/aesce.c
>>> > +@@ -53,7 +53,7 @@
>>> > + #       if __clang_major__ < 4
>>> > + #           error "A more recent Clang is required for
>>> MBEDTLS_AESCE_C"
>>> > + #       endif
>>> > +-#       pragma clang attribute push
>>> (__attribute__((target("crypto"))), apply_to=function)
>>> > ++#       pragma clang attribute push (__attribute__((target("aes"))),
>>> apply_to=function)
>>> > + #       define MBEDTLS_POP_TARGET_PRAGMA
>>> > + #   elif defined(__GNUC__)
>>> > + #       if __GNUC__ < 6
>>> > +--
>>> > +2.25.1
>>> > +
>>> > diff --git a/meta-networking/recipes-connectivity/mbedtls/
>>> mbedtls_3.4.0.bb b/meta-networking/recipes-connectivity/mbedtls/
>>> mbedtls_3.4.0.bb
>>> > index ebc6ba573..b8c9662de 100644
>>> > --- a/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
>>> > +++ b/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
>>> > @@ -25,8 +25,9 @@ SECTION = "libs"
>>> >  S = "${WORKDIR}/git"
>>> >  SRCREV = "1873d3bfc2da771672bd8e7e8f41f57e0af77f33"
>>> >  SRC_URI = "git://
>>> github.com/ARMmbed/mbedtls.git;protocol=https;branch=master \
>>> > -           file://run-ptest \
>>> > -          "
>>> > +
>>>  file://0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch \
>>> > +
>>>  file://0002-aesce-use-correct-target-attribute-when-building-wit.patch \
>>> > +       file://run-ptest"
>>> >
>>> >  inherit cmake update-alternatives ptest
>>> >
>>> > @@ -41,9 +42,6 @@ PACKAGECONFIG[tests] =
>>> "-DENABLE_TESTING=ON,-DENABLE_TESTING=OFF"
>>> >
>>> >  EXTRA_OECMAKE = "-DLIB_INSTALL_DIR:STRING=${libdir}"
>>> >
>>> > -# Needs crypto instructions on aarch64
>>> > -TUNE_CCARGS_MARCH_OPTS:append:aarch64 =
>>> "${@bb.utils.contains('TUNE_FEATURES', 'crypto', '', '+crypto', d)}"
>>> > -
>>>
>>> It will be good to turn this into a parse warning or note and ignore
>>> to build this recipe if crypro is not available on armv8+ tune
>>> selection.
>>>
>>
>> This is not needed anymore, as the flags are specified from source code
>> in both cases, so it should now work with all tune variations, with or
>> without crypto.
>>
>
> Compile will work but will it run on a cpu without crypto
>

I have run the ptest collection on a couple of variations (with/without
crypto), and it seemed fine.


>>
>>> >  # For now the only way to enable PSA is to explicitly pass a -D via
>>> CFLAGS
>>> >  CFLAGS:append = "${@bb.utils.contains('PACKAGECONFIG', 'psa', '
>>> -DMBEDTLS_USE_PSA_CRYPTO', '', d)}"
>>> >
>>> > --
>>> > 2.25.1
>>> >
>>> >
>>> > -=-=-=-=-=-=-=-=-=-=-=-
>>> > Links: You receive all messages sent to this group.
>>> > View/Reply Online (#103575):
>>> https://lists.openembedded.org/g/openembedded-devel/message/103575
>>> > Mute This Topic: https://lists.openembedded.org/mt/99785788/1997914
>>> > Group Owner: openembedded-devel+owner@lists.openembedded.org
>>> > Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub
>>> [raj.khem@gmail.com]
>>> > -=-=-=-=-=-=-=-=-=-=-=-
>>> >
>>>
>>
diff mbox series

Patch

diff --git a/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
new file mode 100644
index 000000000..d98d8fa57
--- /dev/null
+++ b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
@@ -0,0 +1,33 @@ 
+From 2246925e3cb16183e25d4e2cfd13fb800df86270 Mon Sep 17 00:00:00 2001
+From: Beniamin Sandu <beniaminsandu@gmail.com>
+Date: Sun, 25 Jun 2023 19:58:08 +0300
+Subject: [PATCH] aesce: do not specify an arch version when enabling crypto
+ instructions
+
+Building mbedtls with different aarch64 tuning variations revealed
+that we should use the crypto extensions without forcing a particular
+architecture version or core, as that can create issues.
+
+Upstream-Status: Submitted [https://github.com/Mbed-TLS/mbedtls/pull/7834]
+
+Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
+---
+ library/aesce.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/library/aesce.c b/library/aesce.c
+index fe056dc4c..843de3973 100644
+--- a/library/aesce.c
++++ b/library/aesce.c
+@@ -60,7 +60,7 @@
+ #           error "A more recent GCC is required for MBEDTLS_AESCE_C"
+ #       endif
+ #       pragma GCC push_options
+-#       pragma GCC target ("arch=armv8-a+crypto")
++#       pragma GCC target ("+crypto")
+ #       define MBEDTLS_POP_TARGET_PRAGMA
+ #   else
+ #       error "Only GCC and Clang supported for MBEDTLS_AESCE_C"
+-- 
+2.25.1
+
diff --git a/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
new file mode 100644
index 000000000..4775c8ddb
--- /dev/null
+++ b/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
@@ -0,0 +1,34 @@ 
+From 03d3523f974536f2358047382aadb0d4cc762f8a Mon Sep 17 00:00:00 2001
+From: Beniamin Sandu <beniaminsandu@gmail.com>
+Date: Mon, 26 Jun 2023 12:07:21 +0300
+Subject: [PATCH] aesce: use correct target attribute when building with clang
+
+Seems clang has its own issues when it comes to crypto extensions,
+and right now the best way to avoid them is to accurately enable
+the needed instructions instead of the broad crypto feature.
+
+E.g.: https://github.com/llvm/llvm-project/issues/61645
+
+Upstream-Status: Pending
+
+Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
+---
+ library/aesce.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/library/aesce.c b/library/aesce.c
+index 843de3973..7bea088ba 100644
+--- a/library/aesce.c
++++ b/library/aesce.c
+@@ -53,7 +53,7 @@
+ #       if __clang_major__ < 4
+ #           error "A more recent Clang is required for MBEDTLS_AESCE_C"
+ #       endif
+-#       pragma clang attribute push (__attribute__((target("crypto"))), apply_to=function)
++#       pragma clang attribute push (__attribute__((target("aes"))), apply_to=function)
+ #       define MBEDTLS_POP_TARGET_PRAGMA
+ #   elif defined(__GNUC__)
+ #       if __GNUC__ < 6
+-- 
+2.25.1
+
diff --git a/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb b/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
index ebc6ba573..b8c9662de 100644
--- a/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
+++ b/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.0.bb
@@ -25,8 +25,9 @@  SECTION = "libs"
 S = "${WORKDIR}/git"
 SRCREV = "1873d3bfc2da771672bd8e7e8f41f57e0af77f33"
 SRC_URI = "git://github.com/ARMmbed/mbedtls.git;protocol=https;branch=master \
-           file://run-ptest \
-          "
+	file://0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch \
+	file://0002-aesce-use-correct-target-attribute-when-building-wit.patch \
+	file://run-ptest"
 
 inherit cmake update-alternatives ptest
 
@@ -41,9 +42,6 @@  PACKAGECONFIG[tests] = "-DENABLE_TESTING=ON,-DENABLE_TESTING=OFF"
 
 EXTRA_OECMAKE = "-DLIB_INSTALL_DIR:STRING=${libdir}"
 
-# Needs crypto instructions on aarch64
-TUNE_CCARGS_MARCH_OPTS:append:aarch64 = "${@bb.utils.contains('TUNE_FEATURES', 'crypto', '', '+crypto', d)}"
-
 # For now the only way to enable PSA is to explicitly pass a -D via CFLAGS
 CFLAGS:append = "${@bb.utils.contains('PACKAGECONFIG', 'psa', ' -DMBEDTLS_USE_PSA_CRYPTO', '', d)}"