Overhaul build script, make more reliable
This commit is contained in:
		
							parent
							
								
									5c5d8f3e21
								
							
						
					
					
						commit
						91dddb4214
					
				| @ -1,3 +1,6 @@ | ||||
| @echo off | ||||
| setlocal | ||||
| 
 | ||||
| REM | ||||
| REM Generate Standalone MSVC17 x86/x64 Toolchain from VS Installation | ||||
| REM | ||||
| @ -20,22 +23,25 @@ REM | ||||
| REM For other Visual Studio versions, you may need to update the version numbers. | ||||
| REM | ||||
| 
 | ||||
| @echo off | ||||
| setlocal | ||||
| 
 | ||||
| REM Configuration (NOTE: Update arch to either, "x86", "x64" or "x86 x64" for both toolchains). | ||||
| set arch=x64 | ||||
| set arch=x86 x64 | ||||
| 
 | ||||
| REM Source Directories (NOTE: Update the directories for your desired version) | ||||
| set vs1=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023 | ||||
| set vs2=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0 | ||||
| set vs3=C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0 | ||||
| set vs4=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0 | ||||
| set dll1=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\api-ms-win-*.dll | ||||
| set vs_version=2017 | ||||
| set msvc_version=14.16.27023 | ||||
| set win_sdk_version=10.0.17763.0 | ||||
| 
 | ||||
| set vs_root=C:\Program Files (x86)\Microsoft Visual Studio\%vs_version%\Community | ||||
| set vs1=%vs_root%\VC\Tools\MSVC\%msvc_version% | ||||
| set vs2=C:\Program Files (x86)\Windows Kits\10\bin\%win_sdk_version% | ||||
| set vs3=C:\Program Files (x86)\Windows Kits\10\Include\%win_sdk_version% | ||||
| set vs4=C:\Program Files (x86)\Windows Kits\10\Lib\%win_sdk_version% | ||||
| set dll1=%vs_root%\Common7\Tools\api-ms-win-*.dll | ||||
| set dll2=C:\Windows\System32\*140*.dll | ||||
| set dll3=C:\Windows\System32\ucrtbase*.dll | ||||
| set dll4=C:\Windows\System32\VsGraphicsHelper.dll | ||||
| 
 | ||||
| 
 | ||||
| REM Destination Directory | ||||
| set dest=%~1 | ||||
| if "%dest%"=="" echo Usage: %~nx0 ^<output folder^> | ||||
							
								
								
									
										104
									
								
								Tools/generate_msvc19_toolchain.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								Tools/generate_msvc19_toolchain.bat
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,104 @@ | ||||
| @echo off | ||||
| setlocal | ||||
| 
 | ||||
| REM | ||||
| REM Generate Standalone MSVC 2017/2019 x86/x64 Toolchain from VS Installation | ||||
| REM | ||||
| REM Collects the necessary includes, binaries, DLLs and libs to around ~300mb on | ||||
| REM disk from a VS installation that can invoke cl, and link as you typically | ||||
| REM would after calling "vcvarsall.bat x64" | ||||
| REM | ||||
| REM This script generates the helper scripts within the generated toolchain. | ||||
| REM cl_[x64|x86].bat:       Invokes the compiler with required environment variables set | ||||
| REM link_[x64|x86].bat:     Invokes the linker with required environment variables set | ||||
| REM msvc_env_[x64|x86].bat: Setups the environment variables for the toolchain. | ||||
| REM                         i.e. "call msvc_env_x64.bat" to set the current | ||||
| REM                         session's environment variables for compiling with | ||||
| REM                         the toolchain, akin to "vcvarsall.bat x64" | ||||
| REM | ||||
| REM Information about the necessary files and steps adapted from | ||||
| REM Krouzu's Isolating MSVC19 https://gist.github.com/krouzu/19ddd4cb989264b11c7b3ba48c159be0 | ||||
| REM Paul Houle's Isolating MSVC14 Script | ||||
| REM | ||||
| REM For other Visual Studio versions, you may need to update the version numbers. | ||||
| REM | ||||
| 
 | ||||
| REM Configuration (NOTE: Update arch to either, "x86", "x64" or "x86 x64" for both toolchains). | ||||
| set arch=x86 x64 | ||||
| 
 | ||||
