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 |
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] > -=-=-=-=-=-=-=-=-=-=-=- >
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] >> -=-=-=-=-=-=-=-=-=-=-=- >>
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 --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"