GitComet/scripts/windows/msvc-linker.cmd
2026-03-07 21:36:34 +02:00

85 lines
2.6 KiB
Batchfile

@echo off
setlocal EnableExtensions
set "VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
if not exist "%VSWHERE%" (
echo gitcomet: could not find vswhere.exe at "%VSWHERE%".
echo gitcomet: install Visual Studio 2022 Build Tools or Community with C++ workload.
exit /b 1
)
set "VSINSTALL="
for /f "usebackq delims=" %%I in (`"%VSWHERE%" -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do (
set "VSINSTALL=%%I"
)
if not defined VSINSTALL (
echo gitcomet: could not locate a Visual Studio installation with MSVC tools.
echo gitcomet: install the "Desktop development with C++" workload.
exit /b 1
)
set "MSVC_TOOLS=%VSINSTALL%\VC\Tools\MSVC"
if not exist "%MSVC_TOOLS%" (
echo gitcomet: MSVC tools directory not found: "%MSVC_TOOLS%".
exit /b 1
)
set "MSVC_VER="
for /f "delims=" %%I in ('dir /b /ad "%MSVC_TOOLS%" ^| sort /r') do (
set "MSVC_VER=%%I"
goto :msvc_version_found
)
:msvc_version_found
if not defined MSVC_VER (
echo gitcomet: no MSVC toolset found under "%MSVC_TOOLS%".
exit /b 1
)
set "MSVC_ROOT=%MSVC_TOOLS%\%MSVC_VER%"
set "LINK_EXE=%MSVC_ROOT%\bin\Hostx64\x64\link.exe"
if not exist "%LINK_EXE%" (
echo gitcomet: link.exe not found at "%LINK_EXE%".
exit /b 1
)
set "KITS_ROOT=%ProgramFiles(x86)%\Windows Kits\10"
set "KITS_LIB=%KITS_ROOT%\Lib"
set "KITS_INC=%KITS_ROOT%\Include"
if not exist "%KITS_LIB%" (
echo gitcomet: Windows SDK not found at "%KITS_LIB%".
echo gitcomet: install the Windows 10 or Windows 11 SDK component in Visual Studio Installer.
exit /b 1
)
set "SDK_VER="
for /f "delims=" %%I in ('dir /b /ad "%KITS_LIB%" ^| sort /r') do (
if exist "%KITS_LIB%\%%I\um\x64\kernel32.lib" (
set "SDK_VER=%%I"
goto :sdk_found
)
)
:sdk_found
if not defined SDK_VER (
echo gitcomet: Windows SDK libraries missing ^(kernel32.lib not found^).
echo gitcomet: install the Windows 10 or Windows 11 SDK component.
exit /b 1
)
set "MSVC_LIB=%MSVC_ROOT%\lib\x64"
set "MSVC_INCLUDE=%MSVC_ROOT%\include"
set "SDK_UM_LIB=%KITS_LIB%\%SDK_VER%\um\x64"
set "SDK_UCRT_LIB=%KITS_LIB%\%SDK_VER%\ucrt\x64"
set "SDK_SHARED_INC=%KITS_INC%\%SDK_VER%\shared"
set "SDK_UM_INC=%KITS_INC%\%SDK_VER%\um"
set "SDK_UCRT_INC=%KITS_INC%\%SDK_VER%\ucrt"
set "SDK_WINRT_INC=%KITS_INC%\%SDK_VER%\winrt"
set "SDK_CPPWINRT_INC=%KITS_INC%\%SDK_VER%\cppwinrt"
set "LIB=%MSVC_LIB%;%SDK_UM_LIB%;%SDK_UCRT_LIB%;%LIB%"
set "LIBPATH=%MSVC_LIB%;%SDK_UM_LIB%;%SDK_UCRT_LIB%;%LIBPATH%"
set "INCLUDE=%MSVC_INCLUDE%;%SDK_SHARED_INC%;%SDK_UM_INC%;%SDK_UCRT_INC%;%SDK_WINRT_INC%;%SDK_CPPWINRT_INC%;%INCLUDE%"
"%LINK_EXE%" %*
set "EXITCODE=%ERRORLEVEL%"
exit /b %EXITCODE%