| REM Source Directories (NOTE: Update the directories for your desired version) | ||||
| set vs_version=2019 | ||||
| set msvc_version=14.28.29910 | ||||
| set win_sdk_version=10.0.19041.0 | ||||
| 
 | ||||
| set vs_root=C:\Program Files (x86)\Microsoft Visual Studio\%vs_version%\Community | ||||
| set vs1=%vs_root%\VC\Tools\MSVC\%msvc_version% | ||||
| set vs2=C:\Program Files (x86)\Windows Kits\10\bin\%win_sdk_version% | ||||
| set vs3=C:\Program Files (x86)\Windows Kits\10\Include\%win_sdk_version% | ||||
| set vs4=C:\Program Files (x86)\Windows Kits\10\Lib\%win_sdk_version% | ||||
| set dll1=%vs_root%\Common7\Tools\api-ms-win-*.dll | ||||
| set dll2=C:\Windows\System32\*140*.dll | ||||
| set dll3=C:\Windows\System32\ucrtbase*.dll | ||||
| set dll4=C:\Windows\System32\VsGraphicsHelper.dll | ||||
| 
 | ||||
| REM Destination Directory | ||||
| set dest=%~1 | ||||
| if "%dest%"=="" echo Usage: %~nx0 ^<output folder^> | ||||
| if "%dest%"=="" goto :eof | ||||
| 
 | ||||
| if exist "%dest%" echo Directory "%dest%" already exists, exiting. | ||||
| if exist "%dest%" goto :eof | ||||
| 
 | ||||
| REM Path/File Exist Check | ||||
| for %%a in ("%vs1%" "%vs2%" "%dll1%" "%dll2%" "%dll3%" "%dll4%" "%vs3%" "%vs4%") do ( | ||||
|     if not exist %%a echo Required file or path not found: %%a | ||||
|     if not exist %%a goto :eof | ||||
| ) | ||||
| 
 | ||||
| set copy_cmd=xcopy /I /S | ||||
| 
 | ||||
| REM MSVC Includes | ||||
| %copy_cmd% "%vs1%\include" "%dest%\include" | ||||
| %copy_cmd% "%vs3%\ucrt\*" "%dest%\include" | ||||
| %copy_cmd% "%vs3%\shared\*" "%dest%\sdk\include" | ||||
| %copy_cmd% "%vs3%\um\*" "%dest%\sdk\include" | ||||
| 
 | ||||
| REM MSVC Binaries/Libraries/DLLs | ||||
| for %%a in (%arch%) do ( | ||||
|     %copy_cmd% "%vs1%\bin\Hostx64\%%a" "%dest%\bin\%%a" | ||||
|     %copy_cmd% "%vs1%\lib\%%a" "%dest%\lib\%%a" | ||||
| 
 | ||||
|     %copy_cmd% "%vs2%\%%a" "%dest%\sdk\bin\%%a" | ||||
| 
 | ||||
|     %copy_cmd% "%vs4%\ucrt\%%a" "%dest%\lib\%%a" | ||||
|     %copy_cmd% "%vs4%\um\%%a" "%dest%\sdk\lib\%%a" | ||||
| 
 | ||||
|     %copy_cmd% "%dll1%" "%dest%\sdk\bin\%%a" | ||||
|     %copy_cmd% "%dll2%" "%dest%\sdk\bin\%%a" | ||||
|     %copy_cmd% "%dll3%" "%dest%\sdk\bin\%%a" | ||||
|     %copy_cmd% "%dll4%" "%dest%\sdk\bin\%%a" | ||||
| 
 | ||||
|     REM Generate Compiler/Linker Scripts | ||||
|     setlocal EnableDelayedExpansion | ||||
|     set msvc_env_script="%dest%\msvc_env_%%a.bat" | ||||
|     set cl_script="%dest%\cl_%%a.bat" | ||||
|     set link_script="%dest%\link_%%a.bat" | ||||
| 
 | ||||
|     for %%b in (!msvc_env_script! !cl_script! !link_script!) do ( | ||||
|         echo @echo off>> %%b | ||||
|     ) | ||||
| 
 | ||||
|     for %%b in (!cl_script! !link_script!) do ( | ||||
|         echo setlocal>> %%b | ||||
|     ) | ||||
| 
 | ||||
|     for %%b in (!msvc_env_script! !cl_script! !link_script!) do ( | ||||
|         echo set msvc_root=%%~dp0>> %%b | ||||
|         echo set include=%%msvc_root%%\include;%%msvc_root%%\sdk\include>> %%b | ||||
|         echo set lib=%%msvc_root%%\lib\%%a;%%msvc_root%%\sdk\lib\%%a>> %%b | ||||
|         echo set path=%%msvc_root%%\bin\%%a;%%path%%>> %%b | ||||
|     ) | ||||
| 
 | ||||
|     echo cl %%*>> !cl_script! | ||||
|     echo link %%*>> !link_script! | ||||
| ) | ||||
| @ -1,84 +1,199 @@ | ||||
| @echo off | ||||
| setlocal EnableDelayedExpansion | ||||
| 
 | ||||
