Skip to content

Commit 6670b3b

Browse files
committed
appveyor.bat: Add Win AARCH64 feature to appveyor.bat script
Unfortunately, Ruby and Racket doesn't seem to be build successfully, so those are skipped. For the gettext libraries we will use vcpkg to build the Windows ARM64 versions of libintl-8.dll and libiconv-2.dll and package those For libsodium we will compile our own AARCH64 version of the libsodium.dll Skip packaging the pdb zip file. Signed-off-by: Christian Brabandt <[email protected]>
1 parent f49608f commit 6670b3b

File tree

1 file changed

+132
-54
lines changed

1 file changed

+132
-54
lines changed

appveyor.bat

Lines changed: 132 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,13 @@ set "TCL_LIBRARY=%TCL_DIR%\lib\tcl%TCL_VER_LONG%"
124124
@rem Gettext
125125
set "GETTEXT_32_URL=https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.23-v1.17/gettext0.23-iconv1.17-shared-32.zip"
126126
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"
127129

128130
@rem winpty
129131
set "WINPTY_URL=https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip"
130132
set "WINPTY_DIR=%DEPENDENCIES%\winpty"
133+
set "WINPTY_VCPKG=%VCPKG_ROOT%\packages\winpty_arm64-windows"
131134

132135
@rem UPX
133136
@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
137140

138141
@rem Libsodium
139142
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"
140144
set "SODIUM_DIR=%DEPENDENCIES%\libsodium"
141145

142146
@rem Cygwin
@@ -178,6 +182,21 @@ popd
178182
if not exist downloads mkdir downloads
179183
if not exist dependencies mkdir dependencies
180184

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+
181200
goto :skipcygwin
182201
@rem It's not necessary right now
183202
@rem Update cygwin and add dependencies
@@ -235,6 +254,7 @@ start "" /W downloads\python3lib-%BIT%.msi /qn TARGETDIR=%PYTHON3_DIR%
235254
start "" /W downloads\python3dev-%BIT%.msi /qn TARGETDIR=%PYTHON3_DIR%
236255

237256
@rem Ruby
257+
if /I "%PLATFORM%" == "arm64" goto :skipruby
238258
@rem Download RubyInstaller binary
239259
call :downloadfile "%RUBY_URL%" downloads\ruby-%BIT%.7z
240260
7z.exe x -y downloads\ruby-%BIT%.7z -o%DEPENDENCIES%\ > nul || exit 1
@@ -253,8 +273,10 @@ call win32\configure.bat
253273
nmake.exe -l .config.h.time || exit 1
254274
xcopy /S /Y .ext\include %RUBY_DIR%\include\ruby-%RUBY_API_VER_LONG%
255275
popd
276+
:skipruby
256277

257278
@rem Racket
279+
if /I "%PLATFORM%" == "arm64" goto :skipracket
258280
call :downloadfile "%RACKET_URL%" downloads\racket-%BIT%.tgz
259281
7z.exe x -tgzip -so downloads\racket-%BIT%.tgz | 7z.exe x -y -aoa -si -ttar ^
260282
-o%DEPENDENCIES%\
@@ -263,6 +285,7 @@ type NUL > %RACKET_DIR%\include\bc_suffix.h
263285

264286
@rem Install additional packages for Racket
265287
raco.exe pkg install -i --auto r5rs-lib
288+
:skipracket
266289

267290
@rem Install libintl.dll and iconv.dll
268291
call :downloadfile "%GETTEXT_32_URL%" downloads\gettext32.zip
@@ -273,15 +296,25 @@ call :downloadfile "%GETTEXT_64_URL%" downloads\gettext64.zip
273296
7z.exe e -y downloads\gettext64.zip ^
274297
-o%DEPENDENCIES%\gettext64 > nul || exit 1
275298

299+
if /I "%PLATFORM%" == "arm64" (
300+
call :vcpkg gettext
301+
)
302+
276303
@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"
282308
) 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+
)
285318
)
286319

