diff --git a/Telegram/SourceFiles/_other/packer.cpp b/Telegram/SourceFiles/_other/packer.cpp index 156ba726a..e563e1675 100644 --- a/Telegram/SourceFiles/_other/packer.cpp +++ b/Telegram/SourceFiles/_other/packer.cpp @@ -155,6 +155,7 @@ int main(int argc, char *argv[]) QString remove; int version = 0; [[maybe_unused]] bool targetwin64 = false; + [[maybe_unused]] bool targetwinarm = false; [[maybe_unused]] bool targetarmac = false; QFileInfoList files; for (int i = 0; i < argc; ++i) { @@ -165,6 +166,7 @@ int main(int argc, char *argv[]) if (remove.isEmpty()) remove = info.canonicalPath() + "/"; } else if (string("-target") == argv[i] && i + 1 < argc) { targetwin64 = (string("win64") == argv[i + 1]); + targetwinarm = (string("winarm") == argv[i + 1]); } else if (string("-arch") == argv[i] && i + 1 < argc) { targetarmac = (string("arm64") == argv[i + 1]); if (!targetarmac && string("x86_64") != argv[i + 1]) { @@ -493,7 +495,7 @@ int main(int argc, char *argv[]) cout << "Signature verified!\n"; RSA_free(pbKey); #ifdef Q_OS_WIN - QString outName((targetwin64 ? QString("tx64upd%1") : QString("tupdate%1")).arg(AlphaVersion ? AlphaVersion : version)); + QString outName((targetwinarm ? QString("tarm64upd%1") : targetwin64 ? QString("tx64upd%1") : QString("tupdate%1")).arg(AlphaVersion ? AlphaVersion : version)); #elif defined Q_OS_MAC QString outName((targetarmac ? QString("tarmacupd%1") : QString("tmacupd%1")).arg(AlphaVersion ? AlphaVersion : version)); #else diff --git a/Telegram/SourceFiles/core/update_checker.cpp b/Telegram/SourceFiles/core/update_checker.cpp index fe95f60db..777dde80c 100644 --- a/Telegram/SourceFiles/core/update_checker.cpp +++ b/Telegram/SourceFiles/core/update_checker.cpp @@ -245,6 +245,7 @@ QString FindUpdateFile() { "^(" "tupdate|" "tx64upd|" + "tarm64upd|" "tmacupd|" "tarmacupd|" "tlinuxupd|" diff --git a/Telegram/build/build.bat b/Telegram/build/build.bat index 3f3b65caa..6dc539c61 100644 --- a/Telegram/build/build.bat +++ b/Telegram/build/build.bat @@ -14,42 +14,54 @@ if not exist "%FullScriptPath%..\..\..\DesktopPrivate" ( FOR /F "tokens=1* delims= " %%i in (%FullScriptPath%target) do set "BuildTarget=%%i" -if "%BuildTarget%" equ "uwp" ( - set "BuildUWP=1" -) else if "%BuildTarget%" equ "uwp64" ( - set "BuildUWP=1" -) else ( - set "BuildUWP=0" -) - +set "Build64=0" +set "BuildARM=0" +set "BuildUWP=0" if "%BuildTarget%" equ "win64" ( set "Build64=1" +) else if "%BuildTarget%" equ "winarm" ( + set "BuildARM=1" +) else if "%BuildTarget%" equ "uwp" ( + set "BuildUWP=1" ) else if "%BuildTarget%" equ "uwp64" ( set "Build64=1" -) else ( - set "Build64=0" + set "BuildUWP=1" +) else if "%BuildTarget%" equ "uwparm" ( + set "BuildARM=1" + set "BuildUWP=1" ) if %Build64% neq 0 ( if "%Platform%" neq "x64" ( - echo Bad environment. Make sure to run from 'x64 Native Tools Command Prompt for VS 2019'. + echo Bad environment. Make sure to run from 'x64 Native Tools Command Prompt for VS 2022'. exit /b ) else if "%VSCMD_ARG_HOST_ARCH%" neq "x64" ( - echo Bad environment. Make sure to run from 'x64 Native Tools Command Prompt for VS 2019'. + echo Bad environment. Make sure to run from 'x64 Native Tools Command Prompt for VS 2022'. exit /b ) else if "%VSCMD_ARG_TGT_ARCH%" neq "x64" ( - echo Bad environment. Make sure to run from 'x64 Native Tools Command Prompt for VS 2019'. + echo Bad environment. Make sure to run from 'x64 Native Tools Command Prompt for VS 2022'. + exit /b + ) +) else if %BuildARM% neq 0 ( + if "%Platform%" neq "arm64" ( + echo Bad environment. Make sure to run from 'ARM64 Native Tools Command Prompt for VS 2022'. + exit /b + ) else if "%VSCMD_ARG_HOST_ARCH%" neq "arm64" ( + echo Bad environment. Make sure to run from 'ARM64 Native Tools Command Prompt for VS 2022'. + exit /b + ) else if "%VSCMD_ARG_TGT_ARCH%" neq "arm64" ( + echo Bad environment. Make sure to run from 'ARM64 Native Tools Command Prompt for VS 2022'. exit /b ) ) else ( if "%Platform%" neq "x86" ( - echo Bad environment. Make sure to run from 'x86 Native Tools Command Prompt for VS 2019'. + echo Bad environment. Make sure to run from 'x86 Native Tools Command Prompt for VS 2022'. exit /b ) else if "%VSCMD_ARG_HOST_ARCH%" neq "x86" ( - echo Bad environment. Make sure to run from 'x86 Native Tools Command Prompt for VS 2019'. + echo Bad environment. Make sure to run from 'x86 Native Tools Command Prompt for VS 2022'. exit /b ) else if "%VSCMD_ARG_TGT_ARCH%" neq "x86" ( - echo Bad environment. Make sure to run from 'x86 Native Tools Command Prompt for VS 2019'. + echo Bad environment. Make sure to run from 'x86 Native Tools Command Prompt for VS 2022'. exit /b ) ) @@ -76,12 +88,16 @@ echo. if %BuildUWP% neq 0 ( if %Build64% neq 0 ( echo Building version %AppVersionStrFull% for UWP 64 bit.. + ) else if %BuildARM% neq 0 ( + echo Building version %AppVersionStrFull% for UWP ARM.. ) else ( echo Building version %AppVersionStrFull% for UWP.. ) ) else ( if %Build64% neq 0 ( echo Building version %AppVersionStrFull% for Windows 64 bit.. + ) else if %BuildARM% neq 0 ( + echo Building version %AppVersionStrFull% for Windows on ARM.. ) else ( echo Building version %AppVersionStrFull% for Windows.. ) @@ -96,6 +112,11 @@ if %Build64% neq 0 ( set "SetupFile=tsetup-x64.%AppVersionStrFull%.exe" set "PortableFile=tportable-x64.%AppVersionStrFull%.zip" set "DumpSymsPath=%SolutionPath%\..\..\Libraries\win64\breakpad\src\tools\windows\dump_syms\Release\dump_syms.exe" +) else if %BuildARM% neq 0 ( + set "UpdateFile=tarm64upd%AppVersion%" + set "SetupFile=tsetup-arm64.%AppVersionStrFull%.exe" + set "PortableFile=tportable-arm64.%AppVersionStrFull%.zip" + set "DumpSymsPath=%SolutionPath%\..\..\Libraries\breakpad\src\tools\windows\dump_syms\Release\dump_syms.exe" ) else ( set "UpdateFile=tupdate%AppVersion%" set "SetupFile=tsetup.%AppVersionStrFull%.exe" @@ -210,7 +231,11 @@ if %BuildUWP% equ 0 ( if not exist "%SetupFile%" goto error ) - call Packer.exe -version %VersionForPacker% -path %BinaryName%.exe -path Updater.exe -path "modules\%Platform%\d3d\d3dcompiler_47.dll" -target %BuildTarget% %AlphaBetaParam% + if %BuildARM% neq 0 ( + call Packer.exe -version %VersionForPacker% -path %BinaryName%.exe -path Updater.exe -target %BuildTarget% %AlphaBetaParam% + ) else ( + call Packer.exe -version %VersionForPacker% -path %BinaryName%.exe -path Updater.exe -path "modules\%Platform%\d3d\d3dcompiler_47.dll" -target %BuildTarget% %AlphaBetaParam% + ) if %errorlevel% neq 0 goto error if %AlphaVersion% neq 0 ( @@ -309,10 +334,12 @@ if %BuildUWP% neq 0 ( if %errorlevel% neq 0 goto error ) -if %Build64% equ 0 ( - set "FinalDeployPath=%FinalReleasePath%\%AppVersionStrMajor%\%AppVersionStrFull%\tsetup" -) else ( +if %Build64% neq 0 ( set "FinalDeployPath=%FinalReleasePath%\%AppVersionStrMajor%\%AppVersionStrFull%\tx64" +) else if %BuildARM% neq 0 ( + set "FinalDeployPath=%FinalReleasePath%\%AppVersionStrMajor%\%AppVersionStrFull%\tarm64" +) else ( + set "FinalDeployPath=%FinalReleasePath%\%AppVersionStrMajor%\%AppVersionStrFull%\tsetup" ) if %BuildUWP% equ 0 ( diff --git a/Telegram/build/deploy.sh b/Telegram/build/deploy.sh index 23e8143e3..21183fa38 100755 --- a/Telegram/build/deploy.sh +++ b/Telegram/build/deploy.sh @@ -49,6 +49,7 @@ HomePath="$FullScriptPath/.." DeployMac="0" DeployWin="0" DeployWin64="0" +DeployWinArm="0" DeployLinux="0" if [ "$DeployTarget" == "mac" ]; then DeployMac="1" @@ -59,6 +60,9 @@ elif [ "$DeployTarget" == "win" ]; then elif [ "$DeployTarget" == "win64" ]; then DeployWin64="1" echo "Deploying version $AppVersionStrFull for Windows 64 bit.." +elif [ "$DeployTarget" == "winarm" ]; then + DeployWinArm="1" + echo "Deploying version $AppVersionStrFull for Windows on ARM.." elif [ "$DeployTarget" == "linux" ]; then DeployLinux="1" echo "Deploying version $AppVersionStrFull for Linux 64 bit.." @@ -66,8 +70,9 @@ else DeployMac="1" DeployWin="1" DeployWin64="1" + DeployWinArm="1" DeployLinux="1" - echo "Deploying four versions of $AppVersionStrFull: for Windows 32 bit, Windows 64 bit, macOS and Linux 64 bit.." + echo "Deploying five versions of $AppVersionStrFull: for Windows 32 bit, Windows 64 bit, Windows on ARM, macOS and Linux 64 bit.." fi if [ "$BuildTarget" == "mac" ]; then BackupPath="$HOME/Projects/backup/tdesktop" @@ -94,6 +99,11 @@ Win64UpdateFile="tx64upd$AppVersion" Win64SetupFile="tsetup-x64.$AppVersionStrFull.exe" Win64PortableFile="tportable-x64.$AppVersionStrFull.zip" Win64RemoteFolder="tx64" +WinArmDeployPath="$BackupPath/$AppVersionStrMajor/$AppVersionStrFull/tarm64" +WinArmUpdateFile="tarm64upd$AppVersion" +WinArmSetupFile="tsetup-arm64.$AppVersionStrFull.exe" +WinArmPortablefile="tportable-arm64.$AppVersionStrFull.zip" +WinArmRemoteFolder="tarm64" LinuxDeployPath="$BackupPath/$AppVersionStrMajor/$AppVersionStrFull/tlinux" LinuxUpdateFile="tlinuxupd$AppVersion" LinuxSetupFile="tsetup.$AppVersionStrFull.tar.xz" @@ -105,6 +115,8 @@ if [ "$AlphaVersion" != "0" ]; then AlphaFilePath="$WinDeployPath/$AlphaKeyFile" elif [ "$DeployTarget" == "win64" ]; then AlphaFilePath="$Win64DeployPath/$AlphaKeyFile" + elif [ "$DeployTarget" == "winarm" ]; then + AlphaFilePath="$WinArmDeployPath/$AlphaKeyFile" elif [ "$DeployTarget" == "linux" ]; then AlphaFilePath="$LinuxDeployPath/$AlphaKeyFile" else @@ -125,6 +137,8 @@ if [ "$AlphaVersion" != "0" ]; then WinPortableFile="talpha${AlphaVersion}_${AlphaSignature}.zip" Win64UpdateFile="${Win64UpdateFile}_${AlphaSignature}" Win64PortableFile="talpha${AlphaVersion}_${AlphaSignature}.zip" + WinArmUpdateFile="${WinArmUpdateFile}_${AlphaSignature}" + WinArmPortablefile="talpha${AlphaVersion}_${AlphaSignature}.zip" LinuxUpdateFile="${LinuxUpdateFile}_${AlphaSignature}" LinuxSetupFile="talpha${AlphaVersion}_${AlphaSignature}.tar.xz" fi @@ -166,6 +180,19 @@ if [ "$DeployWin64" == "1" ]; then Error "$Win64PortableFile not found!" fi fi +if [ "$DeployWinArm" == "1" ]; then + if [ ! -f "$WinArmDeployPath/$WinArmUpdateFile" ]; then + Error "$WinArmUpdateFile not found!" + fi + if [ "$AlphaVersion" == "0" ]; then + if [ ! -f "$WinArmDeployPath/$WinArmSetupFile" ]; then + Error "$WinArmSetupFile not found!" + fi + fi + if [ ! -f "$WinArmDeployPath/$WinArmPortableFile" ]; then + Error "$WinArmPortableFile not found!" + fi +fi if [ "$DeployLinux" == "1" ]; then if [ ! -f "$LinuxDeployPath/$LinuxUpdateFile" ]; then Error "$LinuxDeployPath/$LinuxUpdateFile not found!" @@ -193,6 +220,12 @@ if [ "$DeployWin64" == "1" ]; then Files+=("tx64/$Win64SetupFile") fi fi +if [ "$DeployWinArm" == "1" ]; then + Files+=("tarm64/$WinArmUpdateFile" "tarm64/$WinArmPortableFile") + if [ "$AlphaVersion" == "0" ]; then + Files+=("tarm64/$WinArmSetupFile") + fi +fi if [ "$DeployLinux" == "1" ]; then Files+=("tlinux/$LinuxUpdateFile" "tlinux/$LinuxSetupFile") fi diff --git a/Telegram/build/release.py b/Telegram/build/release.py index 4bcf93fe9..4e6f38352 100644 --- a/Telegram/build/release.py +++ b/Telegram/build/release.py @@ -220,6 +220,20 @@ files.append({ 'mime': 'application/zip', 'label': 'Windows 64 bit: Portable', }) +files.append({ + 'local': 'tsetup-arm64.' + version_full + '.exe', + 'remote': 'tsetup-arm64.' + version_full + '.exe', + 'backup_folder': 'tarm64', + 'mime': 'application/octet-stream', + 'label': 'Windows on ARM: Installer', +}) +files.append({ + 'local': 'tportable-arm64.' + version_full + '.zip', + 'remote': 'tportable-arm64.' + version_full + '.zip', + 'backup_folder': 'tarm64', + 'mime': 'application/zip', + 'label': 'Windows on ARM: Portable', +}) files.append({ 'local': 'tsetup.' + version_full + '.dmg', 'remote': 'tsetup.' + version_full + '.dmg', diff --git a/Telegram/build/setup.iss b/Telegram/build/setup.iss index 5c5ee7635..b0dd43f65 100644 --- a/Telegram/build/setup.iss +++ b/Telegram/build/setup.iss @@ -36,7 +36,12 @@ DisableProgramGroupPage=no WizardStyle=modern SignTool=sha256 -#if MyBuildTarget == "win64" +#if MyBuildTarget == "winarm" + ArchitecturesAllowed="arm64" + OutputBaseFilename=tsetup-arm64.{#MyAppVersionFull} + #define ArchModulesFolder "arm64" + AppVerName={#MyAppName} {#MyAppVersion} arm64 +#elif MyBuildTarget == "win64" ArchitecturesAllowed="x64 arm64" ArchitecturesInstallIn64BitMode="x64 arm64" OutputBaseFilename=tsetup-x64.{#MyAppVersionFull} @@ -68,7 +73,9 @@ Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescrip [Files] Source: "{#ReleasePath}\Telegram.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleasePath}\Updater.exe"; DestDir: "{app}"; Flags: ignoreversion +#if MyBuildTarget != "winarm" Source: "{#ReleasePath}\{#ModulesFolder}\d3d\d3dcompiler_47.dll"; DestDir: "{app}\{#ModulesFolder}\d3d"; Flags: ignoreversion +#endif ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] diff --git a/Telegram/lib_base b/Telegram/lib_base index 54639131b..4ac8cf9d6 160000 --- a/Telegram/lib_base +++ b/Telegram/lib_base @@ -1 +1 @@ -Subproject commit 54639131bf1e5dce87c10dba45062cfec804e343 +Subproject commit 4ac8cf9d65e47efa9d2022939c6d0c38f32d9c7a