| set root=%~dp0 | ||||
| set home=!root!\home | ||||
| set cmder_root=!root!\Cmder | ||||
| set installer_root=!root!\Installer | ||||
| set downloads_root=!installer_root!\Downloads | ||||
| set vim_root=!home!\vimfiles | ||||
| set tools_root=!root!\Tools | ||||
| set compiler_root=!tools_root!\Compiler | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Setup Folder Locations | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set root_dir=!CD! | ||||
| set home_dir=!root_dir!\home | ||||
| set cmder_dir=!root_dir!\Cmder | ||||
| set installer_dir=!root_dir!\Installer | ||||
| set downloads_dir=!installer_dir!\Downloads | ||||
| set vim_dir=!home_dir!\vimfiles | ||||
| set tools_dir=!root_dir!\Tools | ||||
| 
 | ||||
| if not exist !home! mkdir !home! | ||||
| if not exist !installer_root! mkdir !installer_root! | ||||
| if not exist !downloads_root! mkdir !downloads_root! | ||||
| if not exist !tools_root! mkdir !tools_root! | ||||
| if not exist !compiler_root! mkdir !compiler_root! | ||||
| if not exist !home_dir! mkdir !home_dir! | ||||
| if not exist !installer_dir! mkdir !installer_dir! | ||||
| if not exist !downloads_dir! mkdir !downloads_dir! | ||||
| if not exist !tools_dir! mkdir !tools_dir! | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Setup tools for setting up the development environment | ||||
| REM ---------------------------------------------------------------------------- | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Bootstrap 7zip | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM We get an old version of 7z that is available as a .zip file which we can | ||||
| REM extract on Windows with just PowerShell (i.e. no dependency). | ||||
| set zip7_bootstrap_sha256=2a3afe19c180f8373fa02ff00254d5394fec0349f5804e0ad2f6067854ff28ac | ||||
| set zip7_bootstrap_version=920 | ||||
| set zip7_bootstrap_zip=!downloads_dir!\win32_7zip_bootstrap_v!zip7_bootstrap_version!.zip | ||||
| set zip7_bootstrap_dir=!tools_dir!\7zip_bootstrap-!zip7_bootstrap_version! | ||||
| if not exist !zip7_bootstrap_dir! ( | ||||
|     call :DownloadFile "https://www.7-zip.org/a/7za!zip7_bootstrap_version!.zip" "!zip7_bootstrap_zip!" || exit /B | ||||
|     call :VerifyFileSHA256 "!zip7_bootstrap_zip!" "!zip7_bootstrap_sha256!" || exit /B | ||||
| ) | ||||
| if not exist "!zip7_bootstrap_dir!" powershell "Expand-Archive !zip7_bootstrap_zip! -DestinationPath !zip7_bootstrap_dir!" || exit /B | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM 7zip | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Use our bootstrap 7z from above to download the latest 7zip version | ||||
| REM NOTE: We do not use 7za because it can not unzip a NSIS installer. The full | ||||
| REM version however can. | ||||
| set zip7_sha256=0f5d4dbbe5e55b7aa31b91e5925ed901fdf46a367491d81381846f05ad54c45e | ||||
| set zip7_version=1900 | ||||
| set zip7_zip=!downloads_dir!\win32_7zip_v!zip7_version!.exe | ||||
| set zip7_dir=!tools_dir!\7zip-!zip7_version! | ||||
| if not exist !zip7_dir! ( | ||||
|     call :DownloadFile "https://www.7-zip.org/a/7z!zip7_version!-x64.exe" "!zip7_zip!" || exit /B | ||||
|     call :VerifyFileSHA256 "!zip7_zip!" "!zip7_sha256!" || exit /B | ||||
| ) | ||||
| if not exist "!zip7_dir!" "!zip7_bootstrap_dir!\7za.exe" x -y -o"!zip7_dir!" !zip7_zip! || exit /B | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM GPG Signature Verification | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set gpg_w32_sha256=77cec7f274ee6347642a488efdfa324e8c3ab577286e611c397e69b1b396ab16 | ||||
| set gpg_w32_version=2.3.1 | ||||
| set gpg_w32_date=20210420 | ||||
| set gpg_w32_zip=!downloads_dir!\win32_gpg_w32_v!gpg_w32_version!.exe | ||||
| set gpg_w32_dir=!tools_dir!\gpg_w32-!gpg_w32_version! | ||||
| if not exist !gpg_w32_dir! ( | ||||
|     call :DownloadFile "https://gnupg.org/ftp/gcrypt/binary/gnupg-w32-!gpg_w32_version!_!gpg_w32_date!.exe" "!gpg_w32_zip!" || exit /B | ||||
|     call :VerifyFileSHA256 "!gpg_w32_zip!" "!gpg_w32_sha256!" || exit /B | ||||
|     call :Unzip "!gpg_w32_zip!" "!gpg_w32_dir!" || exit /B | ||||
| ) | ||||
| 
 | ||||
| set gpg_w32_bin_dir=!gpg_w32_dir!\bin | ||||
| set PATH="!gpg_w32_bin_dir!";!PATH! | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Application Setup | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Download & verify the tools we want for development | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Cmder | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set cmder_version=v1.3.16 | ||||
| set cmder_zip=!downloads_root!\win32_cmder_!cmder_version!.7z | ||||
| call :DownloadFile https://github.com/cmderdev/cmder/releases/download/!cmder_version!/cmder.7z "!cmder_zip!" || exit /b | ||||
| call :Unzip "!cmder_zip!" "!cmder_root!" || exit /b | ||||
| set cmder_zip=!downloads_dir!\win32_cmder_!cmder_version!.7z | ||||
| if not exist !cmder_dir! ( | ||||
|     call :DownloadFile https://github.com/cmderdev/cmder/releases/download/!cmder_version!/cmder.7z "!cmder_zip!" || exit /B | ||||
|     call :Unzip "!cmder_zip!" "!cmder_dir!" || exit /B | ||||
| ) | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Misc Tools | ||||
| REM Dependencies (Walker) - For DLL dependency management | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM clang-format: C/C++ formatting tool | ||||
| REM ctags: C/C++ code annotation generator | ||||
| REM scanmapset: Bind capslock to escape via registry | ||||
| REM uncap: Bind capslock to escape via run-time program | ||||
| REM clang-format: Default clang-format style | ||||
| call :CopyFile "!installer_root!\win32_clang_format.exe" "!cmder_root!\bin\clang-format.exe" || exit /b | ||||
| call :CopyFile "!installer_root!\win32_ctags.exe" "!cmder_root!\bin\ctags.exe" || exit /b | ||||
| call :CopyFile "!installer_root!\win32_scanmapset.exe" "!cmder_root!\bin\scanmapset.exe" || exit /b | ||||
| call :CopyFile "!installer_root!\win32_uncap.exe" "!cmder_root!\bin\uncap.exe" || exit /b | ||||
| call :CopyFile "!installer_root!\clang-format-style-file" "!home!\_clang-format" || exit /b | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM GVim, Vim Plug, Vim Config | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set gvim_zip=!downloads_root!\win32_gvim_x64.7z | ||||
| set gvim_path=!tools_root!\GVim | ||||
| call :DownloadFile https://tuxproject.de/projects/vim/complete-x64.7z !gvim_zip! || exit /b | ||||
| call :Unzip "!gvim_zip!" "!gvim_path!" || exit /b | ||||
| 
 | ||||
| call :CopyFile "!installer_root!\_vimrc" "!home!" || exit /b | ||||
| call :CopyFile "!installer_root!\win32_gvim_fullscreen.dll" "!gvim_path!\gvim_fullscreen.dll" || exit /b | ||||
| 
 | ||||
| set vim_plug_path=!vim_root!\autoload | ||||
| set vim_plug=!vim_plug_path!\plug.vim | ||||
| if not exist "!vim_plug_path!" mkdir "!vim_plug_path!" | ||||
| call :DownloadFile https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim "!vim_plug!" || exit /b | ||||
| 
 | ||||