287320
@rem Install UPX
@@ -297,12 +330,24 @@ call :downloadfile "%SHELLEXECASUSER_URL%" downloads\shellexecasuser.zip
297330
call :mklink "%ProgramFiles(x86)%\NSIS\Plugins\x86-unicode\ShellExecAsUser.dll" "%DEPENDENCIES%\shellexecasuser\unicode\ShellExecAsUser.dll"
298331

299332
@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+
)
304341
) 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"
306351
)
307352

308353
@echo off
@@ -322,11 +367,14 @@ cd vim\src
322367
@ echo:"PYTHON3=%PYTHON3_DIR%">> .\auto\nmake\vimdll-huge.cfg
323368
@ echo:"LUA_VER=%LUA_VER%">> .\auto\nmake\vimdll-huge.cfg
324369
@ 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+
)
330378
@ echo:"SODIUM=%SODIUM_DIR%">> .\auto\nmake\vimdll-huge.cfg
331379
@ echo:>> .\auto\nmake\vimdll-huge.cfg
332380

@@ -360,28 +408,61 @@ goto :eof
360408
if defined APPVEYOR_BUILD_FOLDER ( cd %APPVEYOR_BUILD_FOLDER% )
361409

362410
@rem Check if we need to copy libgcc_s_sjlj-1.dll.
411+
if /I NOT "%PLATFORM%"=="arm64" (
363412
"%VCToolsInstallDir%bin\HostX86\x86\dumpbin.exe" ^
364413
/DEPENDENTS %DEPENDENCIES%\gettext32\libintl-8.dll | findstr ^
365414
/LC:"libgcc_s_sjlj-1.dll" && set "INCLUDE_LIBGCC=1" || set "INCLUDE_LIBGCC=0"
415+
) else set "INCLUDE_LIBGCC=0"
366416

367417
mkdir vim\runtime\GvimExt64
368418
mkdir vim\runtime\GvimExt32
369419

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+
)
385466

386467
call :mklink "vim\runtime\README.txt" "vim\README.txt"
387468
call :mklink "vim\runtime\LICENSE.txt" "vim\LICENSE"
@@ -396,22 +477,6 @@ call :mklink "vim\runtime\vim.exe" "vim\src\vim.exe"
396477
call :mklink "vim\runtime\vimrun.exe" "vim\src\vimrun.exe"
397478
call :mklink "vim\runtime\uninstall.exe" "vim\src\uninstall.exe"
398479
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-
415480
call :mklink "vim\runtime\libsodium.dll" "vim\src\libsodium.dll"
416481
call :mklink "vim\runtime\diff.exe" ".\diff.exe"
417482
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"
420485
set "VIM_DIR=vim%MAJOR%%MINOR%"
421486
ren vim\runtime %VIM_DIR%
422487

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+
)
425498

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%
427500

428501
ren vim\%VIM_DIR% runtime
429502

@@ -440,7 +513,7 @@ if /I "%ARCH%"=="x64" (
440513
set WIN64=0
441514
)
442515

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" ^
444517
"GETTEXT=%DEPENDENCIES%" "VIMSRC=..\runtime" "VIMRT=..\runtime" ^
445518
"INCLUDE_LIBGCC=%INCLUDE_LIBGCC%" "SRC=..\runtime" "WIN64=%WIN64%" ^
446519
"VIMTOOLS=..\runtime" || exit 1
@@ -452,8 +525,8 @@ popd
452525
@rem signpath can then sign each artifact inside the zip file
453526
@rem (the Vim zip archive as well as the installer)
454527
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
457530

458531
@echo off
459532
goto :eof
@@ -552,6 +625,11 @@ if ERRORLEVEL 1 (
552625
)
553626
@goto :eof
554627

628+
:vcpkg
629+
@rem call :vcpkg package
630+
vcpkg --vcpkg-root="%VCPKG_ROOT%" install %1:arm64-windows && exit /B
631+
@goto :eof
632+
555633
:mklink
556634
@rem call :mklink "linkname" "target"
557635
if exist %1 exit /B

0 commit comments

Comments
 (0)