[ruby-core:119988] [Ruby master Bug#20904] 3.4.0-preview2: Building miniruby.exe fails for mswin32

Issue #20904 has been reported by jun66j5 (Jun Omae). ---------------------------------------- Bug #20904: 3.4.0-preview2: Building miniruby.exe fails for mswin32 https://bugs.ruby-lang.org/issues/20904 * Author: jun66j5 (Jun Omae) * Status: Open * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- I tried to build 3.4.0-preview2 with MSVC x86, however linking miniruby.exe failed with the following eror: ``` linking miniruby.exe Creating library miniruby.lib and object miniruby.exp win32.obj : error LNK2019: unresolved external symbol _GetSystemTimePreciseAsFileTime referenced in function _clock_gettime miniruby.exe : fatal error LNK1120: 1 unresolved externals ``` It doesn't fail with MSVC x64. Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`. Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received. ``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ``` -- https://bugs.ruby-lang.org/

Issue #20904 has been updated by nobu (Nobuyoshi Nakada). Status changed from Open to Feedback jun66j5 (Jun Omae) wrote:
Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`.
Thank you, fixed it by commit:80cfa57234255667a86d46096093099349a7262a.
Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received.
``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ```
I can't reproduce it with: * Visual Studio 2022 Developer Command Prompt v17.12.0 * Windows 11 SDK Version 10.0.26100.0 * Windows 11 [Version 10.0.26100.2314] ---------------------------------------- Bug #20904: 3.4.0-preview2: Building miniruby.exe fails for mswin32 https://bugs.ruby-lang.org/issues/20904#change-110740 * Author: jun66j5 (Jun Omae) * Status: Feedback * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- I tried to build 3.4.0-preview2 with MSVC x86, however linking miniruby.exe failed with the following eror: ``` linking miniruby.exe Creating library miniruby.lib and object miniruby.exp win32.obj : error LNK2019: unresolved external symbol _GetSystemTimePreciseAsFileTime referenced in function _clock_gettime miniruby.exe : fatal error LNK1120: 1 unresolved externals ``` It doesn't fail with MSVC x64. Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`. Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received. ``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ``` -- https://bugs.ruby-lang.org/

Issue #20904 has been updated by jun66j5 (Jun Omae). nobu (Nobuyoshi Nakada) wrote in #note-1:
jun66j5 (Jun Omae) wrote:
Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`.
Thank you, fixed it by commit:80cfa57234255667a86d46096093099349a7262a.
Thanks for the fix!
Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received.
``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ```
I can't reproduce it with: * Visual Studio 2022 Developer Command Prompt v17.12.0 * Windows 11 SDK Version 10.0.26100.0 * Windows 11 [Version 10.0.26100.2314]
Weird. I get the warning on the following environments: * Windows Server 2022 (10.0.20348) on GitHub Actions - Visual Studio 2022 Developer Command Prompt v17.12.0 - Windows SDK: 10.0.26100.0 - See: - x86: https://github.com/jun66j5/ruby-build/actions/runs/11993783074/job/334351096... - x64: https://github.com/jun66j5/ruby-build/actions/runs/11994220038/job/334360086... * Windows 10 22H2 - Visual Studio 2022 Developer Command Prompt v17.12.1 - Windows SDK: 10.0.20348.0 I noticed C4013 warnings for `_finitef` only for x86 by adding -w24013 flag at https://github.com/jun66j5/ruby-build/actions/runs/11993783074/job/334351096...: ``` D:\a\ruby-build\ruby-build\ruby-3.4.0-preview2\vm_insnhelper.c(6432): warning C4013: '_finitef' undefined; assuming extern returning int prism/static_literals.c(504): warning C4013: '_finitef' undefined; assuming extern returning int prism/prism.c(4153): warning C4013: '_finitef' undefined; assuming extern returning int ``` Checking ucrt/corecrt_math.h, the `_finitef` seems to be available for x64 but not x86. ---------------------------------------- Bug #20904: 3.4.0-preview2: Building miniruby.exe fails for mswin32 https://bugs.ruby-lang.org/issues/20904#change-110743 * Author: jun66j5 (Jun Omae) * Status: Feedback * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- I tried to build 3.4.0-preview2 with MSVC x86, however linking miniruby.exe failed with the following eror: ``` linking miniruby.exe Creating library miniruby.lib and object miniruby.exp win32.obj : error LNK2019: unresolved external symbol _GetSystemTimePreciseAsFileTime referenced in function _clock_gettime miniruby.exe : fatal error LNK1120: 1 unresolved externals ``` It doesn't fail with MSVC x64. Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`. Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received. ``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ``` -- https://bugs.ruby-lang.org/

Issue #20904 has been updated by nobu (Nobuyoshi Nakada). jun66j5 (Jun Omae) wrote in #note-3:
Weird. I get the warning on the following environments:
* Windows Server 2022 (10.0.20348) on GitHub Actions - Visual Studio 2022 Developer Command Prompt v17.12.0 - Windows SDK: 10.0.26100.0 - See: - x86: https://github.com/jun66j5/ruby-build/actions/runs/11993783074/job/334351096... - x64: https://github.com/jun66j5/ruby-build/actions/runs/11994220038/job/334360086... * Windows 10 22H2 - Visual Studio 2022 Developer Command Prompt v17.12.1 - Windows SDK: 10.0.20348.0
Weird. Can you reproduce it locally? If so, what is shown by `nmake process.i && findstr "GetSystemTime" process.i`?
I noticed C4013 warnings for `_finitef` only for x86 by adding -w24013 flag at https://github.com/jun66j5/ruby-build/actions/runs/11993783074/job/334351096...:
``` D:\a\ruby-build\ruby-build\ruby-3.4.0-preview2\vm_insnhelper.c(6432): warning C4013: '_finitef' undefined; assuming extern returning int prism/static_literals.c(504): warning C4013: '_finitef' undefined; assuming extern returning int prism/prism.c(4153): warning C4013: '_finitef' undefined; assuming extern returning int ```
Checking ucrt/corecrt_math.h, the `_finitef` seems to be available for x64 but not x86.
It is because https://github.com/ruby/prism/commit/4267161ca7. The latest MSVC seems to define `isinf` as a macro using `fpclassify`, and both seem conform to POSIX and C99. Older versions of MSVC did not full-support C99, so `isinf` might not support `float` argument. @kddnewton, for what version of MSVC is this needed? ---------------------------------------- Bug #20904: 3.4.0-preview2: Building miniruby.exe fails for mswin32 https://bugs.ruby-lang.org/issues/20904#change-110805 * Author: jun66j5 (Jun Omae) * Status: Feedback * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- I tried to build 3.4.0-preview2 with MSVC x86, however linking miniruby.exe failed with the following eror: ``` linking miniruby.exe Creating library miniruby.lib and object miniruby.exp win32.obj : error LNK2019: unresolved external symbol _GetSystemTimePreciseAsFileTime referenced in function _clock_gettime miniruby.exe : fatal error LNK1120: 1 unresolved externals ``` It doesn't fail with MSVC x64. Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`. Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received. ``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ``` -- https://bugs.ruby-lang.org/

Issue #20904 has been updated by nobu (Nobuyoshi Nakada). `_finitef` is state as x64 and ARM/ARM64 only, in https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/finite-fin... ```C int _finitef( float x ); /* x64 and ARM/ARM64 only */ ``` ---------------------------------------- Bug #20904: 3.4.0-preview2: Building miniruby.exe fails for mswin32 https://bugs.ruby-lang.org/issues/20904#change-110806 * Author: jun66j5 (Jun Omae) * Status: Feedback * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- I tried to build 3.4.0-preview2 with MSVC x86, however linking miniruby.exe failed with the following eror: ``` linking miniruby.exe Creating library miniruby.lib and object miniruby.exp win32.obj : error LNK2019: unresolved external symbol _GetSystemTimePreciseAsFileTime referenced in function _clock_gettime miniruby.exe : fatal error LNK1120: 1 unresolved externals ``` It doesn't fail with MSVC x64. Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`. Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received. ``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ``` -- https://bugs.ruby-lang.org/

Issue #20904 has been updated by kddnewton (Kevin Newton). The Prism portion should be fixed by https://github.com/ruby/prism/pull/3270. ---------------------------------------- Bug #20904: 3.4.0-preview2: Building miniruby.exe fails for mswin32 https://bugs.ruby-lang.org/issues/20904#change-110820 * Author: jun66j5 (Jun Omae) * Status: Open * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- I tried to build 3.4.0-preview2 with MSVC x86, however linking miniruby.exe failed with the following eror: ``` linking miniruby.exe Creating library miniruby.lib and object miniruby.exp win32.obj : error LNK2019: unresolved external symbol _GetSystemTimePreciseAsFileTime referenced in function _clock_gettime miniruby.exe : fatal error LNK1120: 1 unresolved externals ``` It doesn't fail with MSVC x64. Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`. Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received. ``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ``` -- https://bugs.ruby-lang.org/

Issue #20904 has been updated by nobu (Nobuyoshi Nakada). kddnewton (Kevin Newton) wrote in #note-7:
The Prism portion should be fixed by https://github.com/ruby/prism/pull/3270.
Does Prism support older than VS 2015 that is the minimum version for ruby 3.4? VS 2015 at least supports the generic `isinf` macro: https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/isinf?view... ---------------------------------------- Bug #20904: 3.4.0-preview2: Building miniruby.exe fails for mswin32 https://bugs.ruby-lang.org/issues/20904#change-110829 * Author: jun66j5 (Jun Omae) * Status: Open * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- I tried to build 3.4.0-preview2 with MSVC x86, however linking miniruby.exe failed with the following eror: ``` linking miniruby.exe Creating library miniruby.lib and object miniruby.exp win32.obj : error LNK2019: unresolved external symbol _GetSystemTimePreciseAsFileTime referenced in function _clock_gettime miniruby.exe : fatal error LNK1120: 1 unresolved externals ``` It doesn't fail with MSVC x64. Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`. Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received. ``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ``` -- https://bugs.ruby-lang.org/

Issue #20904 has been updated by jun66j5 (Jun Omae). nobu (Nobuyoshi Nakada) wrote in #note-4:
Weird. Can you reproduce it locally? If so, what is shown by `nmake process.i && findstr "GetSystemTime" process.i`?
Yes. Reproduced locally. ``` C:\usr\src\x86\ruby-3.4.0-preview2>nmake process.i Microsoft (R) Program Maintenance Utility Version 14.42.34433.0 Copyright (C) Microsoft Corporation. All rights reserved. Could Not Find C:\usr\src\x86\ruby-3.4.0-preview2\baseruby.mk preprocessing process.c process.c C:\usr\src\x86\ruby-3.4.0-preview2>findstr "GetSystemTime" process.i GetSystemTimes( GetSystemTime( GetSystemTimeAsFileTime( GetSystemTimeAdjustment( GetSystemTimeAdjustmentPrecise( timeGetSystemTime( ``` ---------------------------------------- Bug #20904: 3.4.0-preview2: Building miniruby.exe fails for mswin32 https://bugs.ruby-lang.org/issues/20904#change-110860 * Author: jun66j5 (Jun Omae) * Status: Open * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- I tried to build 3.4.0-preview2 with MSVC x86, however linking miniruby.exe failed with the following eror: ``` linking miniruby.exe Creating library miniruby.lib and object miniruby.exp win32.obj : error LNK2019: unresolved external symbol _GetSystemTimePreciseAsFileTime referenced in function _clock_gettime miniruby.exe : fatal error LNK1120: 1 unresolved externals ``` It doesn't fail with MSVC x64. Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`. Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received. ``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ``` -- https://bugs.ruby-lang.org/

Issue #20904 has been updated by nobu (Nobuyoshi Nakada). jun66j5 (Jun Omae) wrote in #note-9:
nobu (Nobuyoshi Nakada) wrote in #note-4:
Weird. Can you reproduce it locally? If so, what is shown by `nmake process.i && findstr "GetSystemTime" process.i`?
Yes. Reproduced locally.
Sorry, I mistook the file name. Try `win32/win32.i` instead of `process.i`. ---------------------------------------- Bug #20904: 3.4.0-preview2: Building miniruby.exe fails for mswin32 https://bugs.ruby-lang.org/issues/20904#change-110921 * Author: jun66j5 (Jun Omae) * Status: Open * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- I tried to build 3.4.0-preview2 with MSVC x86, however linking miniruby.exe failed with the following eror: ``` linking miniruby.exe Creating library miniruby.lib and object miniruby.exp win32.obj : error LNK2019: unresolved external symbol _GetSystemTimePreciseAsFileTime referenced in function _clock_gettime miniruby.exe : fatal error LNK1120: 1 unresolved externals ``` It doesn't fail with MSVC x64. Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`. Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received. ``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ``` -- https://bugs.ruby-lang.org/

Issue #20904 has been updated by jun66j5 (Jun Omae). nobu (Nobuyoshi Nakada) wrote in #note-10:
Try `win32/win32.i` instead of `process.i`.
Okay. ``` C:\usr\src\x86\ruby-3.4.0-preview2>findstr "GetSystemTime" win32\win32.i GetSystemTimes( GetSystemTime( GetSystemTimeAsFileTime( GetSystemTimeAdjustment( GetSystemTimeAdjustmentPrecise( timeGetSystemTime( GetSystemTimePreciseAsFileTime(&ft); GetSystemTimePreciseAsFileTime(&ft); GetSystemTimePreciseAsFileTime(&atime); ``` If running `.\win32\configure.bat` with `--with-ntver=0x0602`: ``` C:\usr\src\x86\ruby-3.4.0-preview2>findstr "GetSystemTime" win32\win32.i GetSystemTimes( GetSystemTime( GetSystemTimeAsFileTime( GetSystemTimeAdjustment( GetSystemTimeAdjustmentPrecise( GetSystemTimePreciseAsFileTime( timeGetSystemTime( GetSystemTimePreciseAsFileTime(&ft); GetSystemTimePreciseAsFileTime(&ft); GetSystemTimePreciseAsFileTime(&atime); ``` ---------------------------------------- Bug #20904: 3.4.0-preview2: Building miniruby.exe fails for mswin32 https://bugs.ruby-lang.org/issues/20904#change-110927 * Author: jun66j5 (Jun Omae) * Status: Open * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- I tried to build 3.4.0-preview2 with MSVC x86, however linking miniruby.exe failed with the following eror: ``` linking miniruby.exe Creating library miniruby.lib and object miniruby.exp win32.obj : error LNK2019: unresolved external symbol _GetSystemTimePreciseAsFileTime referenced in function _clock_gettime miniruby.exe : fatal error LNK1120: 1 unresolved externals ``` It doesn't fail with MSVC x64. Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`. Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received. ``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ``` -- https://bugs.ruby-lang.org/

Issue #20904 has been updated by nobu (Nobuyoshi Nakada). jun66j5 (Jun Omae) wrote in #note-11:
nobu (Nobuyoshi Nakada) wrote in #note-10:
Try `win32/win32.i` instead of `process.i`.
Okay.
Thank you.
If running `.\win32\configure.bat` with `--with-ntver=0x0602`:
``` C:\usr\src\x86\ruby-3.4.0-preview2>findstr "GetSystemTime" win32\win32.i GetSystemTimes( GetSystemTime( GetSystemTimeAsFileTime( GetSystemTimeAdjustment( GetSystemTimeAdjustmentPrecise( GetSystemTimePreciseAsFileTime( timeGetSystemTime( GetSystemTimePreciseAsFileTime(&ft); GetSystemTimePreciseAsFileTime(&ft); GetSystemTimePreciseAsFileTime(&atime); ```
This is the expected result, and it is the default now. It seems I misread and thought that the warning would have been issued even if that option was given. Could you try the latest snapshot (or master branch)? ---------------------------------------- Bug #20904: 3.4.0-preview2: Building miniruby.exe fails for mswin32 https://bugs.ruby-lang.org/issues/20904#change-110930 * Author: jun66j5 (Jun Omae) * Status: Open * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- I tried to build 3.4.0-preview2 with MSVC x86, however linking miniruby.exe failed with the following eror: ``` linking miniruby.exe Creating library miniruby.lib and object miniruby.exp win32.obj : error LNK2019: unresolved external symbol _GetSystemTimePreciseAsFileTime referenced in function _clock_gettime miniruby.exe : fatal error LNK1120: 1 unresolved externals ``` It doesn't fail with MSVC x64. Investigating it, Windows 8 is required after #20563 but `NTVER` is still `0x0600` in `win32/Makefile.sub`. I think it should be `0x0602`. Workaround is to invoke `win32\configure.bat` with `--with-ntver=0x0602`. Also, adding temporarily `-w24013` to `WARNFLAGS` in `win32/Makefile.sub`, the following warning is received. ``` compiling win32/win32.c win32.c win32/win32.c(4789): warning C4013: 'GetSystemTimePreciseAsFileTime' undefined; assuming extern returning int ``` -- https://bugs.ruby-lang.org/
participants (3)
-
jun66j5 (Jun Omae)
-
kddnewton (Kevin Newton)
-
nobu (Nobuyoshi Nakada)