| set vim_clang_format=!vim_root!\clang-format.py | ||||
| call :DownloadFile https://raw.githubusercontent.com/llvm/llvm-project/main/clang/tools/clang-format/clang-format.py "!vim_clang_format!" || exit /b | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM ripgrep | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set rg_sha256=a47ace6f654c5ffa236792fc3ee3fefd9c7e88e026928b44da801acb72124aa8 | ||||
| set rg_version=13.0.0 | ||||
| set rg_zip=!downloads_root!\win32_rg_v!rg_version!.7z | ||||
| set rg_exe=!cmder_root!\bin\rg.exe | ||||
| call :DownloadFile https://github.com/BurntSushi/ripgrep/releases/download/!rg_version!/ripgrep-!rg_version!-x86_64-pc-windows-msvc.zip !rg_zip! || exit /b | ||||
| call :VerifyFile !rg_zip! !rg_sha256! | ||||
| call :Unzip "!rg_zip!" "!rg_exe!" || exit /b | ||||
| set dependencies_sha256=44df956dbe267e0a705224c3b85d515fee2adc87509861e24fb6c6b0ea1b86d6 | ||||
| set dependencies_version=v1.10 | ||||
| set dependencies_zip=!downloads_dir!\win32_dependencies_!dependencies_version!.zip | ||||
| set dependencies_dir=!tools_dir!\dependencies-!dependencies_version! | ||||
| if not exist !dependencies_dir! ( | ||||
|     call :DownloadFile "https://github.com/lucasg/Dependencies/releases/download/!dependencies_version!/Dependencies_x64_Release.zip" "!dependencies_zip!" || exit /B | ||||
|     call :VerifyFileSHA256 "!dependencies_zip!" "!dependencies_sha256!" || exit /B | ||||
|     call :Unzip "!dependencies_zip!" "!dependencies_dir!" || exit /B | ||||
| ) | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM everything (void tools search program) | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set everything_sha256=f61b601acba59d61fb0631a654e48a564db34e279b6f2cc45e20a42ce9d9c466 | ||||
| set everything_version=1.4.1.1009 | ||||
| set everything_zip=!downloads_root!\win32_everything_v!everything_version!.7z | ||||
| set everything_exe=!cmder_root!\bin\everything.exe | ||||
| call :DownloadFile https://www.voidtools.com/Everything-!everything_version!.x64.zip !everything_zip! || exit /B | ||||
| call :VerifyFile !everything_zip! !everything_sha256! || exit /B | ||||
| REM TODO(doyle): Doesn't work because the cache is not smart | ||||
| call :Unzip "!everything_zip!" "!tools_root!" || exit /B | ||||
| set everything_zip=!downloads_dir!\win32_everything_v!everything_version!.7z | ||||
| set everything_dir=!tools_dir!\everything-!everything_version! | ||||
| if not exist !everything_dir! ( | ||||
|     call :DownloadFile "https://www.voidtools.com/Everything-!everything_version!.x64.zip" "!everything_zip!" || exit /B | ||||
|     call :VerifyFileSHA256 "!everything_zip!" "!everything_sha256!" || exit /B | ||||
|     call :Unzip "!everything_zip!" "!everything_dir!" || exit /B | ||||
| ) | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM GVim, Vim Plug, Vim Config | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set gvim_zip=!downloads_dir!\win32_gvim_x64.7z | ||||
| set gvim_dir=!tools_dir!\GVim | ||||
| if not exist !gvim_dir! ( | ||||
|     call :DownloadFile https://tuxproject.de/projects/vim/complete-x64.7z !gvim_zip! || exit /B | ||||
|     call :Unzip "!gvim_zip!" "!gvim_dir!" || exit /B | ||||
| ) | ||||
| 
 | ||||
| call :CopyFile "!installer_dir!\_vimrc" "!home_dir!" || exit /B | ||||
| call :CopyFile "!installer_dir!\win32_gvim_fullscreen.dll" "!gvim_dir!\gvim_fullscreen.dll" || exit /B | ||||
| 
 | ||||
| set vim_plug_dir=!vim_dir!\autoload | ||||
| set vim_plug=!vim_plug_dir!\plug.vim | ||||
| if not exist "!vim_plug_dir!" mkdir "!vim_plug_dir!" | ||||
| call :DownloadFile "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" "!vim_plug!" || exit /B | ||||
| 
 | ||||
| set vim_clang_format=!vim_dir!\clang-format.py | ||||
| call :DownloadFile "https://raw.githubusercontent.com/llvm/llvm-project/main/clang/tools/clang-format/clang-format.py" "!vim_clang_format!" || exit /B | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM LLVM/Clang | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set llvm_version=12.0.1 | ||||
| set llvm_zip=!downloads_dir!\win32_llvm_x64_v!llvm_version!.exe | ||||
| set llvm_dir=!tools_dir!\llvm-!llvm_version! | ||||
| set llvm_gpg_key=!downloads_dir!\llvm-tstellar-gpg-key.asc | ||||
| set llvm_gpg_sig=!llvm_zip!.sig | ||||
| if not exist !llvm_dir! ( | ||||
|     call :DownloadFile "https://github.com/llvm/llvm-project/releases/download/llvmorg-9.0.1/tstellar-gpg-key.asc" "!llvm_gpg_key!" || exit /B | ||||
|     call :DownloadFile "https://github.com/llvm/llvm-project/releases/download/llvmorg-!llvm_version!/LLVM-!llvm_version!-win64.exe.sig" "!llvm_gpg_sig!" || exit /B | ||||
|     call :DownloadFile "https://github.com/llvm/llvm-project/releases/download/llvmorg-!llvm_version!/LLVM-!llvm_version!-win64.exe" "!llvm_zip!" || exit /B | ||||
| 
 | ||||
|     gpg --import "!llvm_gpg_key!" || exit /B | ||||
|     gpg --verify "!llvm_gpg_sig!" "!llvm_zip!" || exit /B | ||||
|     call :Unzip "!llvm_zip!" "!llvm_dir!" || exit /B | ||||
| ) | ||||
| 
 | ||||
| set llvm_bin_dir=!llvm_dir!\bin | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Misc Tools | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM ctags: C/C++ code annotation generator | ||||
| REM scanmapset: Bind capslock to escape via registry | ||||
| REM uncap: Bind capslock to escape via run-time program | ||||
| call :CopyFile "!installer_dir!\win32_ctags.exe" "!cmder_dir!\bin\ctags.exe" || exit /B | ||||
| call :CopyFile "!installer_dir!\win32_scanmapset.exe" "!cmder_dir!\bin\scanmapset.exe" || exit /B | ||||
| call :CopyFile "!installer_dir!\win32_uncap.exe" "!cmder_dir!\bin\uncap.exe" || exit /B | ||||
| call :CopyFile "!installer_dir!\clang-format-style-file" "!home_dir!\_clang-format" || exit /B | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Python | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set python_sha256=93cc3db75dffb4d56b9f64af43294f130f2c222a66de7a1325d0ce8f1ed62e26 | ||||
| set python_version=3.9.0.2dot | ||||
| set python_version_nodot=3902 | ||||
| set python_version_dot=3.9.0 | ||||
| set python_url=https://github.com/winpython/winpython/releases/download/3.0.20201028/Winpython64-!python_version!.exe | ||||
| set python_zip=!downloads_dir!\win32_Winpython64-!python_version!.exe | ||||
| set python_dir=!tools_dir!\Winpython64-!python_version_nodot! | ||||
| set python_subfolder=!python_dir!\WPy64-!python_version_nodot! | ||||
| if not exist !python_dir! ( | ||||
|     call :DownloadFile !python_url! "!python_zip!" || exit /B | ||||
|     call :VerifyFileSHA256 "!python_zip!" "!python_sha256!" || exit /B | ||||
|     call :Unzip "!python_zip!" "!python_dir!" || exit /B | ||||
|     call :Move "!python_subfolder!" "!python_dir!" || exit /B | ||||
| ) | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM ripgrep | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set rg_sha256=a47ace6f654c5ffa236792fc3ee3fefd9c7e88e026928b44da801acb72124aa8 | ||||
| set rg_version=13.0.0 | ||||
| set rg_zip=!downloads_dir!\win32_rg_v!rg_version!.7z | ||||
| set rg_dir=!tools_dir!\ripgrep-!rg_version! | ||||
| set rg_subfolder=!rg_dir!\ripgrep-!rg_version!-x86_64-pc-windows-msvc | ||||
| if not exist !rg_dir! ( | ||||
|     call :DownloadFile "https://github.com/BurntSushi/ripgrep/releases/download/!rg_version!/ripgrep-!rg_version!-x86_64-pc-windows-msvc.zip" "!rg_zip!" || exit /B | ||||
|     call :VerifyFileSHA256 "!rg_zip!" "!rg_sha256!" || exit /B | ||||
|     call :Unzip "!rg_zip!" "!rg_dir!" || exit /B | ||||
|     call :Move "!rg_subfolder!" "!rg_dir!" || exit /B | ||||
| ) | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Zig | ||||
| @ -86,47 +201,47 @@ REM ---------------------------------------------------------------------------- | ||||
| set zig_sha256=8580fbbf3afb72e9b495c7f8aeac752a03475ae0bbcf5d787f3775c7e1f4f807 | ||||
| set zig_version=0.8.0 | ||||
| set zig_file=zig-windows-x86_64-!zig_version!.zip | ||||
| set zig_zip=!downloads_root!\win32_!zig_file! | ||||
| set zig_path=!compiler_root!\zig-windows-x86_64-!zig_version! | ||||
| call :DownloadFile https://ziglang.org/download/!zig_version!/!zig_file! !zig_zip! || exit /b | ||||
| call :VerifyFile !zig_zip! !zig_sha256! | ||||
| call :Unzip "!zig_zip!" "!compiler_root!" || exit /b | ||||
| set zig_zip=!downloads_dir!\win32_!zig_file! | ||||
| set zig_dir=!tools_dir!\zig-windows-x86_64-!zig_version! | ||||
| if not exist !zig_dir! ( | ||||
|     call :DownloadFile "https://ziglang.org/download/!zig_version!/!zig_file!" "!zig_zip!" || exit /B | ||||
|     call :VerifyFileSHA256 "!zig_zip!" "!zig_sha256!" || exit /B | ||||
|     call :Unzip "!zig_zip!" "!zig_dir!" || exit /B | ||||
| ) | ||||
| 
 | ||||
