On Thu, Nov 30, 2023 at 6:38 PM Kang Wenlin <wenlin.k...@windriver.com>
wrote:

>
> On 12/1/2023 00:54, Khem Raj wrote:
> > CAUTION: This email comes from a non Wind River email account!
> > Do not click links or open attachments unless you recognize the sender
> and know the content is safe.
> >
> > On Thu, Nov 30, 2023 at 12:31 AM wenlin.k...@windriver.com via
> > lists.yoctoproject.org
> > <wenlin.kang=windriver....@lists.yoctoproject.org> wrote:
> >> From: Wenlin Kang <wenlin.k...@windriver.com>
> >>
> >> Steps to reproduce
> >>    1) add layer meta-mingw
> >>    2) add line in local.conf
> >>       SDKMACHINE = "x86_64-mingw32"
> >>    3) bitbake nativesdk-libxcrypt
> >>
> >> Fixed:
> >> 1. .symver error
> >>    | {standard input}: Assembler messages:
> >>    | {standard input}:4: Error: unknown pseudo-op: `.symver'
> >>
> >> 2. pedantic error
> >>    | ../git/lib/crypt.c:316:24: error: ISO C does not allow extra ';'
> outside of a function [-Werror=pedantic]
> >>    |   316 | SYMVER_crypt_gensalt_rn;
> >>    |       |
> >>
> >> 3. conversion error
> >>    | ../git/lib/util-get-random-bytes.c: In function
> '_crypt_get_random_bytes':
> >>    | ../git/lib/util-get-random-bytes.c:140:42: error: conversion from
> 'size_t' {aka 'long long unsigned int'} to 'unsigned int' may change value
> [-Werror=conversion]
> >>    |   140 |           ssize_t nread = read (fd, buf, buflen);
> >>
> >> Signed-off-by: Wenlin Kang <wenlin.k...@windriver.com>
> >> ---
> >>   .../0001-Fix-for-compilation-on-Windows.patch | 37 +++++++++++++++
> >>   ...dom-bytes.c-fixed-conversion-error-w.patch | 47 +++++++++++++++++++
> >>   recipes-core/libxcrypt/libxcrypt_%.bbappend   |  7 +++
> >>   3 files changed, 91 insertions(+)
> >>   create mode 100644
> recipes-core/libxcrypt/libxcrypt/0001-Fix-for-compilation-on-Windows.patch
> >>   create mode 100644
> recipes-core/libxcrypt/libxcrypt/0001-lib-util-get-random-bytes.c-fixed-conversion-error-w.patch
> >>   create mode 100644 recipes-core/libxcrypt/libxcrypt_%.bbappend
> >>
> >> diff --git
> a/recipes-core/libxcrypt/libxcrypt/0001-Fix-for-compilation-on-Windows.patch
> b/recipes-core/libxcrypt/libxcrypt/0001-Fix-for-compilation-on-Windows.patch
> >> new file mode 100644
> >> index 0000000..5760ee0
> >> --- /dev/null
> >> +++
> b/recipes-core/libxcrypt/libxcrypt/0001-Fix-for-compilation-on-Windows.patch
> >> @@ -0,0 +1,37 @@
> >> +From a507b628a5a5d4e4f1cf0f0a9a72967470ee7624 Mon Sep 17 00:00:00 2001
> >> +From: Brecht Sanders <bre...@sanders.org>
> >> +Date: Fri, 3 Feb 2023 08:44:49 +0100
> >> +Subject: [PATCH] Fix for compilation on Windows
> >> +
> >> +This fix allows the library to build on Windows (at least with
> MinGW-w64).
> >> +
> >> +`.symver` is only supported for ELF format but Windows uses COFF/PE.
> >> +
> >> +Workaround dummy define of `symver_set()`
> >> +
> >> +Upstream-Status: Backport [
> https://github.com/besser82/libxcrypt/commit/a507b628a5a5d4e4f1cf0f0a9a72967470ee7624
> ]
> >> +
> >> +Signed-off-by: Wenlin Kang <wenlin.k...@windriver.com>
> >> +---
> >> + lib/crypt-port.h | 5 +++++
> >> + 1 file changed, 5 insertions(+)
> >> +
> >> +diff --git a/lib/crypt-port.h b/lib/crypt-port.h
> >> +index f06ca24..a707939 100644
> >> +--- a/lib/crypt-port.h
> >> ++++ b/lib/crypt-port.h
> >> +@@ -201,6 +201,11 @@ extern size_t strcpy_or_abort (void *dst, size_t
> d_size, const void *src);
> >> +   __asm__(".globl _" extstr);                           \
> >> +   __asm__(".set _" extstr ", _" #intname)
> >> +
> >> ++#elif defined _WIN32
> >> ++
> >> ++/* .symver is only supported for ELF format, Windows uses COFF/PE */
> >> ++# define symver_set(extstr, intname, version, mode)
> >> ++
> >> + #elif defined __GNUC__ && __GNUC__ >= 3
> >> +
> >> + # define _strong_alias(name, aliasname) \
> >> +--
> >> +2.34.1
> >> +
> >> diff --git
> a/recipes-core/libxcrypt/libxcrypt/0001-lib-util-get-random-bytes.c-fixed-conversion-error-w.patch
> b/recipes-core/libxcrypt/libxcrypt/0001-lib-util-get-random-bytes.c-fixed-conversion-error-w.patch
> >> new file mode 100644
> >> index 0000000..3846f76
> >> --- /dev/null
> >> +++
> b/recipes-core/libxcrypt/libxcrypt/0001-lib-util-get-random-bytes.c-fixed-conversion-error-w.patch
> >> @@ -0,0 +1,47 @@
> >> +From ff99091eb8a6b9e6edc567f6d2552183fbaacec3 Mon Sep 17 00:00:00 2001
> >> +From: Wenlin Kang <wenlin.k...@windriver.com>
> >> +Date: Mon, 6 Nov 2023 14:43:28 +0800
> >> +Subject: [PATCH] lib/util-get-random-bytes.c: fixed conversion error
> with
> >> + mingw
> >> +
> >> +With x86_64-w64-mingw32-gcc. get below error:
> >> +| ../git/lib/util-get-random-bytes.c: In function
> '_crypt_get_random_bytes':
> >> +| ../git/lib/util-get-random-bytes.c:140:42: error: conversion from
> 'size_t' {aka 'long long unsigned int'} to 'unsigned int' may change value
> [-Werror=conversion]
> >> +|   140 |           ssize_t nread = read (fd, buf, buflen);
> >> +|       |                                          ^~~~~~
> >> +
> >> +In util-get-random-bytes.c, has get_random_bytes(void *buf, size_t
> buflen),
> >> +but in mingw-w64-mingw-w64/mingw-w64-headers/crt/io.h, read() has
> "unsigned int"
> >> +read(int _FileHandle,void *_DstBuf,unsigned int _MaxCharCount), and
> has:
> >> + #ifdef _WIN64
> >> +   __MINGW_EXTENSION typedef unsigned __int64 size_t;
> >> + #else
> >> +   typedef unsigned int size_t;
> >> + #endif /* _WIN64 */
> >> +
> >> +Upstream-Status: Pending
> >> +
> >> +Signed-off-by: Wenlin Kang <wenlin.k...@windriver.com>
> >> +---
> >> + lib/util-get-random-bytes.c | 4 ++++
> >> + 1 file changed, 4 insertions(+)
> >> +
> >> +diff --git a/lib/util-get-random-bytes.c b/lib/util-get-random-bytes.c
> >> +index 79816db..68cd378 100644
> >> +--- a/lib/util-get-random-bytes.c
> >> ++++ b/lib/util-get-random-bytes.c
> >> +@@ -137,7 +137,11 @@ get_random_bytes(void *buf, size_t buflen)
> >> +         dev_urandom_doesnt_work = true;
> >> +       else
> >> +         {
> >> ++#ifdef _WIN64
> >> ++          ssize_t nread = read (fd, buf, (unsigned int)buflen);
> >> ++#else
> >> +           ssize_t nread = read (fd, buf, buflen);
> >> ++#endif
> > read is system API and I wonder why we are not getting right API
> > signature here as I think
> > size_t should already be defined based on _WIN64 in system headers.
>
>
> 1. read() is declared in
>
> https://sourceforge.net/p/mingw-w64/code/HEAD/tree/trunk/mingw-w64-headers/crt/io.h,
>
> but it has only a declaration for 32-bit,  with 64-bit, it can't be found


Ok it will be good to bring this to upstream’s notice

>
>
> 2. for size_t, it has:
>
> #ifdef _WIN64
>    __MINGW_EXTENSION typedef __int64 ssize_t;
> #else
>    typedef int ssize_t;
> #endif /* _WIN64 */
>
>
> >
> >> +           if (nread < 0 || (size_t)nread < buflen)
> >> +             dev_urandom_doesnt_work = true;
> >> +
> >> +--
> >> +2.25.1
> >> +
> >> diff --git a/recipes-core/libxcrypt/libxcrypt_%.bbappend
> b/recipes-core/libxcrypt/libxcrypt_%.bbappend
> >> new file mode 100644
> >> index 0000000..cb9c45e
> >> --- /dev/null
> >> +++ b/recipes-core/libxcrypt/libxcrypt_%.bbappend
> >> @@ -0,0 +1,7 @@
> >> +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
> >> +
> >> +SRC_URI:append:mingw32 =
> "file://0001-Fix-for-compilation-on-Windows.patch \
> >> +
> file://0001-lib-util-get-random-bytes.c-fixed-conversion-error-w.patch \
> >> +"
> >> +
> >> +CFLAGS:append:class-nativesdk:mingw32 = " -Wno-pedantic"
> >> --
> >> 2.39.0
> >>
> >>
> >> 
> >>
> --
> --
> Thanks
> Wenlin Kang
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#61785): https://lists.yoctoproject.org/g/yocto/message/61785
Mute This Topic: https://lists.yoctoproject.org/mt/102890384/21656
Group Owner: yocto+ow...@lists.yoctoproject.org
Unsubscribe: https://lists.yoctoproject.org/g/yocto/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to