Openembedded Core Discussions
 help / color / mirror / Atom feed
* [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

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