* [PATCH] systemd-boot: Fix build on musl
@ 2023-08-09 21:02 Khem Raj
2023-08-10 13:05 ` [OE-core] " Alexandre Belloni
0 siblings, 1 reply; 6+ messages in thread
From: Khem Raj @ 2023-08-09 21:02 UTC (permalink / raw)
To: openembedded-core; +Cc: Khem Raj
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
.../0001-efi-Use-char16_t-on-musl.patch | 79 +++++++++++++++++++
meta/recipes-core/systemd/systemd-boot_254.bb | 2 +
2 files changed, 81 insertions(+)
create mode 100644 meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
diff --git a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
new file mode 100644
index 00000000000..1988d50ac90
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
@@ -0,0 +1,79 @@
+From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 8 Aug 2023 00:57:12 -0700
+Subject: [PATCH] efi: Use char16_t on musl
+
+musl does not support configurations with under-sized definitions of
+types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can
+represent the full range of values are supported. musl does however
+have the C11 uchar.h functions which can operate on char16_t, so you
+could use char16_t and the corresponding c16 conversion functions
+instead of the wc versions
+
+Upstream-Status: Inappropriate [Musl specific]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/boot/efi/efi-string.c | 2 +-
+ src/boot/efi/efi.h | 2 ++
+ src/boot/efi/meson.build | 1 -
+ src/fundamental/string-util-fundamental.h | 4 ++++
+ 4 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c
+index 4400591255..421b2c262d 100644
+--- a/src/boot/efi/efi-string.c
++++ b/src/boot/efi/efi-string.c
+@@ -735,7 +735,7 @@ static bool handle_format_specifier(FormatContext *ctx, SpecifierContext *sp) {
+ case 's':
+ if (sp->long_arg) {
+ sp->wstr = va_arg(ctx->ap, const wchar_t *) ?: L"(null)";
+- sp->len = wcsnlen(sp->wstr, sp->len);
++ sp->len = wcsnlen((char16_t*)sp->wstr, sp->len);
+ } else {
+ sp->str = va_arg(ctx->ap, const char *) ?: "(null)";
+ sp->len = strnlen8(sp->str, sp->len);
+diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h
+index 5c34668383..459f675ea5 100644
+--- a/src/boot/efi/efi.h
++++ b/src/boot/efi/efi.h
+@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1);
+ assert_cc(sizeof(uint16_t) == 2);
+ assert_cc(sizeof(uint32_t) == 4);
+ assert_cc(sizeof(uint64_t) == 8);
++#if defined(__linux__) && defined(__GLIBC__)
+ assert_cc(sizeof(wchar_t) == 2);
++#endif
+ assert_cc(sizeof(char16_t) == 2);
+ assert_cc(sizeof(char32_t) == 4);
+ assert_cc(sizeof(size_t) == sizeof(void *));
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index 1c52629651..4a64838295 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -132,7 +132,6 @@ efi_c_args = [
+ '-DSD_BOOT=1',
+ '-ffreestanding',
+ '-fno-strict-aliasing',
+- '-fshort-wchar',
+ '-include', 'efi_config.h',
+ ]
+
+diff --git a/src/fundamental/string-util-fundamental.h b/src/fundamental/string-util-fundamental.h
+index 9019542b16..1b46f42995 100644
+--- a/src/fundamental/string-util-fundamental.h
++++ b/src/fundamental/string-util-fundamental.h
+@@ -16,7 +16,11 @@
+ # define strncmp strncmp16
+ # define strcasecmp strcasecmp16
+ # define strncasecmp strncasecmp16
++#if defined (__linux__) && !defined(__GLIBC__)
++# define STR_C(str) (u ## str)
++#else
+ # define STR_C(str) (L ## str)
++#endif
+ typedef char16_t sd_char;
+ #else
+ # define STR_C(str) (str)
+--
+2.41.0
+
diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb b/meta/recipes-core/systemd/systemd-boot_254.bb
index 5d69cf83abc..ae86450d2a6 100644
--- a/meta/recipes-core/systemd/systemd-boot_254.bb
+++ b/meta/recipes-core/systemd/systemd-boot_254.bb
@@ -1,6 +1,8 @@
require systemd.inc
FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:"
+SRC_URI:append:libc-musl = " file://0001-efi-Use-char16_t-on-musl.patch "
+
require conf/image-uefi.conf
DEPENDS = "intltool-native libcap util-linux gperf-native python3-jinja2-native python3-pyelftools-native"
--
2.41.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [OE-core] [PATCH] systemd-boot: Fix build on musl
2023-08-09 21:02 [PATCH] systemd-boot: Fix build on musl Khem Raj
@ 2023-08-10 13:05 ` Alexandre Belloni
2023-08-10 14:36 ` Khem Raj
0 siblings, 1 reply; 6+ messages in thread
From: Alexandre Belloni @ 2023-08-10 13:05 UTC (permalink / raw)
To: Khem Raj; +Cc: openembedded-core
Hello,
I tested this with the meson/systemd series from Ross and it actually
breaks the build:
https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio
On 09/08/2023 14:02:27-0700, Khem Raj wrote:
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
> .../0001-efi-Use-char16_t-on-musl.patch | 79 +++++++++++++++++++
> meta/recipes-core/systemd/systemd-boot_254.bb | 2 +
> 2 files changed, 81 insertions(+)
> create mode 100644 meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
>
> diff --git a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> new file mode 100644
> index 00000000000..1988d50ac90
> --- /dev/null
> +++ b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> @@ -0,0 +1,79 @@
> +From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00 2001
> +From: Khem Raj <raj.khem@gmail.com>
> +Date: Tue, 8 Aug 2023 00:57:12 -0700
> +Subject: [PATCH] efi: Use char16_t on musl
> +
> +musl does not support configurations with under-sized definitions of
> +types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can
> +represent the full range of values are supported. musl does however
> +have the C11 uchar.h functions which can operate on char16_t, so you
> +could use char16_t and the corresponding c16 conversion functions
> +instead of the wc versions
> +
> +Upstream-Status: Inappropriate [Musl specific]
> +Signed-off-by: Khem Raj <raj.khem@gmail.com>
> +---
> + src/boot/efi/efi-string.c | 2 +-
> + src/boot/efi/efi.h | 2 ++
> + src/boot/efi/meson.build | 1 -
> + src/fundamental/string-util-fundamental.h | 4 ++++
> + 4 files changed, 7 insertions(+), 2 deletions(-)
> +
> +diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c
> +index 4400591255..421b2c262d 100644
> +--- a/src/boot/efi/efi-string.c
> ++++ b/src/boot/efi/efi-string.c
> +@@ -735,7 +735,7 @@ static bool handle_format_specifier(FormatContext *ctx, SpecifierContext *sp) {
> + case 's':
> + if (sp->long_arg) {
> + sp->wstr = va_arg(ctx->ap, const wchar_t *) ?: L"(null)";
> +- sp->len = wcsnlen(sp->wstr, sp->len);
> ++ sp->len = wcsnlen((char16_t*)sp->wstr, sp->len);
> + } else {
> + sp->str = va_arg(ctx->ap, const char *) ?: "(null)";
> + sp->len = strnlen8(sp->str, sp->len);
> +diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h
> +index 5c34668383..459f675ea5 100644
> +--- a/src/boot/efi/efi.h
> ++++ b/src/boot/efi/efi.h
> +@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1);
> + assert_cc(sizeof(uint16_t) == 2);
> + assert_cc(sizeof(uint32_t) == 4);
> + assert_cc(sizeof(uint64_t) == 8);
> ++#if defined(__linux__) && defined(__GLIBC__)
> + assert_cc(sizeof(wchar_t) == 2);
> ++#endif
> + assert_cc(sizeof(char16_t) == 2);
> + assert_cc(sizeof(char32_t) == 4);
> + assert_cc(sizeof(size_t) == sizeof(void *));
> +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
> +index 1c52629651..4a64838295 100644
> +--- a/src/boot/efi/meson.build
> ++++ b/src/boot/efi/meson.build
> +@@ -132,7 +132,6 @@ efi_c_args = [
> + '-DSD_BOOT=1',
> + '-ffreestanding',
> + '-fno-strict-aliasing',
> +- '-fshort-wchar',
> + '-include', 'efi_config.h',
> + ]
> +
> +diff --git a/src/fundamental/string-util-fundamental.h b/src/fundamental/string-util-fundamental.h
> +index 9019542b16..1b46f42995 100644
> +--- a/src/fundamental/string-util-fundamental.h
> ++++ b/src/fundamental/string-util-fundamental.h
> +@@ -16,7 +16,11 @@
> + # define strncmp strncmp16
> + # define strcasecmp strcasecmp16
> + # define strncasecmp strncasecmp16
> ++#if defined (__linux__) && !defined(__GLIBC__)
> ++# define STR_C(str) (u ## str)
> ++#else
> + # define STR_C(str) (L ## str)
> ++#endif
> + typedef char16_t sd_char;
> + #else
> + # define STR_C(str) (str)
> +--
> +2.41.0
> +
> diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb b/meta/recipes-core/systemd/systemd-boot_254.bb
> index 5d69cf83abc..ae86450d2a6 100644
> --- a/meta/recipes-core/systemd/systemd-boot_254.bb
> +++ b/meta/recipes-core/systemd/systemd-boot_254.bb
> @@ -1,6 +1,8 @@
> require systemd.inc
> FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:"
>
> +SRC_URI:append:libc-musl = " file://0001-efi-Use-char16_t-on-musl.patch "
> +
> require conf/image-uefi.conf
>
> DEPENDS = "intltool-native libcap util-linux gperf-native python3-jinja2-native python3-pyelftools-native"
> --
> 2.41.0
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#185718): https://lists.openembedded.org/g/openembedded-core/message/185718
> Mute This Topic: https://lists.openembedded.org/mt/100652047/3617179
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [OE-core] [PATCH] systemd-boot: Fix build on musl
2023-08-10 13:05 ` [OE-core] " Alexandre Belloni
@ 2023-08-10 14:36 ` Khem Raj
2023-08-10 14:45 ` Khem Raj
0 siblings, 1 reply; 6+ messages in thread
From: Khem Raj @ 2023-08-10 14:36 UTC (permalink / raw)
To: Alexandre Belloni; +Cc: openembedded-core
[-- Attachment #1: Type: text/plain, Size: 5852 bytes --]
On Thu, Aug 10, 2023 at 6:05 AM Alexandre Belloni <
alexandre.belloni@bootlin.com> wrote:
> Hello,
>
> I tested this with the meson/systemd series from Ross and it actually
> breaks the build:
>
>
> https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio
Patch applies only to musl builds did you test a musl + systemd
>
> <https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio>
>
> On 09/08/2023 14:02:27-0700, Khem Raj wrote:
> > Signed-off-by: Khem Raj <raj.khem@gmail.com>
> > ---
> > .../0001-efi-Use-char16_t-on-musl.patch | 79 +++++++++++++++++++
> > meta/recipes-core/systemd/systemd-boot_254.bb | 2 +
> > 2 files changed, 81 insertions(+)
> > create mode 100644
> meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> >
> > diff --git
> a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> > new file mode 100644
> > index 00000000000..1988d50ac90
> > --- /dev/null
> > +++
> b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> > @@ -0,0 +1,79 @@
> > +From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00 2001
> > +From: Khem Raj <raj.khem@gmail.com>
> > +Date: Tue, 8 Aug 2023 00:57:12 -0700
> > +Subject: [PATCH] efi: Use char16_t on musl
> > +
> > +musl does not support configurations with under-sized definitions of
> > +types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can
> > +represent the full range of values are supported. musl does however
> > +have the C11 uchar.h functions which can operate on char16_t, so you
> > +could use char16_t and the corresponding c16 conversion functions
> > +instead of the wc versions
> > +
> > +Upstream-Status: Inappropriate [Musl specific]
> > +Signed-off-by: Khem Raj <raj.khem@gmail.com>
> > +---
> > + src/boot/efi/efi-string.c | 2 +-
> > + src/boot/efi/efi.h | 2 ++
> > + src/boot/efi/meson.build | 1 -
> > + src/fundamental/string-util-fundamental.h | 4 ++++
> > + 4 files changed, 7 insertions(+), 2 deletions(-)
> > +
> > +diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c
> > +index 4400591255..421b2c262d 100644
> > +--- a/src/boot/efi/efi-string.c
> > ++++ b/src/boot/efi/efi-string.c
> > +@@ -735,7 +735,7 @@ static bool handle_format_specifier(FormatContext
> *ctx, SpecifierContext *sp) {
> > + case 's':
> > + if (sp->long_arg) {
> > + sp->wstr = va_arg(ctx->ap, const wchar_t *) ?:
> L"(null)";
> > +- sp->len = wcsnlen(sp->wstr, sp->len);
> > ++ sp->len = wcsnlen((char16_t*)sp->wstr,
> sp->len);
> > + } else {
> > + sp->str = va_arg(ctx->ap, const char *) ?:
> "(null)";
> > + sp->len = strnlen8(sp->str, sp->len);
> > +diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h
> > +index 5c34668383..459f675ea5 100644
> > +--- a/src/boot/efi/efi.h
> > ++++ b/src/boot/efi/efi.h
> > +@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1);
> > + assert_cc(sizeof(uint16_t) == 2);
> > + assert_cc(sizeof(uint32_t) == 4);
> > + assert_cc(sizeof(uint64_t) == 8);
> > ++#if defined(__linux__) && defined(__GLIBC__)
> > + assert_cc(sizeof(wchar_t) == 2);
> > ++#endif
> > + assert_cc(sizeof(char16_t) == 2);
> > + assert_cc(sizeof(char32_t) == 4);
> > + assert_cc(sizeof(size_t) == sizeof(void *));
> > +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
> > +index 1c52629651..4a64838295 100644
> > +--- a/src/boot/efi/meson.build
> > ++++ b/src/boot/efi/meson.build
> > +@@ -132,7 +132,6 @@ efi_c_args = [
> > + '-DSD_BOOT=1',
> > + '-ffreestanding',
> > + '-fno-strict-aliasing',
> > +- '-fshort-wchar',
> > + '-include', 'efi_config.h',
> > + ]
> > +
> > +diff --git a/src/fundamental/string-util-fundamental.h
> b/src/fundamental/string-util-fundamental.h
> > +index 9019542b16..1b46f42995 100644
> > +--- a/src/fundamental/string-util-fundamental.h
> > ++++ b/src/fundamental/string-util-fundamental.h
> > +@@ -16,7 +16,11 @@
> > + # define strncmp strncmp16
> > + # define strcasecmp strcasecmp16
> > + # define strncasecmp strncasecmp16
> > ++#if defined (__linux__) && !defined(__GLIBC__)
> > ++# define STR_C(str) (u ## str)
> > ++#else
> > + # define STR_C(str) (L ## str)
> > ++#endif
> > + typedef char16_t sd_char;
> > + #else
> > + # define STR_C(str) (str)
> > +--
> > +2.41.0
> > +
> > diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb
> b/meta/recipes-core/systemd/systemd-boot_254.bb
> > index 5d69cf83abc..ae86450d2a6 100644
> > --- a/meta/recipes-core/systemd/systemd-boot_254.bb
> > +++ b/meta/recipes-core/systemd/systemd-boot_254.bb
> > @@ -1,6 +1,8 @@
> > require systemd.inc
> > FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:"
> >
> > +SRC_URI:append:libc-musl = " file://0001-efi-Use-char16_t-on-musl.patch
> "
> > +
> > require conf/image-uefi.conf
> >
> > DEPENDS = "intltool-native libcap util-linux gperf-native
> python3-jinja2-native python3-pyelftools-native"
> > --
> > 2.41.0
> >
>
> >
> > -=-=-=-=-=-=-=-=-=-=-=-
> > Links: You receive all messages sent to this group.
> > View/Reply Online (#185718):
> https://lists.openembedded.org/g/openembedded-core/message/185718
> > Mute This Topic: https://lists.openembedded.org/mt/100652047/3617179
> > Group Owner: openembedded-core+owner@lists.openembedded.org
> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> alexandre.belloni@bootlin.com]
> > -=-=-=-=-=-=-=-=-=-=-=-
> >
>
>
> --
> Alexandre Belloni, co-owner and COO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
>
[-- Attachment #2: Type: text/html, Size: 8640 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [OE-core] [PATCH] systemd-boot: Fix build on musl
2023-08-10 14:36 ` Khem Raj
@ 2023-08-10 14:45 ` Khem Raj
2023-08-10 15:01 ` Alexandre Belloni
0 siblings, 1 reply; 6+ messages in thread
From: Khem Raj @ 2023-08-10 14:45 UTC (permalink / raw)
To: Alexandre Belloni; +Cc: openembedded-core
On Thu, Aug 10, 2023 at 7:36 AM Khem Raj <raj.khem@gmail.com> wrote:
>
>
>
> On Thu, Aug 10, 2023 at 6:05 AM Alexandre Belloni <alexandre.belloni@bootlin.com> wrote:
>>
>> Hello,
>>
>> I tested this with the meson/systemd series from Ross and it actually
>> breaks the build:
>>
>> https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio
>
>
> Patch applies only to musl builds did you test a musl + systemd
ah 32bit, let me try to reproduce.
>>
>>
>>
>> On 09/08/2023 14:02:27-0700, Khem Raj wrote:
>> > Signed-off-by: Khem Raj <raj.khem@gmail.com>
>> > ---
>> > .../0001-efi-Use-char16_t-on-musl.patch | 79 +++++++++++++++++++
>> > meta/recipes-core/systemd/systemd-boot_254.bb | 2 +
>> > 2 files changed, 81 insertions(+)
>> > create mode 100644 meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
>> >
>> > diff --git a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
>> > new file mode 100644
>> > index 00000000000..1988d50ac90
>> > --- /dev/null
>> > +++ b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
>> > @@ -0,0 +1,79 @@
>> > +From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00 2001
>> > +From: Khem Raj <raj.khem@gmail.com>
>> > +Date: Tue, 8 Aug 2023 00:57:12 -0700
>> > +Subject: [PATCH] efi: Use char16_t on musl
>> > +
>> > +musl does not support configurations with under-sized definitions of
>> > +types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can
>> > +represent the full range of values are supported. musl does however
>> > +have the C11 uchar.h functions which can operate on char16_t, so you
>> > +could use char16_t and the corresponding c16 conversion functions
>> > +instead of the wc versions
>> > +
>> > +Upstream-Status: Inappropriate [Musl specific]
>> > +Signed-off-by: Khem Raj <raj.khem@gmail.com>
>> > +---
>> > + src/boot/efi/efi-string.c | 2 +-
>> > + src/boot/efi/efi.h | 2 ++
>> > + src/boot/efi/meson.build | 1 -
>> > + src/fundamental/string-util-fundamental.h | 4 ++++
>> > + 4 files changed, 7 insertions(+), 2 deletions(-)
>> > +
>> > +diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c
>> > +index 4400591255..421b2c262d 100644
>> > +--- a/src/boot/efi/efi-string.c
>> > ++++ b/src/boot/efi/efi-string.c
>> > +@@ -735,7 +735,7 @@ static bool handle_format_specifier(FormatContext *ctx, SpecifierContext *sp) {
>> > + case 's':
>> > + if (sp->long_arg) {
>> > + sp->wstr = va_arg(ctx->ap, const wchar_t *) ?: L"(null)";
>> > +- sp->len = wcsnlen(sp->wstr, sp->len);
>> > ++ sp->len = wcsnlen((char16_t*)sp->wstr, sp->len);
>> > + } else {
>> > + sp->str = va_arg(ctx->ap, const char *) ?: "(null)";
>> > + sp->len = strnlen8(sp->str, sp->len);
>> > +diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h
>> > +index 5c34668383..459f675ea5 100644
>> > +--- a/src/boot/efi/efi.h
>> > ++++ b/src/boot/efi/efi.h
>> > +@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1);
>> > + assert_cc(sizeof(uint16_t) == 2);
>> > + assert_cc(sizeof(uint32_t) == 4);
>> > + assert_cc(sizeof(uint64_t) == 8);
>> > ++#if defined(__linux__) && defined(__GLIBC__)
>> > + assert_cc(sizeof(wchar_t) == 2);
>> > ++#endif
>> > + assert_cc(sizeof(char16_t) == 2);
>> > + assert_cc(sizeof(char32_t) == 4);
>> > + assert_cc(sizeof(size_t) == sizeof(void *));
>> > +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
>> > +index 1c52629651..4a64838295 100644
>> > +--- a/src/boot/efi/meson.build
>> > ++++ b/src/boot/efi/meson.build
>> > +@@ -132,7 +132,6 @@ efi_c_args = [
>> > + '-DSD_BOOT=1',
>> > + '-ffreestanding',
>> > + '-fno-strict-aliasing',
>> > +- '-fshort-wchar',
>> > + '-include', 'efi_config.h',
>> > + ]
>> > +
>> > +diff --git a/src/fundamental/string-util-fundamental.h b/src/fundamental/string-util-fundamental.h
>> > +index 9019542b16..1b46f42995 100644
>> > +--- a/src/fundamental/string-util-fundamental.h
>> > ++++ b/src/fundamental/string-util-fundamental.h
>> > +@@ -16,7 +16,11 @@
>> > + # define strncmp strncmp16
>> > + # define strcasecmp strcasecmp16
>> > + # define strncasecmp strncasecmp16
>> > ++#if defined (__linux__) && !defined(__GLIBC__)
>> > ++# define STR_C(str) (u ## str)
>> > ++#else
>> > + # define STR_C(str) (L ## str)
>> > ++#endif
>> > + typedef char16_t sd_char;
>> > + #else
>> > + # define STR_C(str) (str)
>> > +--
>> > +2.41.0
>> > +
>> > diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb b/meta/recipes-core/systemd/systemd-boot_254.bb
>> > index 5d69cf83abc..ae86450d2a6 100644
>> > --- a/meta/recipes-core/systemd/systemd-boot_254.bb
>> > +++ b/meta/recipes-core/systemd/systemd-boot_254.bb
>> > @@ -1,6 +1,8 @@
>> > require systemd.inc
>> > FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:"
>> >
>> > +SRC_URI:append:libc-musl = " file://0001-efi-Use-char16_t-on-musl.patch "
>> > +
>> > require conf/image-uefi.conf
>> >
>> > DEPENDS = "intltool-native libcap util-linux gperf-native python3-jinja2-native python3-pyelftools-native"
>> > --
>> > 2.41.0
>> >
>>
>> >
>> > -=-=-=-=-=-=-=-=-=-=-=-
>> > Links: You receive all messages sent to this group.
>> > View/Reply Online (#185718): https://lists.openembedded.org/g/openembedded-core/message/185718
>> > Mute This Topic: https://lists.openembedded.org/mt/100652047/3617179
>> > Group Owner: openembedded-core+owner@lists.openembedded.org
>> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com]
>> > -=-=-=-=-=-=-=-=-=-=-=-
>> >
>>
>>
>> --
>> Alexandre Belloni, co-owner and COO, Bootlin
>> Embedded Linux and Kernel engineering
>> https://bootlin.com
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [OE-core] [PATCH] systemd-boot: Fix build on musl
2023-08-10 14:45 ` Khem Raj
@ 2023-08-10 15:01 ` Alexandre Belloni
2023-08-10 16:49 ` Khem Raj
0 siblings, 1 reply; 6+ messages in thread
From: Alexandre Belloni @ 2023-08-10 15:01 UTC (permalink / raw)
To: Khem Raj; +Cc: openembedded-core
On 10/08/2023 07:45:16-0700, Khem Raj wrote:
> On Thu, Aug 10, 2023 at 7:36 AM Khem Raj <raj.khem@gmail.com> wrote:
> >
> >
> >
> > On Thu, Aug 10, 2023 at 6:05 AM Alexandre Belloni <alexandre.belloni@bootlin.com> wrote:
> >>
> >> Hello,
> >>
> >> I tested this with the meson/systemd series from Ross and it actually
> >> breaks the build:
> >>
> >> https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio
> >
> >
> > Patch applies only to musl builds did you test a musl + systemd
>
> ah 32bit, let me try to reproduce.
It also happened on qemux86-64:
https://autobuilder.yoctoproject.org/typhoon/#/builders/45/builds/7604/steps/11/logs/stdio
>
> >>
> >>
> >>
> >> On 09/08/2023 14:02:27-0700, Khem Raj wrote:
> >> > Signed-off-by: Khem Raj <raj.khem@gmail.com>
> >> > ---
> >> > .../0001-efi-Use-char16_t-on-musl.patch | 79 +++++++++++++++++++
> >> > meta/recipes-core/systemd/systemd-boot_254.bb | 2 +
> >> > 2 files changed, 81 insertions(+)
> >> > create mode 100644 meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> >> >
> >> > diff --git a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> >> > new file mode 100644
> >> > index 00000000000..1988d50ac90
> >> > --- /dev/null
> >> > +++ b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> >> > @@ -0,0 +1,79 @@
> >> > +From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00 2001
> >> > +From: Khem Raj <raj.khem@gmail.com>
> >> > +Date: Tue, 8 Aug 2023 00:57:12 -0700
> >> > +Subject: [PATCH] efi: Use char16_t on musl
> >> > +
> >> > +musl does not support configurations with under-sized definitions of
> >> > +types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can
> >> > +represent the full range of values are supported. musl does however
> >> > +have the C11 uchar.h functions which can operate on char16_t, so you
> >> > +could use char16_t and the corresponding c16 conversion functions
> >> > +instead of the wc versions
> >> > +
> >> > +Upstream-Status: Inappropriate [Musl specific]
> >> > +Signed-off-by: Khem Raj <raj.khem@gmail.com>
> >> > +---
> >> > + src/boot/efi/efi-string.c | 2 +-
> >> > + src/boot/efi/efi.h | 2 ++
> >> > + src/boot/efi/meson.build | 1 -
> >> > + src/fundamental/string-util-fundamental.h | 4 ++++
> >> > + 4 files changed, 7 insertions(+), 2 deletions(-)
> >> > +
> >> > +diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c
> >> > +index 4400591255..421b2c262d 100644
> >> > +--- a/src/boot/efi/efi-string.c
> >> > ++++ b/src/boot/efi/efi-string.c
> >> > +@@ -735,7 +735,7 @@ static bool handle_format_specifier(FormatContext *ctx, SpecifierContext *sp) {
> >> > + case 's':
> >> > + if (sp->long_arg) {
> >> > + sp->wstr = va_arg(ctx->ap, const wchar_t *) ?: L"(null)";
> >> > +- sp->len = wcsnlen(sp->wstr, sp->len);
> >> > ++ sp->len = wcsnlen((char16_t*)sp->wstr, sp->len);
> >> > + } else {
> >> > + sp->str = va_arg(ctx->ap, const char *) ?: "(null)";
> >> > + sp->len = strnlen8(sp->str, sp->len);
> >> > +diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h
> >> > +index 5c34668383..459f675ea5 100644
> >> > +--- a/src/boot/efi/efi.h
> >> > ++++ b/src/boot/efi/efi.h
> >> > +@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1);
> >> > + assert_cc(sizeof(uint16_t) == 2);
> >> > + assert_cc(sizeof(uint32_t) == 4);
> >> > + assert_cc(sizeof(uint64_t) == 8);
> >> > ++#if defined(__linux__) && defined(__GLIBC__)
> >> > + assert_cc(sizeof(wchar_t) == 2);
> >> > ++#endif
> >> > + assert_cc(sizeof(char16_t) == 2);
> >> > + assert_cc(sizeof(char32_t) == 4);
> >> > + assert_cc(sizeof(size_t) == sizeof(void *));
> >> > +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
> >> > +index 1c52629651..4a64838295 100644
> >> > +--- a/src/boot/efi/meson.build
> >> > ++++ b/src/boot/efi/meson.build
> >> > +@@ -132,7 +132,6 @@ efi_c_args = [
> >> > + '-DSD_BOOT=1',
> >> > + '-ffreestanding',
> >> > + '-fno-strict-aliasing',
> >> > +- '-fshort-wchar',
> >> > + '-include', 'efi_config.h',
> >> > + ]
> >> > +
> >> > +diff --git a/src/fundamental/string-util-fundamental.h b/src/fundamental/string-util-fundamental.h
> >> > +index 9019542b16..1b46f42995 100644
> >> > +--- a/src/fundamental/string-util-fundamental.h
> >> > ++++ b/src/fundamental/string-util-fundamental.h
> >> > +@@ -16,7 +16,11 @@
> >> > + # define strncmp strncmp16
> >> > + # define strcasecmp strcasecmp16
> >> > + # define strncasecmp strncasecmp16
> >> > ++#if defined (__linux__) && !defined(__GLIBC__)
> >> > ++# define STR_C(str) (u ## str)
> >> > ++#else
> >> > + # define STR_C(str) (L ## str)
> >> > ++#endif
> >> > + typedef char16_t sd_char;
> >> > + #else
> >> > + # define STR_C(str) (str)
> >> > +--
> >> > +2.41.0
> >> > +
> >> > diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb b/meta/recipes-core/systemd/systemd-boot_254.bb
> >> > index 5d69cf83abc..ae86450d2a6 100644
> >> > --- a/meta/recipes-core/systemd/systemd-boot_254.bb
> >> > +++ b/meta/recipes-core/systemd/systemd-boot_254.bb
> >> > @@ -1,6 +1,8 @@
> >> > require systemd.inc
> >> > FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:"
> >> >
> >> > +SRC_URI:append:libc-musl = " file://0001-efi-Use-char16_t-on-musl.patch "
> >> > +
> >> > require conf/image-uefi.conf
> >> >
> >> > DEPENDS = "intltool-native libcap util-linux gperf-native python3-jinja2-native python3-pyelftools-native"
> >> > --
> >> > 2.41.0
> >> >
> >>
> >> >
> >> > -=-=-=-=-=-=-=-=-=-=-=-
> >> > Links: You receive all messages sent to this group.
> >> > View/Reply Online (#185718): https://lists.openembedded.org/g/openembedded-core/message/185718
> >> > Mute This Topic: https://lists.openembedded.org/mt/100652047/3617179
> >> > Group Owner: openembedded-core+owner@lists.openembedded.org
> >> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com]
> >> > -=-=-=-=-=-=-=-=-=-=-=-
> >> >
> >>
> >>
> >> --
> >> Alexandre Belloni, co-owner and COO, Bootlin
> >> Embedded Linux and Kernel engineering
> >> https://bootlin.com
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [OE-core] [PATCH] systemd-boot: Fix build on musl
2023-08-10 15:01 ` Alexandre Belloni
@ 2023-08-10 16:49 ` Khem Raj
0 siblings, 0 replies; 6+ messages in thread
From: Khem Raj @ 2023-08-10 16:49 UTC (permalink / raw)
To: Alexandre Belloni; +Cc: openembedded-core
[-- Attachment #1: Type: text/plain, Size: 7250 bytes --]
On Thu, Aug 10, 2023 at 8:01 AM Alexandre Belloni <
alexandre.belloni@bootlin.com> wrote:
> On 10/08/2023 07:45:16-0700, Khem Raj wrote:
> > On Thu, Aug 10, 2023 at 7:36 AM Khem Raj <raj.khem@gmail.com> wrote:
> > >
> > >
> > >
> > > On Thu, Aug 10, 2023 at 6:05 AM Alexandre Belloni <
> alexandre.belloni@bootlin.com> wrote:
> > >>
> > >> Hello,
> > >>
> > >> I tested this with the meson/systemd series from Ross and it actually
> > >> breaks the build:
> > >>
> > >>
> https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio
> > >
> > >
> > > Patch applies only to musl builds did you test a musl + systemd
> >
> > ah 32bit, let me try to reproduce.
>
> It also happened on qemux86-64:
>
>
> https://autobuilder.yoctoproject.org/typhoon/#/builders/45/builds/7604/steps/11/logs/stdio
>
Yeah it’s more of clang vs gcc then 32 vs 64bit in my env
> >
> > >>
> > >>
> > >>
> > >> On 09/08/2023 14:02:27-0700, Khem Raj wrote:
> > >> > Signed-off-by: Khem Raj <raj.khem@gmail.com>
> > >> > ---
> > >> > .../0001-efi-Use-char16_t-on-musl.patch | 79
> +++++++++++++++++++
> > >> > meta/recipes-core/systemd/systemd-boot_254.bb | 2 +
> > >> > 2 files changed, 81 insertions(+)
> > >> > create mode 100644
> meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> > >> >
> > >> > diff --git
> a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> > >> > new file mode 100644
> > >> > index 00000000000..1988d50ac90
> > >> > --- /dev/null
> > >> > +++
> b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch
> > >> > @@ -0,0 +1,79 @@
> > >> > +From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00
> 2001
> > >> > +From: Khem Raj <raj.khem@gmail.com>
> > >> > +Date: Tue, 8 Aug 2023 00:57:12 -0700
> > >> > +Subject: [PATCH] efi: Use char16_t on musl
> > >> > +
> > >> > +musl does not support configurations with under-sized definitions
> of
> > >> > +types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can
> > >> > +represent the full range of values are supported. musl does however
> > >> > +have the C11 uchar.h functions which can operate on char16_t, so
> you
> > >> > +could use char16_t and the corresponding c16 conversion functions
> > >> > +instead of the wc versions
> > >> > +
> > >> > +Upstream-Status: Inappropriate [Musl specific]
> > >> > +Signed-off-by: Khem Raj <raj.khem@gmail.com>
> > >> > +---
> > >> > + src/boot/efi/efi-string.c | 2 +-
> > >> > + src/boot/efi/efi.h | 2 ++
> > >> > + src/boot/efi/meson.build | 1 -
> > >> > + src/fundamental/string-util-fundamental.h | 4 ++++
> > >> > + 4 files changed, 7 insertions(+), 2 deletions(-)
> > >> > +
> > >> > +diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c
> > >> > +index 4400591255..421b2c262d 100644
> > >> > +--- a/src/boot/efi/efi-string.c
> > >> > ++++ b/src/boot/efi/efi-string.c
> > >> > +@@ -735,7 +735,7 @@ static bool
> handle_format_specifier(FormatContext *ctx, SpecifierContext *sp) {
> > >> > + case 's':
> > >> > + if (sp->long_arg) {
> > >> > + sp->wstr = va_arg(ctx->ap, const wchar_t
> *) ?: L"(null)";
> > >> > +- sp->len = wcsnlen(sp->wstr, sp->len);
> > >> > ++ sp->len = wcsnlen((char16_t*)sp->wstr,
> sp->len);
> > >> > + } else {
> > >> > + sp->str = va_arg(ctx->ap, const char *)
> ?: "(null)";
> > >> > + sp->len = strnlen8(sp->str, sp->len);
> > >> > +diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h
> > >> > +index 5c34668383..459f675ea5 100644
> > >> > +--- a/src/boot/efi/efi.h
> > >> > ++++ b/src/boot/efi/efi.h
> > >> > +@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1);
> > >> > + assert_cc(sizeof(uint16_t) == 2);
> > >> > + assert_cc(sizeof(uint32_t) == 4);
> > >> > + assert_cc(sizeof(uint64_t) == 8);
> > >> > ++#if defined(__linux__) && defined(__GLIBC__)
> > >> > + assert_cc(sizeof(wchar_t) == 2);
> > >> > ++#endif
> > >> > + assert_cc(sizeof(char16_t) == 2);
> > >> > + assert_cc(sizeof(char32_t) == 4);
> > >> > + assert_cc(sizeof(size_t) == sizeof(void *));
> > >> > +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
> > >> > +index 1c52629651..4a64838295 100644
> > >> > +--- a/src/boot/efi/meson.build
> > >> > ++++ b/src/boot/efi/meson.build
> > >> > +@@ -132,7 +132,6 @@ efi_c_args = [
> > >> > + '-DSD_BOOT=1',
> > >> > + '-ffreestanding',
> > >> > + '-fno-strict-aliasing',
> > >> > +- '-fshort-wchar',
> > >> > + '-include', 'efi_config.h',
> > >> > + ]
> > >> > +
> > >> > +diff --git a/src/fundamental/string-util-fundamental.h
> b/src/fundamental/string-util-fundamental.h
> > >> > +index 9019542b16..1b46f42995 100644
> > >> > +--- a/src/fundamental/string-util-fundamental.h
> > >> > ++++ b/src/fundamental/string-util-fundamental.h
> > >> > +@@ -16,7 +16,11 @@
> > >> > + # define strncmp strncmp16
> > >> > + # define strcasecmp strcasecmp16
> > >> > + # define strncasecmp strncasecmp16
> > >> > ++#if defined (__linux__) && !defined(__GLIBC__)
> > >> > ++# define STR_C(str) (u ## str)
> > >> > ++#else
> > >> > + # define STR_C(str) (L ## str)
> > >> > ++#endif
> > >> > + typedef char16_t sd_char;
> > >> > + #else
> > >> > + # define STR_C(str) (str)
> > >> > +--
> > >> > +2.41.0
> > >> > +
> > >> > diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb
> b/meta/recipes-core/systemd/systemd-boot_254.bb
> > >> > index 5d69cf83abc..ae86450d2a6 100644
> > >> > --- a/meta/recipes-core/systemd/systemd-boot_254.bb
> > >> > +++ b/meta/recipes-core/systemd/systemd-boot_254.bb
> > >> > @@ -1,6 +1,8 @@
> > >> > require systemd.inc
> > >> > FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:"
> > >> >
> > >> > +SRC_URI:append:libc-musl = "
> file://0001-efi-Use-char16_t-on-musl.patch "
> > >> > +
> > >> > require conf/image-uefi.conf
> > >> >
> > >> > DEPENDS = "intltool-native libcap util-linux gperf-native
> python3-jinja2-native python3-pyelftools-native"
> > >> > --
> > >> > 2.41.0
> > >> >
> > >>
> > >> >
> > >> > -=-=-=-=-=-=-=-=-=-=-=-
> > >> > Links: You receive all messages sent to this group.
> > >> > View/Reply Online (#185718):
> https://lists.openembedded.org/g/openembedded-core/message/185718
> > >> > Mute This Topic:
> https://lists.openembedded.org/mt/100652047/3617179
> > >> > Group Owner: openembedded-core+owner@lists.openembedded.org
> > >> > Unsubscribe:
> https://lists.openembedded.org/g/openembedded-core/unsub [
> alexandre.belloni@bootlin.com]
> > >> > -=-=-=-=-=-=-=-=-=-=-=-
> > >> >
> > >>
> > >>
> > >> --
> > >> Alexandre Belloni, co-owner and COO, Bootlin
> > >> Embedded Linux and Kernel engineering
> > >> https://bootlin.com
>
> --
> Alexandre Belloni, co-owner and COO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
>
[-- Attachment #2: Type: text/html, Size: 11478 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-08-10 16:49 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-09 21:02 [PATCH] systemd-boot: Fix build on musl Khem Raj
2023-08-10 13:05 ` [OE-core] " Alexandre Belloni
2023-08-10 14:36 ` Khem Raj
2023-08-10 14:45 ` Khem Raj
2023-08-10 15:01 ` Alexandre Belloni
2023-08-10 16:49 ` Khem Raj
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox