diff mbox series

[meta-mingw,kirkstone] libxcrypt: fixed some build error for nativesdk with mingw

Message ID 20231130083122.2970448-1-wenlin.kang@windriver.com
State New
Headers show
Series [meta-mingw,kirkstone] libxcrypt: fixed some build error for nativesdk with mingw | expand

Commit Message

Kang Wenlin Nov. 30, 2023, 8:31 a.m. UTC
From: Wenlin Kang <wenlin.kang@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.kang@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

Comments

Khem Raj Nov. 30, 2023, 4:54 p.m. UTC | #1
On Thu, Nov 30, 2023 at 12:31 AM wenlin.kang@windriver.com via
lists.yoctoproject.org
<wenlin.kang=windriver.com@lists.yoctoproject.org> wrote:
>
> From: Wenlin Kang <wenlin.kang@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.kang@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 <brecht@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.kang@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.kang@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.kang@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.

> +           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
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> You automatically follow any topics you start or reply to.
> View/Reply Online (#61775): https://lists.yoctoproject.org/g/yocto/message/61775
> Mute This Topic: https://lists.yoctoproject.org/mt/102890384/1997914
> Group Owner: yocto+owner@lists.yoctoproject.org
> Unsubscribe: https://lists.yoctoproject.org/g/yocto/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Kang Wenlin Dec. 1, 2023, 2:38 a.m. UTC | #2
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.kang@windriver.com via
> lists.yoctoproject.org
> <wenlin.kang=windriver.com@lists.yoctoproject.org> wrote:
>> From: Wenlin Kang <wenlin.kang@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.kang@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 <brecht@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.kang@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.kang@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.kang@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

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
>>
>>
>> -=-=-=-=-=-=-=-=-=-=-=-
>> Links: You receive all messages sent to this group.
>> You automatically follow any topics you start or reply to.
>> View/Reply Online (#61775): https://lists.yoctoproject.org/g/yocto/message/61775
>> Mute This Topic: https://lists.yoctoproject.org/mt/102890384/1997914
>> Group Owner: yocto+owner@lists.yoctoproject.org
>> Unsubscribe: https://lists.yoctoproject.org/g/yocto/unsub [raj.khem@gmail.com]
>> -=-=-=-=-=-=-=-=-=-=-=-
>>
Khem Raj Dec. 1, 2023, 3 a.m. UTC | #3
On Thu, Nov 30, 2023 at 6:38 PM Kang Wenlin <wenlin.kang@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.kang@windriver.com via
> > lists.yoctoproject.org
> > <wenlin.kang=windriver.com@lists.yoctoproject.org> wrote:
> >> From: Wenlin Kang <wenlin.kang@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.kang@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 <brecht@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.kang@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.kang@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.kang@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
> >>
> >>
> >> -=-=-=-=-=-=-=-=-=-=-=-
> >> Links: You receive all messages sent to this group.
> >> You automatically follow any topics you start or reply to.
> >> View/Reply Online (#61775):
> https://lists.yoctoproject.org/g/yocto/message/61775
> >> Mute This Topic: https://lists.yoctoproject.org/mt/102890384/1997914
> >> Group Owner: yocto+owner@lists.yoctoproject.org
> >> Unsubscribe: https://lists.yoctoproject.org/g/yocto/unsub [
> raj.khem@gmail.com]
> >> -=-=-=-=-=-=-=-=-=-=-=-
> >>
> --
> --
> Thanks
> Wenlin Kang
>
>
diff mbox series

Patch

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 <brecht@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.kang@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.kang@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.kang@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
+           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"