| set python_bin_dir=!tools_dir!\Winpython64-!python_version_nodot!\python-!python_version_dot!.amd64 | ||||
| set python_scripts_bin_dir=!python_bin_dir!\Scripts | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Python | ||||
| REM Super Terminal | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set python_version=3.9.0.2dot | ||||
| set python_version_nodot=3902 | ||||
| set python_url=https://github.com/winpython/winpython/releases/download/3.0.20201028/Winpython64-!python_version!.exe | ||||
| set python_zip=!downloads_root!\win32_Winpython64-!python_version!.exe | ||||
| set python_path=!tools_root!\WPy64-!python_version_nodot! | ||||
| call :DownloadFile !python_url! "!python_zip!" || exit /b | ||||
| call :Unzip "!python_zip!" "!tools_root!" || exit /b | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM Generate Cmder Startup Config File | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set cmder_config_file=!cmder_root!\config\user_profile.cmd | ||||
| echo - Generate cmder config at !cmder_config_file! | ||||
| echo @echo off> !cmder_config_file! | ||||
| echo set PATH=!zig_path!;%%PATH%%>> "!cmder_config_file!" | ||||
| echo set PATH=!python_path!\python-3.9.0.amd64;%%PATH%%>> "!cmder_config_file!" | ||||
| echo set PATH=!python_path!\python-3.9.0.amd64\Scripts;%%PATH%%>> "!cmder_config_file!" | ||||
| echo set PYTHONHOME=!python_path!\python-3.9.0.amd64>> "!cmder_config_file!" | ||||
| echo set HOME=!cmder_root!\..\Home>> "!cmder_config_file!" | ||||
| echo set HOMEPATH=!cmder_root!\..\Home>> "!cmder_config_file!" | ||||
| echo set USERPROFILE=!cmder_root!\..\Home>> "!cmder_config_file!" | ||||
| echo alias gvim=!cmder_root!\..\Tools\GVim\gvim.exe $*>> "!cmder_config_file!" | ||||
| set terminal_script=!root_dir!\terminal.bat | ||||
| echo @echo off> "!terminal_script!" | ||||
| echo set PATH=!gpg_w32_bin_dir!;%%PATH%%>> "!terminal_script!" | ||||
| echo set PATH=!llvm_bin_dir!;%%PATH%%>> "!terminal_script!" | ||||
| echo set PATH=!python_bin_dir!;%%PATH%%>> "!terminal_script!" | ||||
| echo set PATH=!python_scripts_bin_dir!;%%PATH%%>> "!terminal_script!" | ||||
| echo set PATH=!rg_dir!;%%PATH%%>> "!terminal_script!" | ||||
| echo set PATH=!zig_dir!;%%PATH%%>> "!terminal_script!" | ||||
| echo set PATH=!zip7_dir!;%%PATH%%>> "!terminal_script!" | ||||
| echo set PYTHONHOME=!python_bin_dir!>> "!terminal_script!" | ||||
| echo set HOME=!home_dir!>> "!terminal_script!" | ||||
| echo set HOMEPATH=!home_dir!>> "!terminal_script!" | ||||
| echo set USERPROFILE=!home_dir!>> "!terminal_script!" | ||||
| echo set gvim=!gvim_dir!\gvim.exe $*>> "!terminal_script!" | ||||
| echo call !tools_dir!\MSVC-2019-v16.9.2-VC-v14.28.29910-Win10-SDK-v10.0.19041.0-x64\msvc_env_x64.bat>> "!terminal_script!" | ||||
| echo !cmder_dir!\cmder.exe>> "!terminal_script!" | ||||
| 
 | ||||
