Something has changed in Qt libraries remote layout so now the perl init-repository script from the old Qt version doesn't work anymore. We init the submodules using script from the latest Qt version and after that we checkout the desired version by tag in all submodules.
12 KiB
Build instructions for Visual Studio 2015
- Prepare folder
- Clone source code
- Prepare libraries
- Building Telegram Desktop
Prepare folder
Choose a folder for the future build, for example D:\TBuild\. There you will have two folders, Libraries for third-party libs and tdesktop for the app.
All commands (if not stated otherwise) will be launched from VS2015 x86 Native Tools Command Prompt.bat (should be in Start Menu > Programs > Visual Studio 2015 menu folder).
Clone source code
Go to D:\TBuild
D:
cd TBuild
and run
git clone --recursive https://github.com/telegramdesktop/tdesktop.git
mkdir Libraries
Prepare libraries
OpenSSL
Go to D:\TBuild\Libraries and run
git clone https://github.com/openssl/openssl.git
cd openssl
git checkout OpenSSL_1_0_1-stable
perl Configure VC-WIN32 --prefix=D:\TBuild\Libraries\openssl\Release
ms\do_ms
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
cd ..
git clone https://github.com/openssl/openssl.git openssl_debug
cd openssl_debug
git checkout OpenSSL_1_0_1-stable
perl Configure debug-VC-WIN32 --prefix=D:\TBuild\Libraries\openssl_debug\Debug
ms\do_ms
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
LZMA SDK 9.20
http://www.7-zip.org/sdk.html > Download LZMA SDK (C, C++, C#, Java) 9.20
Extract to D:\TBuild\Libraries
Building library
- Open in VS2015 D:\TBuild\Libraries\lzma\C\Util\LzmaLib\LzmaLib.dsw > One-way upgrade – OK
- For Debug and Release configurations
- LzmaLib Properties > General > Configuration Type = Static library (.lib) – Apply
- LzmaLib Properties > Librarian > General > Target Machine = MachineX86 (/MACHINE:X86) – OK
- If you can't find Librarian, you forgot to click Apply after changing the Configuration Type.
- For Debug configuration
- LzmaLib Properties > C/C++ > General > Debug Information Format = Program Database (/Zi) - OK
- Build Debug configuration
- Build Release configuration
zlib 1.2.8
http://www.zlib.net/fossils/ > Download zlib-1.2.8.tar.gz
Extract to D:\TBuild\Libraries
Building library
- Open in VS2015 D:\TBuild\Libraries\zlib-1.2.8\contrib\vstudio\vc11\zlibvc.sln > One-way upgrade – OK
- We are interested only in zlibstat project, but it depends on some custom pre-build step, so build all
- For Debug configuration
- zlibstat Properties > C/C++ > Code Generation > Runtime Library = Multi-threaded Debug (/MTd) – OK
- For Release configuration
- zlibstat Properties > C/C++ > Code Generation > Runtime Library = Multi-threaded (/MT) – OK
- Build Solution for Debug configuration – only zlibstat project builds successfully
- Build Solution for Release configuration – only zlibstat project builds successfully
libexif 0.6.20
Go to D:\TBuild\Libraries and run
git clone https://github.com/telegramdesktop/libexif-0.6.20.git
Building library
- Open in VS2015 D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln
- Build Debug configuration
- Build Release configuration
OpenAL Soft, slightly patched
Go to D:\TBuild\Libraries and run
git clone git://repo.or.cz/openal-soft.git
cd openal-soft
git checkout 18bb46163af
git apply ./../../tdesktop/Telegram/Patches/openal.diff
Building library
- Install CMake
- Go to D:\TBuild\Libraries\openal-soft\build and run
cmake -G "Visual Studio 14 2015" -D LIBTYPE:STRING=STATIC -D FORCE_STATIC_VCRT:STRING=ON ..
- Open in VS2015 D:\TBuild\Libraries\openal-soft\build\OpenAL.sln and build Debug and Release configurations
Opus codec
Go to D:\TBuild\Libraries and run
git clone https://github.com/telegramdesktop/opus.git
Building libraries
- Open in VS2015 D:\TBuild\Libraries\opus\win32\VS2010\opus.sln
- Build Debug configuration
- Build Release configuration (it will be required in FFmpeg build!)
FFmpeg
Go to D:\TBuild\Libraries and run
git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg
cd ffmpeg
git checkout release/3.2
http://msys2.github.io/ > Download msys2-x86_64-20150512.exe and install to D:\msys64
Building libraries
Download yasm for Win64 from http://yasm.tortall.net/Download.html, rename yasm-1.3.0-win64.exe to yasm.exe and place it to your Visual C++ bin directory, like \Program Files (x86)\Microsoft Visual Studio 14\VC\bin\
While still running the VS2015 x86 Native Tools Command Prompt, go to D:\msys64 and launch msys2_shell.bat. There run
PATH="/c/Program Files (x86)/Microsoft Visual Studio 14.0/VC/BIN:$PATH"
cd /d/TBuild/Libraries/ffmpeg
pacman -Sy
pacman -S msys/make
pacman -S mingw64/mingw-w64-x86_64-opus
pacman -S diffutils
pacman -S pkg-config
PKG_CONFIG_PATH="/mingw64/lib/pkgconfig:$PKG_CONFIG_PATH"
./configure --toolchain=msvc --disable-programs --disable-doc --disable-everything --enable-protocol=file --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=flac --enable-decoder=gif --enable-decoder=h264 --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=mpeg4 --enable-decoder=msmpeg4v2 --enable-decoder=msmpeg4v3 --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-encoder=libopus --enable-hwaccel=h264_d3d11va --enable-hwaccel=h264_dxva2 --enable-parser=aac --enable-parser=aac_latm --enable-parser=flac --enable-parser=h264 --enable-parser=mpeg4video --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-demuxer=aac --enable-demuxer=flac --enable-demuxer=gif --enable-demuxer=h264 --enable-demuxer=mov --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=wav --enable-muxer=ogg --enable-muxer=opus --extra-ldflags="-libpath:/d/TBuild/Libraries/opus/win32/VS2010/Win32/Release celt.lib silk_common.lib silk_float.lib"
make
make install
Qt 5.6.2, slightly patched
- Install Python 3.3.2 from https://www.python.org/download/releases/3.3.2 > Windows x86 MSI Installer (3.3.2)
- Go to D:\TBuild\Libraries and run
git clone git://code.qt.io/qt/qt5.git qt5_6_2
cd qt5_6_2
perl init-repository --module-subset=qtbase,qtimageformats
git checkout v5.6.2
cd qtimageformats && git checkout v5.6.2 && cd ..
cd qtbase && git checkout v5.6.2 && cd ..
Apply the patch
cd qtbase && git apply ../../../tdesktop/Telegram/Patches/qtbase_5_6_2.diff && cd ..
Install Windows SDKs
If you didn't install Windows SDKs before, you need to install them now. To install the SDKs just open Telegram solution at D:\TBuild\tdesktop\Telegram.sln and on startup Visual Studio 2015 will popup dialog box and ask to download and install extra components (including Windows 7 SDK).
If you already have Windows SDKs then find the library folder and correct it at configure's command below (like C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86).
Building library
Go to D:\TBuild\Libraries\qt5_6_2 and run
configure -debug-and-release -force-debug-info -opensource -confirm-license -static -I "D:\TBuild\Libraries\openssl\Release\include" -L "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib" -l Gdi32 -no-opengl -openssl-linked OPENSSL_LIBS_DEBUG="D:\TBuild\Libraries\openssl_debug\Debug\lib\ssleay32.lib D:\TBuild\Libraries\openssl_debug\Debug\lib\libeay32.lib" OPENSSL_LIBS_RELEASE="D:\TBuild\Libraries\openssl\Release\lib\ssleay32.lib D:\TBuild\Libraries\openssl\Release\lib\libeay32.lib" -mp -nomake examples -nomake tests -platform win32-msvc2015
nmake
nmake install
building (nmake command) will take really long time.
Qt5Package
https://visualstudiogallery.msdn.microsoft.com/c89ff880-8509-47a4-a262-e4fa07168408
Download, close all VS2015 instances and install for VS2015
Google Breakpad
Breakpad is a set of client and server components which implement a crash-reporting system.
Installation
depot_tools
Go to D:\TBuild\Libraries
and run
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
cd depot_tools
gclient
If you get errors like
Cannot rebase: You have unstaged changes.
Please commit or stash them.
Failed to update depot_tools.
run git reset --hard HEAD
and execute gclient
again
Breakpad
cd ..
mkdir breakpad && cd breakpad
..\depot_tools\fetch breakpad
..\depot_tools\gclient sync
xcopy src\src\* src /s /i
rmdir src\src /s /q
Build
- Open
D:\TBuild\Libraries\breakpad\src\client\windows\breakpad_client.sln
in VS2015 - Change
Treat WChar_t As Built in Type
toNo
in all projects & configurations (should be in Project -> Properties -> C/C++ -> Language) - Change
Treat Warnings As Errors
toNo
in all projects & configurations (should be in Project -> Properties -> C/C++ -> General) - Build Debug configuration
- Build Release configuration
Building Telegram Desktop
Setup GYP/Ninja and generate VS solution
- Download Ninja binaries and unpack them to D:\TBuild\Libraries\ninja to have D:\TBuild\Libraries\ninja\ninja.exe
- Go to D:\TBuild\Libraries and run
git clone https://chromium.googlesource.com/external/gyp
SET PATH=%PATH%;D:\TBuild\Libraries\gyp;D:\TBuild\Libraries\ninja;
cd ..\tdesktop\Telegram
If you want to pass a build define (like TDESKTOP_DISABLE_AUTOUPDATE
or TDESKTOP_DISABLE_NETWORK_PROXY
), call set TDESKTOP_BUILD_DEFINES=TDESKTOP_DISABLE_AUTOUPDATE,TDESKTOP_DISABLE_NETWORK_PROXY,...
(comma seperated string)
After, call gyp\refresh.bat
Configure VS
- Launch VS2015 for configuring Qt5Package
- QT5 > Qt Options > Add
- Version name: Qt 5.6.22Win32
- Path: D:\TBuild\Libraries\qt5_6_2\qtbase
- Default Qt/Win version: Qt 5.6.2 Win32 – OK - You may need to restart Visual Studio for this to take effect.
Build the project
- File > Open > Project/Solution > D:\TBuild\tdesktop\Telegram.sln
- Select Telegram project and press Build > Build Telegram (Debug and Release configurations)
- The result Telegram.exe will be located in D:\TBuild\tdesktop\out\Debug (and Release)