Files
amnezia-client/deploy/build.bat
T

148 lines
4.5 KiB
Batchfile
Raw Normal View History

@echo off
setlocal EnableDelayedExpansion
set "PROJECT_DIR=%cd%"
set "BUILD_DIR=%PROJECT_DIR%\deploy\build"
:parse_args
if "%~1"=="" goto :done_args
if /i "%~1" == "-i" set "ARG_BUILD_INSTALLERS=!ARG_BUILD_INSTALLERS! %~2" & shift
if /i "%~1" == "--installer" set "ARG_BUILD_INSTALLERS=!ARG_BUILD_INSTALLERS! %~2" & shift
if /i "%~1" == "-arch" set "ARCH=%~2" & shift
if /i "%~1" == "--architecture" set "ARCH=%~2" & shift
shift
goto :parse_args
:done_args
if defined ARG_BUILD_INSTALLERS set "ARG_BUILD_INSTALLERS=%ARG_BUILD_INSTALLERS:all=ifw wix%"
:: understand toolchain arch (host_target) and Qt prefix path
if not defined ARCH set "ARCH=%PROCESSOR_ARCHITECTURE%"
if /i "%ARCH%" == "x64" set "ARCH=amd64"
if /i "%ARCH%" == "amd64" (
if /i "%PROCESSOR_ARCHITECTURE%" == "AMD64" set "_vcvars_arg=amd64"
if /i "%PROCESSOR_ARCHITECTURE%" == "x86" set "_vcvars_arg=x86_amd64"
set "_qt_postfix_arg=64"
)
if /i "%ARCH%" == "arm64" (
if /i "%PROCESSOR_ARCHITECTURE%" == "AMD64" set "_vcvars_arg=amd64_arm64"
if /i "%PROCESSOR_ARCHITECTURE%" == "x86" set "_vcvars_arg=x86_arm64"
set "_qt_postfix_arg=arm64"
)
if not defined _vcvars_arg (
echo ERROR: Unsupported architecture "%ARCH%"
goto :fail
)
if not defined QT_VERSION set "QT_VERSION=6.*"
if not defined QIF_VERSION set "QIF_VERSION=*"
set "_qt_bases=%USERPROFILE%\Qt C:\Qt"
if defined QT_INSTALL_DIR set "_qt_bases=%QT_INSTALL_DIR%\Qt %_qt_bases%"
:: search over Qt dirs to find framework and tools paths
for %%B in (%_qt_bases%) do (
if exist "%%~B" (
for /d %%D in (%%~B\%QT_VERSION%) do (
if not defined _qt_root_path (
set "_qt_root_path=%%D"
) else (
for %%I in (!_qt_root_path!) do call :compare_versions "%%~nxI" "%%~nxD"
if errorlevel 1 set "_qt_root_path=%%D"
)
)
for /d %%D in (%%~B\Tools\QtInstallerFramework\%QIF_VERSION%) do (
if not defined _qif_root_path (
set "_qif_root_path=%%D"
) else (
for %%I in (!_qif_root_path!) do call :compare_versions "%%~nxI" "%%~nxD"
if errorlevel 1 set "_qif_root_path=%%D"
)
)
if exist "%%~B\Tools\Ninja" set "PATH=%PATH%;%%~B\Tools\Ninja"
)
)
if not defined QT_ROOT_PATH set "QT_ROOT_PATH=%_qt_root_path%"
if not defined QIF_ROOT_PATH set "QIF_ROOT_PATH=%_qif_root_path%"
:: use vswhere to find path to vcvarsall.bat
if not defined VCINSTALLDIR (
if not defined VS_INSTALLER_PATH set "VS_INSTALLER_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
if exist "%VS_INSTALLER_PATH%" (
if defined "%VS_INSTALLATION_VERSION%" (
set "_version=-version [%VS_INSTALLATION_VERSION%]"
) else (
set "_version=-latest"
)
for /f "usebackq tokens=*" %%I in (
`"%VS_INSTALLER_PATH%" -products * %_version% -property resolvedInstallationPath`
) do (
if not defined VCVARS_PATH set "VCVARS_PATH=%%I\VC\Auxiliary\Build\vcvarsall.bat"
)
)
)
:: setup MSVC toolchain using vsvarsall.bat
if exist "%VCVARS_PATH%" (
@echo on
call "%VCVARS_PATH%" %_vcvars_arg%
@echo off
if errorlevel 1 goto :fail
)
:: build project and installers
@echo on
cmake -S "%PROJECT_DIR%" -B "%BUILD_DIR%" -DCMAKE_BUILD_TYPE=Release "-DCMAKE_PREFIX_PATH=%QT_ROOT_PATH%\msvc2022_%_qt_postfix_arg%" "-DCMAKE_VS_GLOBALS=UseMultiToolTask=true;EnforceProcessCountAcrossBuilds=true" || goto :fail
cmake --build "%BUILD_DIR%" --config Release -- /m || goto :fail
@echo off
for %%I in (%ARG_BUILD_INSTALLERS%) do (
if /i "%%I" == "ifw" call :do_ifw
if /i "%%I" == "wix" call :do_wix
if errorlevel 1 goto :fail
)
goto :eof
:: bakes IFW installer
:do_ifw
@echo on
cd "%BUILD_DIR%" && cpack -G IFW -D "QTIFWDIR=%QIF_ROOT_PATH%" || goto :fail
@echo off
goto :eof
:: bakes WIX installer
:do_wix
@echo on
cd "%BUILD_DIR%" && cpack -G WIX -D "WIX_BIN_DIR=%WIX_ROOT_PATH%" || goto :fail
@echo off
goto :eof
:fail
exit /b 1
:: compares any two versions
:compare_versions
set "_left=%~1"
set "_right=%~2"
set "_left_temp=%_left%"
set "_right_temp=%_right%"
:seg_loop
set "_ls=0"
for /f "tokens=1* delims=." %%A in ("%_left_temp%") do (
set "_ls=%%A" & set "_left_temp=%%B"
)
set "_rs=0"
for /f "tokens=1* delims=." %%A in ("%_right_temp%") do (
set "_rs=%%A" & set "_right_temp=%%B"
)
if %_rs% GTR %_ls% exit /b 1
if %_rs% LSS %_ls% exit /b -1
if defined _left_temp goto :seg_loop
if defined _right_temp goto :seg_loop
exit /b 0