| REM ---------------------------------------------------------------------------- | ||||
| REM CTags Helper Script | ||||
| REM ---------------------------------------------------------------------------- | ||||
| set ctags_file=!cmder_root!\bin\ctags_cpp.bat | ||||
| echo @echo off> !ctags_file! | ||||
| echo ctags --c++-kinds=+p --fields=+iaS --extras=+q !!*>> !ctags_file! | ||||
| set ctags_file=!cmder_dir!\bin\ctags_cpp.bat | ||||
| echo @echo off> "!ctags_file!" | ||||
| echo ctags --c++-kinds=+p --fields=+iaS --extras=+q %%*>> !ctags_file! | ||||
| 
 | ||||
| echo - Setup complete. Launch !cmder_root!\cmder.exe [or restart Cmder instance if you're updating an existing installation] | ||||
| exit /b | ||||
| echo - Setup complete. Launch !cmder_dir!\cmder.exe [or restart Cmder instance if you're updating an existing installation] | ||||
| pause | ||||
| exit /B | ||||
| 
 | ||||
| REM ------------------------------------------------------------------------------------------------ | ||||
| REM Functions | ||||
| @ -166,12 +281,12 @@ if exist !dest! ( | ||||
|     echo - [Cached] !msg! | ||||
| ) else ( | ||||
|     echo - !msg! | ||||
|     call !installer_root!\win32_7za.exe x -y -o!dest! !zip_file! | ||||
|     call !zip7_dir!\7z.exe x -y -spe -o!dest! !zip_file! | ||||
| ) | ||||
| exit /B | ||||
| 
 | ||||
| REM ------------------------------------------------------------------------------------------------ | ||||
| :VerifyFile | ||||
| :VerifyFileSHA256 | ||||
| set file=%~1 | ||||
| set expected_sha256=%~2 | ||||
| 
 | ||||
| @ -182,10 +297,19 @@ call powershell "$FileHash = Get-FileHash -algorithm sha256 !file!; $FileHash.Ha | ||||
| REM Verify Hash | ||||
| set /p actual_sha256=< !calculated_sha256_file! | ||||
| if "!expected_sha256!" neq "!actual_sha256!" ( | ||||
|     echo - [Verify] Hash BAD: Expected:   !expected_sha256! | ||||
|     echo - [Verify] !file! Hash BAD: Expected:   !expected_sha256! | ||||
|     echo                      Calculated: !actual_sha256! | ||||
|     exit /B -1 | ||||
| ) else ( | ||||
|     echo - [Verify] Hash OK: !expected_sha256! | ||||
|     echo - [Verify] !file! Hash OK: !expected_sha256! | ||||
|     exit /B 0 | ||||
| ) | ||||
| 
 | ||||
| REM ------------------------------------------------------------------------------------------------ | ||||
| :Move | ||||
| set src=%~1 | ||||
| set dest=%~2 | ||||
| 
 | ||||
| if exist !src! robocopy !src! !dest! /E /MOVE /NP /NJS /NJS /NS /NC /NFL /NDL | ||||
| 
 | ||||
| exit /B | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user