From 54585fd04c1c7f3bcd9e4ee14b3efd1341f47058 Mon Sep 17 00:00:00 2001 From: RestorerZ Date: Tue, 1 Jul 2025 21:30:21 +0200 Subject: [PATCH] patch 9.1.1499: MS-Windows: no indication of ARM64 architecture Problem: MS-Windows: no indication of ARM64 architecture Solution: Add ARM64 to version output and include in nsis installer (RestorerZ) related: vim/vim-win32-installer#381 closes: #17642 Signed-off-by: RestorerZ Signed-off-by: Christian Brabandt --- nsis/Make_mvc.mak | 4 ++++ nsis/Makefile | 4 ++++ nsis/README.txt | 2 ++ nsis/gvim.nsi | 20 ++++++++++++++++++-- src/Make_mvc.mak | 7 ++++++- src/version.c | 18 ++++++++++++++++-- 6 files changed, 50 insertions(+), 5 deletions(-) diff --git a/nsis/Make_mvc.mak b/nsis/Make_mvc.mak index c5aff151b9..8350082b26 100644 --- a/nsis/Make_mvc.mak +++ b/nsis/Make_mvc.mak @@ -46,6 +46,10 @@ MKNSISFLAGS = $(MKNSISFLAGS) /DHAVE_MULTI_LANG=$(HAVE_MULTI_LANG) MKNSISFLAGS = $(MKNSISFLAGS) /DWIN64=$(WIN64) !ENDIF +!IFDEF ARM64 +MKNSISFLAGS = $(MKNSISFLAGS) /DARM64=$(ARM64) +!ENDIF + !IFDEF INCLUDE_LIBGCC MKNSISFLAGS = $(MKNSISFLAGS) /DINCLUDE_LIBGCC=$(INCLUDE_LIBGCC) !ENDIF diff --git a/nsis/Makefile b/nsis/Makefile index fdbc12012f..890ace4ff1 100644 --- a/nsis/Makefile +++ b/nsis/Makefile @@ -39,6 +39,10 @@ ifdef WIN64 MKNSISFLAGS := $(MKNSISFLAGS) -DWIN64=$(WIN64) endif +ifdef ARM64 +MKNSISFLAGS := $(MKNSISFLAGS) -DARM64=$(ARM64) +endif + ifdef INCLUDE_LIBGCC MKNSISFLAGS := $(MKNSISFLAGS) -DINCLUDE_LIBGCC=$(INCLUDE_LIBGCC) endif diff --git a/nsis/README.txt b/nsis/README.txt index 4b4b7a0fbc..3bb32d423a 100644 --- a/nsis/README.txt +++ b/nsis/README.txt @@ -101,6 +101,8 @@ Variables and their values available for building the installer (not mandatory): "HAVE_NLS=0" — do not add native language support. "HAVE_MULTI_LANG=0" — to create an English-only the installer. "WIN64=1" — to create a 64-bit the installer. + "ARM64=1" — to create the installer for ARM64. The WIN64 variable + must be set to 1. "X=" — executes scriptcmd in script. If multiple scriptcmd are specified, they are separated by a semicolon. Example "X=OutFile MyVim.exe;XPMode on" diff --git a/nsis/gvim.nsi b/nsis/gvim.nsi index eef8a12227..04040b4d25 100644 --- a/nsis/gvim.nsi +++ b/nsis/gvim.nsi @@ -53,6 +53,18 @@ Unicode true !define WIN64 0 !endif +# if you want to create the installer for ARM64, use the /DARM64=1 on +# the command line makensis.exe. This property will be set to 1. +!ifndef ARM64 + !define ARM64 0 +!else + !if ${ARM64} > 0 + !if ${WIN64} < 1 + !define /redef WIN64 1 + !endif + !endif +!endif + # if you don't want to include libgcc_s_sjlj-1.dll in the package, use the # switch /DINCLUDE_LIBGCC=0 on the command line makensis.exe. !ifndef INCLUDE_LIBGCC @@ -113,9 +125,13 @@ ${StrRep} !define UNINST_REG_KEY_VIM "${UNINST_REG_KEY}\${PRODUCT}" !if ${WIN64} -Name "${PRODUCT} (x64)" + !if ${ARM64} + Name "${PRODUCT} (ARM64)" + !else + Name "${PRODUCT} (x64)" + !endif !else -Name "${PRODUCT}" + Name "${PRODUCT}" !endif OutFile gvim${VER_MAJOR}${VER_MINOR}.exe CRCCheck force diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak index 08016d423e..64b033178d 100644 --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -342,7 +342,11 @@ MSVCRT_NAME = vcruntime$(MSVCRT_VER) ### Set the default $(WINVER) to make it work with Windows 7 !ifndef WINVER +! if "$(CPU)" == "ARM64" +WINVER = 0x0A00 +! else WINVER = 0x0601 +! endif !endif # Use multiprocess build @@ -571,7 +575,8 @@ CPUNR = sse2 ! error *** ERROR Unknown target architecture "$(CPUNR)". Make aborted. ! endif !elseif "$(CPU)" == "ARM64" -# TODO: Validate CPUNR. +# TODO: Validate CPUNR depending on the VS version. +CPUNR = armv8.0 !endif # Convert processor ID to MVC-compatible number diff --git a/src/version.c b/src/version.c index 23a9f19aac..7181bae96c 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1499, /**/ 1498, /**/ @@ -3926,13 +3928,21 @@ list_version(void) # ifdef FEAT_GUI_MSWIN # ifdef VIMDLL # ifdef _WIN64 - msg_puts(_("\nMS-Windows 64-bit GUI/console version")); +# if defined(_M_ARM64) || defined(_M_ARM64EC) + msg_puts(_("\nMS-Windows ARM64 GUI/console version")); +# else + msg_puts(_("\nMS-Windows 64-bit GUI/console version")); +# endif # else msg_puts(_("\nMS-Windows 32-bit GUI/console version")); # endif # else # ifdef _WIN64 - msg_puts(_("\nMS-Windows 64-bit GUI version")); +# if defined(_M_ARM64) || defined(_M_ARM64EC) + msg_puts(_("\nMS-Windows ARM64 GUI version")); +# else + msg_puts(_("\nMS-Windows 64-bit GUI version")); +# endif # else msg_puts(_("\nMS-Windows 32-bit GUI version")); # endif @@ -3942,7 +3952,11 @@ list_version(void) # endif # else # ifdef _WIN64 +# if defined(_M_ARM64) || defined(_M_ARM64EC) + msg_puts(_("\nMS-Windows ARM64 console version")); +# else msg_puts(_("\nMS-Windows 64-bit console version")); +# endif # else msg_puts(_("\nMS-Windows 32-bit console version")); # endif