@@ -124,10 +124,13 @@ set "TCL_LIBRARY=%TCL_DIR%\lib\tcl%TCL_VER_LONG%"
124
124
@ rem Gettext
125
125
set " GETTEXT_32_URL = https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.23-v1.17/gettext0.23-iconv1.17-shared-32.zip"
126
126
set " GETTEXT_64_URL = https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.23-v1.17/gettext0.23-iconv1.17-shared-64.zip"
127
+ set " INTL_VCPKG = %VCPKG_ROOT% \packages\gettext-libintl_arm64-windows"
128
+ set " ICONV_VCPKG = %VCPKG_ROOT% \packages\libiconv_arm64-windows"
127
129
128
130
@ rem winpty
129
131
set " WINPTY_URL = https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip"
130
132
set " WINPTY_DIR = %DEPENDENCIES% \winpty"
133
+ set " WINPTY_VCPKG = %VCPKG_ROOT% \packages\winpty_arm64-windows"
131
134
132
135
@ rem UPX
133
136
@ rem set "UPX_URL=https://github.com/upx/upx/releases/download/v3.94/upx394w.zip"
@@ -137,6 +140,7 @@ set "SHELLEXECASUSER_URL=https://nsis.sourceforge.io/mediawiki/images/1/1d/Shell
137
140
138
141
@ rem Libsodium
139
142
set " LIBSODIUM_URL = https://github.com/jedisct1/libsodium/releases/download/1.0.20-RELEASE/libsodium-1.0.20-msvc.zip"
143
+ set " LIBSODIUM_SOURCE = https://github.com/jedisct1/libsodium/archive/refs/tags/1.0.20-RELEASE.zip"
140
144
set " SODIUM_DIR = %DEPENDENCIES% \libsodium"
141
145
142
146
@ rem Cygwin
@@ -178,6 +182,21 @@ popd
178
182
if not exist downloads mkdir downloads
179
183
if not exist dependencies mkdir dependencies
180
184
185
+ where vcpkg > nul 2 >& 1
186
+ if %errorlevel% equ 0 goto :skipvcpkg
187
+
188
+ @ rem Install vcpkg for ARM64
189
+ if /I " %PLATFORM% " == " arm64" (
190
+ if not exist %DEPENDENCIES% \vcpkg (
191
+ pushd %DEPENDENCIES%
192
+ git clone --depth 1 https://github.com/microsoft/vcpkg.git
193
+ call vcpkg\bootstrap-vcpkg.bat
194
+ popd
195
+ )
196
+ set " VCPKG_ROOT = %DEPENDENCIES% \vcpkg"
197
+ )
198
+ :skipvcpkg
199
+
181
200
goto :skipcygwin
182
201
@ rem It's not necessary right now
183
202
@ rem Update cygwin and add dependencies
@@ -235,6 +254,7 @@ start "" /W downloads\python3lib-%BIT%.msi /qn TARGETDIR=%PYTHON3_DIR%
235
254
start " " /W downloads\python3dev-%BIT% .msi /qn TARGETDIR=%PYTHON3_DIR%
236
255
237
256
@ rem Ruby
257
+ if /I " %PLATFORM% " == " arm64" goto :skipruby
238
258
@ rem Download RubyInstaller binary
239
259
call :downloadfile " %RUBY_URL% " downloads\ruby-%BIT% .7z
240
260
7z.exe x -y downloads\ruby-%BIT% .7z -o%DEPENDENCIES% \ > nul || exit 1
@@ -253,8 +273,10 @@ call win32\configure.bat
253
273
nmake.exe -l .config.h.time || exit 1
254
274
xcopy /S /Y .ext\include %RUBY_DIR% \include\ruby-%RUBY_API_VER_LONG%
255
275
popd
276
+ :skipruby
256
277
257
278
@ rem Racket
279
+ if /I " %PLATFORM% " == " arm64" goto :skipracket
258
280
call :downloadfile " %RACKET_URL% " downloads\racket-%BIT% .tgz
259
281
7z.exe x -tgzip -so downloads\racket-%BIT% .tgz | 7z.exe x -y -aoa -si -ttar ^
260
282
-o%DEPENDENCIES% \
@@ -263,6 +285,7 @@ type NUL > %RACKET_DIR%\include\bc_suffix.h
263
285
264
286
@ rem Install additional packages for Racket
265
287
raco.exe pkg install -i --auto r5rs-lib
288
+ :skipracket
266
289
267
290
@ rem Install libintl.dll and iconv.dll
268
291
call :downloadfile " %GETTEXT_32_URL% " downloads\gettext32.zip
@@ -273,15 +296,25 @@ call :downloadfile "%GETTEXT_64_URL%" downloads\gettext64.zip
273
296
7z.exe e -y downloads\gettext64.zip ^
274
297
-o%DEPENDENCIES% \gettext64 > nul || exit 1
275
298
299
+ if /I " %PLATFORM% " == " arm64" (
300
+ call :vcpkg gettext
301
+ )
302
+
276
303
@ rem Install winpty
277
- call :downloadfile " %WINPTY_URL% " downloads\winpty.zip
278
- 7z.exe x -y downloads\winpty.zip -o%WINPTY_DIR% > nul || exit 1
279
- if /I " %ARCH% " == " x64" (
280
- call :mklink " vim\src\winpty64.dll" " %WINPTY_DIR% \x64\bin\winpty.dll"
281
- call :mklink " vim\src\winpty-agent.exe" " %WINPTY_DIR% \x64\bin\winpty-agent.exe"
304
+ if /I " %PLATFORM% " == " arm64" (
305
+ call :vcpkg winpty
306
+ call :mklink " vim\src\winpty64.dll" " %WINPTY_VCPKG% \bin\winpty.dll"
307
+ call :mklink " vim\src\winpty-agent.exe" " %WINPTY_VCPKG% \tools\winpty\winpty-agent.exe"
282
308
) else (
283
- call :mklink " vim\src\winpty32.dll" " %WINPTY_DIR% \ia32\bin\winpty.dll"
284
- call :mklink " vim\src\winpty-agent.exe" " %WINPTY_DIR% \ia32\bin\winpty-agent.exe"
309
+ call :downloadfile " %WINPTY_URL% " downloads\winpty.zip
310
+ 7z.exe x -y downloads\winpty.zip -o%WINPTY_DIR% > nul || exit 1
311
+ if /I " %ARCH% " == " x64" (
312
+ call :mklink " vim\src\winpty64.dll" " %WINPTY_DIR% \x64\bin\winpty.dll"
313
+ call :mklink " vim\src\winpty-agent.exe" " %WINPTY_DIR% \x64\bin\winpty-agent.exe"
314
+ ) else (
315
+ call :mklink " vim\src\winpty32.dll" " %WINPTY_DIR% \ia32\bin\winpty.dll"
316
+ call :mklink " vim\src\winpty-agent.exe" " %WINPTY_DIR% \ia32\bin\winpty-agent.exe"
317
+ )
285
318
)
286
319
287
320
@ rem Install UPX
@@ -297,12 +330,24 @@ call :downloadfile "%SHELLEXECASUSER_URL%" downloads\shellexecasuser.zip
297
330
call :mklink " %ProgramFiles(x86)% \NSIS\Plugins\x86-unicode\ShellExecAsUser.dll" " %DEPENDENCIES% \shellexecasuser\unicode\ShellExecAsUser.dll"
298
331
299
332
@ rem Install Libsodium
300
- call :downloadfile " %LIBSODIUM_URL% " downloads\libsodium.zip
301
- 7z.exe x -y downloads\libsodium.zip -o%DEPENDENCIES% \ > nul || exit 1
302
- if /I " %ARCH% " == " x64" (
303
- call :mklink " vim\src\libsodium.dll" " %SODIUM_DIR% \x64\Release\v143\dynamic\libsodium.dll"
333
+ if /I NOT " %PLATFORM% " == " arm64" (
334
+ call :downloadfile " %LIBSODIUM_URL% " downloads\libsodium.zip
335
+ 7z.exe x -y downloads\libsodium.zip -o%DEPENDENCIES% \ > nul || exit 1
336
+ if /I " %ARCH% " == " x64" (
337
+ call :mklink " vim\src\libsodium.dll" " %SODIUM_DIR% \x64\Release\v143\dynamic\libsodium.dll"
338
+ ) else (
339
+ call :mklink " vim\src\libsodium.dll" " %SODIUM_DIR% \Win32\Release\v143\dynamic\libsodium.dll"
340
+ )
304
341
) else (
305
- call :mklink " vim\src\libsodium.dll" " %SODIUM_DIR% \Win32\Release\v143\dynamic\libsodium.dll"
342
+ @ rem "Compile Libsodium"
343
+ call :downloadfile " %LIBSODIUM_SOURCE% " downloads\libsodium.zip
344
+ 7z.exe x -y downloads\libsodium.zip -o%DEPENDENCIES% \ > nul
345
+ move /Y %DEPENDENCIES% \libsodium-1.0.20-RELEASE %DEPENDENCIES% \libsodium
346
+ pushd %SODIUM_DIR% \builds\msvc\build\
347
+ msbuild /m /v:q /p:Configuration=DynRelease /p:Platform=ARM64 ..\vs2022\libsodium.sln
348
+ popd
349
+ xcopy /E /I /H /Y %SODIUM_DIR% \src\libsodium\include %SODIUM_DIR% \include > nul
350
+ call :mklink " vim\src\libsodium.dll" " %SODIUM_DIR% \bin\ARM64\Release\v143\dynamic\libsodium.dll"
306
351
)
307
352
308
353
@ echo off
@@ -322,11 +367,14 @@ cd vim\src
322
367
@ echo :" PYTHON3=%PYTHON3_DIR% " >> .\auto\nmake\vimdll-huge.cfg
323
368
@ echo :" LUA_VER=%LUA_VER% " >> .\auto\nmake\vimdll-huge.cfg
324
369
@ echo :" LUA=%LUA_DIR% " >> .\auto\nmake\vimdll-huge.cfg
325
- @ echo :" RUBY_VER=%RUBY_VER% " >> .\auto\nmake\vimdll-huge.cfg
326
- @ echo :" RUBY_API_VER_LONG=%RUBY_API_VER_LONG% " >> .\auto\nmake\vimdll-huge.cfg
327
- @ echo :" RUBY=%RUBY_DIR% " >> .\auto\nmake\vimdll-huge.cfg
328
- @ echo :" MZSCHEME_VER=%MZSCHEME_VER% " >> .\auto\nmake\vimdll-huge.cfg
329
- @ echo :" MZSCHEME=%RACKET_DIR% " >> .\auto\nmake\vimdll-huge.cfg
370
+ @ rem Not supported for ARM64
371
+ if /I NOT " %PLATFORM% " == " arm64" (
372
+ @ echo :" RUBY_VER=%RUBY_VER% " >> .\auto\nmake\vimdll-huge.cfg
373
+ @ echo :" RUBY_API_VER_LONG=%RUBY_API_VER_LONG% " >> .\auto\nmake\vimdll-huge.cfg
374
+ @ echo :" RUBY=%RUBY_DIR% " >> .\auto\nmake\vimdll-huge.cfg
375
+ @ echo :" MZSCHEME_VER=%MZSCHEME_VER% " >> .\auto\nmake\vimdll-huge.cfg
376
+ @ echo :" MZSCHEME=%RACKET_DIR% " >> .\auto\nmake\vimdll-huge.cfg
377
+ )
330
378
@ echo :" SODIUM=%SODIUM_DIR% " >> .\auto\nmake\vimdll-huge.cfg
331
379
@ echo :>> .\auto\nmake\vimdll-huge.cfg
332
380
@@ -360,28 +408,61 @@ goto :eof
360
408
if defined APPVEYOR_BUILD_FOLDER ( cd %APPVEYOR_BUILD_FOLDER% )
361
409
362
410
@ rem Check if we need to copy libgcc_s_sjlj-1.dll.
411
+ if /I NOT " %PLATFORM% " == " arm64" (
363
412
" %VCToolsInstallDir% bin\HostX86\x86\dumpbin.exe" ^
364
413
/DEPENDENTS %DEPENDENCIES% \gettext32\libintl-8.dll | findstr ^
365
414
/LC:" libgcc_s_sjlj-1.dll" && set " INCLUDE_LIBGCC = 1" || set " INCLUDE_LIBGCC = 0"
415
+ ) else set " INCLUDE_LIBGCC = 0"
366
416
367
417
mkdir vim\runtime\GvimExt64
368
418
mkdir vim\runtime\GvimExt32
369
419
370
- @ rem Build both 64- and 32-bit versions of gvimext.dll for the installer
371
- start " " /W cmd /C " %VCVARSALL% x64 && cd vim\src\GvimExt && nmake.exe -lf Make_mvc.mak CPU=AMD64 clean all > ..\gvimext.log"
372
- type vim\src\gvimext.log
373
- call :mklink " vim\runtime\GvimExt64\gvimext.dll" " vim\src\GvimExt\gvimext.dll"
374
- call :mklink " vim\runtime\GvimExt64\README.txt" " vim\src\GvimExt\README.txt"
375
- call :mklink " vim\runtime\GvimExt64\gvimext.inf" " vim\src\GvimExt\gvimext.inf"
376
- call :mklink " vim\runtime\GvimExt64\GvimExt.reg" " vim\src\GvimExt\GvimExt.reg"
377
- ren vim\src\GvimExt\gvimext.dll gvimext64.dll
378
-
379
- start " " /W cmd /C " %VCVARSALL% x86 && cd vim\src\GvimExt && nmake.exe -lf Make_mvc.mak CPU=i386 clean all > ..\gvimext.log"
380
- type vim\src\gvimext.log
381
- call :mklink " vim\runtime\GvimExt32\gvimext.dll" " vim\src\GvimExt\gvimext.dll"
382
- call :mklink " vim\runtime\GvimExt32\README.txt" " vim\src\GvimExt\README.txt"
383
- call :mklink " vim\runtime\GvimExt32\gvimext.inf" " vim\src\GvimExt\gvimext.inf"
384
- call :mklink " vim\runtime\GvimExt32\GvimExt.reg" " vim\src\GvimExt\GvimExt.reg"
420
+ if /I " %PLATFORM% " == " arm64" (
421
+ @ rem Building ARM64 version of gvimext.dll for the installer
422
+ pushd vim\src\GvimExt
423
+ nmake.exe -lf Make_mvc.mak clean all > ..\gvimext.log"
424
+ popd
425
+ type vim\src\gvimext.log
426
+ call :mklink " vim\runtime\GvimExt64\gvimext.dll" " vim\src\GvimExt\gvimext.dll"
427
+ call :mklink " vim\runtime\GvimExt64\README.txt" " vim\src\GvimExt\README.txt"
428
+ call :mklink " vim\runtime\GvimExt64\gvimext.inf" " vim\src\GvimExt\gvimext.inf"
429
+ call :mklink " vim\runtime\GvimExt64\GvimExt.reg" " vim\src\GvimExt\GvimExt.reg"
430
+ copy /Y vim\src\GvimExt\gvimext.dll vim\src\GvimExt\gvimext64.dll
431
+
432
+ copy /y %ICONV_VCPKG% \bin\iconv-2.dll vim\runtime\libiconv-2.dll
433
+ copy /y %INTL_VCPKG% \bin\intl-8.dll vim\runtime\libintl-8.dll
434
+ call :mklink " vim\runtime\GvimExt64\libiconv-2.dll" " vim\runtime\libiconv-2.dll"
435
+ call :mklink " vim\runtime\GvimExt64\libintl-8.dll" " vim\runtime\libintl-8.dll"
436
+
437
+ ) else (
438
+ @ rem Build both 64- and 32-bit versions of gvimext.dll for the installer
439
+ start " " /W cmd /C " %VCVARSALL% x64 && cd vim\src\GvimExt && nmake.exe -lf Make_mvc.mak CPU=AMD64 clean all > ..\gvimext.log"
440
+ type vim\src\gvimext.log
441
+ call :mklink " vim\runtime\GvimExt64\gvimext.dll" " vim\src\GvimExt\gvimext.dll"
442
+ call :mklink " vim\runtime\GvimExt64\README.txt" " vim\src\GvimExt\README.txt"
443
+ call :mklink " vim\runtime\GvimExt64\gvimext.inf" " vim\src\GvimExt\gvimext.inf"
444
+ call :mklink " vim\runtime\GvimExt64\GvimExt.reg" " vim\src\GvimExt\GvimExt.reg"
445
+ ren vim\src\GvimExt\gvimext.dll gvimext64.dll
446
+
447
+ start " " /W cmd /C " %VCVARSALL% x86 && cd vim\src\GvimExt && nmake.exe -lf Make_mvc.mak CPU=i386 clean all > ..\gvimext.log"
448
+ type vim\src\gvimext.log
449
+ call :mklink " vim\runtime\GvimExt32\gvimext.dll" " vim\src\GvimExt\gvimext.dll"
450
+ call :mklink " vim\runtime\GvimExt32\README.txt" " vim\src\GvimExt\README.txt"
451
+ call :mklink " vim\runtime\GvimExt32\gvimext.inf" " vim\src\GvimExt\gvimext.inf"
452
+ call :mklink " vim\runtime\GvimExt32\GvimExt.reg" " vim\src\GvimExt\GvimExt.reg"
453
+
454
+ call :mklink " vim\runtime\libiconv-2.dll" " %DEPENDENCIES% \gettext%BIT% \libiconv-2.dll"
455
+ call :mklink " vim\runtime\libintl-8.dll" " %DEPENDENCIES% \gettext%BIT% \libintl-8.dll"
456
+ if " %INCLUDE_LIBGCC% -%BIT% " == " 1-32" (
457
+ call :mklink " vim\runtime\libgcc_s_sjlj-1.dll" " %DEPENDENCIES% \gettext32\libgcc_s_sjlj-1.dll"
458
+ )
459
+
460
+ call :mklink " vim\runtime\GvimExt32\libiconv-2.dll" " %DEPENDENCIES% \gettext32\libiconv-2.dll"
461
+ call :mklink " vim\runtime\GvimExt32\libintl-8.dll" " %DEPENDENCIES% \gettext32\libintl-8.dll"
462
+ if " %INCLUDE_LIBGCC% " == " 1" (
463
+ call :mklink " vim\runtime\GvimExt32\libgcc_s_sjlj-1.dll" " %DEPENDENCIES% \gettext32\libgcc_s_sjlj-1.dll"
464
+ )
465
+ )
385
466
386
467
call :mklink " vim\runtime\README.txt" " vim\README.txt"
387
468
call :mklink " vim\runtime\LICENSE.txt" " vim\LICENSE"
@@ -396,22 +477,6 @@ call :mklink "vim\runtime\vim.exe" "vim\src\vim.exe"
396
477
call :mklink " vim\runtime\vimrun.exe" " vim\src\vimrun.exe"
397
478
call :mklink " vim\runtime\uninstall.exe" " vim\src\uninstall.exe"
398
479
call :mklink " vim\runtime\xxd.exe" " vim\src\xxd\xxd.exe"
399
-
400
- call :mklink " vim\runtime\libiconv-2.dll" " %DEPENDENCIES% \gettext%BIT% \libiconv-2.dll"
401
- call :mklink " vim\runtime\libintl-8.dll" " %DEPENDENCIES% \gettext%BIT% \libintl-8.dll"
402
- if " %INCLUDE_LIBGCC% -%BIT% " == " 1-32" (
403
- call :mklink " vim\runtime\libgcc_s_sjlj-1.dll" " %DEPENDENCIES% \gettext32\libgcc_s_sjlj-1.dll"
404
- )
405
-
406
- call :mklink " vim\runtime\GvimExt64\libiconv-2.dll" " %DEPENDENCIES% \gettext64\libiconv-2.dll"
407
- call :mklink " vim\runtime\GvimExt64\libintl-8.dll" " %DEPENDENCIES% \gettext64\libintl-8.dll"
408
-
409
- call :mklink " vim\runtime\GvimExt32\libiconv-2.dll" " %DEPENDENCIES% \gettext32\libiconv-2.dll"
410
- call :mklink " vim\runtime\GvimExt32\libintl-8.dll" " %DEPENDENCIES% \gettext32\libintl-8.dll"
411
- if " %INCLUDE_LIBGCC% " == " 1" (
412
- call :mklink " vim\runtime\GvimExt32\libgcc_s_sjlj-1.dll" " %DEPENDENCIES% \gettext32\libgcc_s_sjlj-1.dll"
413
- )
414
-
415
480
call :mklink " vim\runtime\libsodium.dll" " vim\src\libsodium.dll"
416
481
call :mklink " vim\runtime\diff.exe" " .\diff.exe"
417
482
call :mklink " vim\runtime\winpty%BIT% .dll" " vim\src\winpty%BIT% .dll"
@@ -420,10 +485,18 @@ call :mklink "vim\runtime\winpty-agent.exe" "vim\src\winpty-agent.exe"
420
485
set " VIM_DIR = vim%MAJOR%%MINOR% "
421
486
ren vim\runtime %VIM_DIR%
422
487
423
- @ rem Create zip packages
424
- 7z.exe a -mx=9 gvim_%VER_NUM% _%ARCH% _pdb.zip vim\src\*.pdb
488
+ if /I " %PLATFORM% " == " arm64" (
489
+ set CUSTOM = arm64
490
+ ) else (
491
+ set CUSTOM = %ARCH%
492
+ )
493
+
494
+ @ rem Create zip packages, but skip pdb package for ARM64
495
+ if /I NOT " %PLATFORM% " == " arm64" (
496
+ 7z.exe a -mx=9 gvim_%VER_NUM% _%CUSTOM% _pdb.zip vim\src\*.pdb
497
+ )
425
498
426
- 7z.exe a -r -mx=9 -xr@ exclist.txt gvim_%VER_NUM% _%ARCH % .zip vim\%VIM_DIR%
499
+ 7z.exe a -r -mx=9 -xr@ exclist.txt gvim_%VER_NUM% _%CUSTOM % .zip vim\%VIM_DIR%
427
500
428
501
ren vim\%VIM_DIR% runtime
429
502
@@ -440,7 +513,7 @@ if /I "%ARCH%"=="x64" (
440
513
set WIN64 = 0
441
514
)
442
515
443
- nmake.exe -lf Make_mvc.mak " X=OutFile ..\..\gvim_%VER_NUM% _%ARCH % .exe" ^
516
+ nmake.exe -lf Make_mvc.mak " X=OutFile ..\..\gvim_%VER_NUM% _%CUSTOM % .exe" ^
444
517
" GETTEXT=%DEPENDENCIES% " " VIMSRC=..\runtime" " VIMRT=..\runtime" ^
445
518
" INCLUDE_LIBGCC=%INCLUDE_LIBGCC% " " SRC=..\runtime" " WIN64=%WIN64% " ^
446
519
" VIMTOOLS=..\runtime" || exit 1
452
525
@ rem signpath can then sign each artifact inside the zip file
453
526
@ rem (the Vim zip archive as well as the installer)
454
527
echo :Creating Signpath Zip Archive
455
- 7z.exe a -mx=1 unsigned-gvim_%VER_NUM% _%ARCH % .zip ^
456
- gvim_%VER_NUM% _%ARCH % .zip gvim*.exe
528
+ 7z.exe a -mx=1 unsigned-gvim_%VER_NUM% _%CUSTOM % .zip ^
529
+ gvim_%VER_NUM% _%CUSTOM % .zip gvim*.exe
457
530
458
531
@ echo off
459
532
goto :eof
@@ -552,6 +625,11 @@ if ERRORLEVEL 1 (
552
625
)
553
626
@ goto :eof
554
627
628
+ :vcpkg
629
+ @ rem call :vcpkg package
630
+ vcpkg --vcpkg-root=" %VCPKG_ROOT% " install %1 :arm64-windows && exit /B
631
+ @ goto :eof
632
+
555
633
:mklink
556
634
@ rem call :mklink "linkname" "target"
557
635
if exist %1 exit /B
0 commit comments