From 54adf77d99fa218bb490f3821ce9305b07922737 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 25 Aug 2021 12:46:32 +0300 Subject: [PATCH] Build dependencies by script on Windows and macOS. --- .github/workflows/mac.yml | 39 +- Telegram/build/build.sh | 2 +- Telegram/build/prepare/mac.sh | 7 + Telegram/build/prepare/prepare.py | 789 ++++++++++++++++++++++++++++++ Telegram/build/prepare/win.bat | 12 + cmake | 2 +- docs/building-mac.md | 315 +----------- docs/building-mas.md | 2 +- docs/building-win-x64.md | 236 +-------- docs/building-win.md | 239 +-------- 10 files changed, 847 insertions(+), 796 deletions(-) create mode 100755 Telegram/build/prepare/mac.sh create mode 100644 Telegram/build/prepare/prepare.py create mode 100644 Telegram/build/prepare/win.bat diff --git a/.github/workflows/mac.yml b/.github/workflows/mac.yml index 191ce7bd7d..0dcbeab32b 100644 --- a/.github/workflows/mac.yml +++ b/.github/workflows/mac.yml @@ -52,12 +52,10 @@ jobs: MIN_MAC: "-mmacosx-version-min=10.12" UNGUARDED: "-Werror=unguarded-availability-new" GIT: "https://github.com" - PREFIX: "/usr/local/macos" MACOSX_DEPLOYMENT_TARGET: "10.12" XZ: "xz-5.2.5" QT: "5_15_2" OPENSSL_VER: "1_1_1" - QT_PREFIX: "/usr/local/desktop-app/Qt-5.15.2" LIBICONV_VER: "libiconv-1.16" UPLOAD_ARTIFACT: "false" ONLY_CACHE: "false" @@ -88,7 +86,6 @@ jobs: xcodebuild -version > CACHE_KEY.txt echo $MIN_MAC >> CACHE_KEY.txt - echo $PREFIX >> CACHE_KEY.txt echo $MANUAL_CACHING >> CACHE_KEY.txt echo "$GITHUB_WORKSPACE" >> CACHE_KEY.txt if [ "$AUTO_CACHING" == "1" ]; then @@ -99,9 +96,11 @@ jobs: echo "$PWD/Libraries/depot_tools" >> $GITHUB_PATH - mkdir -p Libraries/macos - cd Libraries/macos + mkdir -p Libraries + cd Libraries echo "LibrariesPath=`pwd`" >> $GITHUB_ENV + echo "PREFIX=`pwd`/local" >> $GITHUB_ENV + echo "QT_PREFIX=`pwd`/local/Qt-5.15.2" >> $GITHUB_ENV curl -o tg_owt-version.json https://api.github.com/repos/desktop-app/tg_owt/git/refs/heads/master @@ -123,7 +122,7 @@ jobs: cd $XZ CFLAGS="$MIN_MAC" LDFLAGS="$MIN_MAC" ./configure --prefix=$PREFIX make -j$(nproc) - sudo make install + make install - name: Zlib. run: | @@ -133,7 +132,7 @@ jobs: cd zlib CFLAGS="$MIN_MAC $UNGUARDED" LDFLAGS="$MIN_MAC" ./configure --prefix=$PREFIX make -j$(nproc) - sudo make install + make install - name: MozJPEG. run: | @@ -147,7 +146,7 @@ jobs: -DWITH_JPEG8=ON \ -DPNG_SUPPORTED=OFF cmake --build build -j$(nproc) - sudo cmake --install build + cmake --install build - name: OpenSSL cache. id: cache-openssl @@ -178,7 +177,7 @@ jobs: } copyLib libssl copyLib libcrypto - sudo cp -R include/. $SSL_DIR/include/ + cp -R include/. $SSL_DIR/include/ - name: Opus cache. id: cache-opus @@ -197,11 +196,11 @@ jobs: ./autogen.sh CFLAGS="$MIN_MAC $UNGUARDED" CPPFLAGS="$MIN_MAC $UNGUARDED" LDFLAGS="$MIN_MAC" ./configure --prefix=$PREFIX make -j$(nproc) - sudo make DESTDIR="$LibrariesPath/opus-cache" install + make DESTDIR="$LibrariesPath/opus-cache" install - name: Opus install. run: | cd $LibrariesPath - sudo cp -R opus-cache/. / + cp -R opus-cache/. / - name: Rnnoise. run: | @@ -229,11 +228,11 @@ jobs: cd $LIBICONV_VER CFLAGS="$MIN_MAC $UNGUARDED" CPPFLAGS="$MIN_MAC $UNGUARDED" LDFLAGS="$MIN_MAC" ./configure --enable-static --prefix=$PREFIX make -j$(nproc) - sudo make DESTDIR="$LibrariesPath/libiconv-cache" install + make DESTDIR="$LibrariesPath/libiconv-cache" install - name: Libiconv install. run: | cd $LibrariesPath - sudo cp -R libiconv-cache/. / + cp -R libiconv-cache/. / - name: FFmpeg cache. id: cache-ffmpeg @@ -356,7 +355,7 @@ jobs: --enable-muxer=opus make -j$(nproc) - sudo make install + make install - name: FFmpeg install. run: | cd $LibrariesPath @@ -371,8 +370,8 @@ jobs: copyLib libswscale copyLib libavutil - sudo cp -R ffmpeg-cache/. $PREFIX - sudo cp -R ffmpeg-cache/include/. ffmpeg/ + cp -R ffmpeg-cache/. $PREFIX + cp -R ffmpeg-cache/include/. ffmpeg/ - name: OpenAL Soft. run: | @@ -388,7 +387,7 @@ jobs: -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET .. make -j$(nproc) - sudo make install + make install - name: Crashpad cache. id: cache-crashpad @@ -440,8 +439,8 @@ jobs: run: | cd $LibrariesPath mv qt-cache Qt-5.15.2 - sudo mkdir -p $QT_PREFIX - sudo mv -f Qt-5.15.2 "$(dirname "$QT_PREFIX")"/ + mkdir -p $QT_PREFIX + mv -f Qt-5.15.2 "$(dirname "$QT_PREFIX")"/ - name: Qt 5.15.2 build. if: steps.cache-qt.outputs.cache-hit != 'true' run: | @@ -476,7 +475,7 @@ jobs: ZLIB_LIBS="$PREFIX/lib/libz.a" make -j$(nproc) - sudo make install + make install make clean cp -r $QT_PREFIX $LibrariesPath/qt-cache diff --git a/Telegram/build/build.sh b/Telegram/build/build.sh index bf9dfe0a8a..1a179ddb1d 100755 --- a/Telegram/build/build.sh +++ b/Telegram/build/build.sh @@ -238,7 +238,7 @@ if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "macstore" ]; then fi echo "Dumping debug symbols.." - "$HomePath/../../Libraries/macos/breakpad/src/tools/mac/dump_syms/build/Release/dump_syms" "$ReleasePath/$BinaryName.app.dSYM" > "$ReleasePath/$BinaryName.sym" 2>/dev/null + "$HomePath/../../Libraries/breakpad/src/tools/mac/dump_syms/build/Release/dump_syms" "$ReleasePath/$BinaryName.app.dSYM" > "$ReleasePath/$BinaryName.sym" 2>/dev/null echo "Done!" echo "Stripping the executable.." diff --git a/Telegram/build/prepare/mac.sh b/Telegram/build/prepare/mac.sh new file mode 100755 index 0000000000..82810b6cd5 --- /dev/null +++ b/Telegram/build/prepare/mac.sh @@ -0,0 +1,7 @@ +set -e +FullExecPath=$PWD +pushd `dirname $0` > /dev/null +FullScriptPath=`pwd` +popd > /dev/null + +python3 $FullScriptPath/prepare.py "$@" diff --git a/Telegram/build/prepare/prepare.py b/Telegram/build/prepare/prepare.py new file mode 100644 index 0000000000..d7a25f8859 --- /dev/null +++ b/Telegram/build/prepare/prepare.py @@ -0,0 +1,789 @@ +import os, sys, pprint, re, json, pathlib, hashlib, subprocess, glob + +executePath = os.getcwd() +scriptPath = os.path.dirname(os.path.realpath(__file__)) + +def finish(code): + global executePath + os.chdir(executePath) + sys.exit(code) + +def error(text): + print('[ERROR] ' + text) + finish(1) + +forcedSections = sys.argv[1:] + +win = (sys.platform == 'win32') +mac = (sys.platform == 'darwin') +win32 = win and (os.environ['Platform'] == 'x86') +win64 = win and (os.environ['Platform'] == 'x64') + +if win and not 'COMSPEC' in os.environ: + error('COMSPEC environment variable is not set.') + +if win and not win32 and not win64: + error('Make sure to run from Native Tools Command Prompt.') + +os.chdir(scriptPath + '/../../../..') + +dirSep = '\\' if win else '/' +pathSep = ';' if win else ':' +libsLoc = 'Libraries' if not win64 else 'Libraries/win64' +keysLoc = 'cache_keys' + +rootDir = os.getcwd() +libsDir = rootDir + dirSep + libsLoc +thirdPartyDir = rootDir + dirSep + 'ThirdParty' +usedPrefix = libsDir + dirSep + 'local' + +if not os.path.isdir(libsDir + '/' + keysLoc): + pathlib.Path(libsDir + '/' + keysLoc).mkdir(parents=True, exist_ok=True) +if not os.path.isdir(thirdPartyDir + '/' + keysLoc): + pathlib.Path(thirdPartyDir + '/' + keysLoc).mkdir(parents=True, exist_ok=True) + +pathPrefixes = [ + 'ThirdParty\\Strawberry\\perl\\bin', + 'ThirdParty\\Python27', + 'ThirdParty\\NASM', + 'ThirdParty\\jom', + 'ThirdParty\\cmake\\bin', + 'ThirdParty\\yasm', + 'ThirdParty\\gyp', + 'ThirdParty\\Ninja', +] if win else [ + 'ThirdParty/gyp', + 'ThirdParty/depot_tools', +] +pathPrefix = '' +for singlePrefix in pathPrefixes: + pathPrefix = pathPrefix + rootDir + dirSep + singlePrefix + pathSep + +environment = { + 'MAKE_THREADS_CNT': '-j8', + 'MACOSX_DEPLOYMENT_TARGET': '10.12', + 'UNGUARDED': '-Werror=unguarded-availability-new', + 'MIN_VER': '-mmacosx-version-min=10.12', + 'USED_PREFIX': usedPrefix, + 'ROOT_DIR': rootDir, + 'LIBS_DIR': libsDir, + 'SPECIAL_TARGET': 'win' if win32 else 'win64' if win64 else 'mac', + 'X8664': 'x86' if win32 else 'x64', + 'WIN32X64': 'Win32' if win32 else 'x64', + 'PATH_PREFIX': pathPrefix, +} +ignoreInCacheForThirdParty = [ + 'USED_PREFIX', + 'LIBS_DIR', + 'SPECIAL_TARGET', + 'X8664', + 'WIN32X64', +] + +environmentKeyString = '' +envForThirdPartyKeyString = '' +for key in environment: + part = key + '=' + environment[key] + ';' + environmentKeyString += part + if not key in ignoreInCacheForThirdParty: + envForThirdPartyKeyString += part +environmentKey = hashlib.sha1(environmentKeyString.encode('utf-8')).hexdigest() +envForThirdPartyKey = hashlib.sha1(envForThirdPartyKeyString.encode('utf-8')).hexdigest() + +modifiedEnv = os.environ.copy() +for key in environment: + modifiedEnv[key] = environment[key] + +modifiedEnv['PATH'] = environment['PATH_PREFIX'] + modifiedEnv['PATH'] + +def computeFileHash(path): + sha1 = hashlib.sha1() + with open(path, 'rb') as f: + while True: + data = f.read(256 * 1024) + if not data: + break + sha1.update(data) + return sha1.hexdigest() + +def computeCacheKey(stage): + if (stage['location'] == 'ThirdParty'): + envKey = envForThirdPartyKey + else: + envKey = environmentKey + objects = [ + envKey, + stage['location'], + stage['name'], + stage['version'], + stage['commands'] + ] + for pattern in stage['dependencies']: + pathlist = glob.glob(libsDir + '/' + pattern) + items = [pattern] + if len(pathlist) == 0: + pathlist = glob.glob(thirdPartyDir + '/' + pattern) + if len(pathlist) == 0: + error('Nothing found: ' + pattern) + for path in pathlist: + if not os.path.exists(path): + error('Not found: ' + path) + items.append(computeFileHash(path)) + objects.append(':'.join(items)) + return hashlib.sha1(';'.join(objects).encode('utf-8')).hexdigest() + +def keyPath(stage): + return stage['directory'] + '/' + keysLoc + '/' + stage['name'] + +def checkCacheKey(stage): + if not 'key' in stage: + error('Key not set in stage: ' + stage['name']) + key = keyPath(stage) + if stage['name'] in forcedSections or not os.path.exists(key) or not os.path.exists(stage['directory'] + '/' + stage['name']): + return False + with open(key, 'r') as file: + return (file.read() == stage['key']) + +def clearCacheKey(stage): + key = keyPath(stage) + if os.path.exists(key): + os.remove(key) + +def writeCacheKey(stage): + if not 'key' in stage: + error('Key not set in stage: ' + stage['name']) + key = keyPath(stage) + with open(key, 'w') as file: + file.write(stage['key']) + +stages = [] + +def removeDir(folder): + if win: + return 'if exist ' + folder + ' rmdir /Q /S ' + folder + '\nif exist ' + folder + ' exit /b 1' + return 'rm -rf ' + folder + +def filterByPlatform(commands): + commands = commands.split('\n') + result = '' + dependencies = [] + version = '0' + skip = False + for command in commands: + m = re.match(r'(!?)([a-z0-9_]+):', command) + if m and m.group(2) != 'depends' and m.group(2) != 'version': + scopes = m.group(2).split('_') + inscope = 'common' in scopes + if win and 'win' in scopes: + inscope = True + if win32 and 'win32' in scopes: + inscope = True + if win64 and 'win64' in scopes: + inscope = True + if mac and 'mac' in scopes: + inscope = True + # if linux and 'linux' in scopes: + # inscope = True + skip = inscope if m.group(1) == '!' else not inscope + elif not skip: + if m and m.group(2) == 'version': + version = version + '.' + command[len(m.group(0)):].strip() + elif m and m.group(2) == 'depends': + pattern = command[len(m.group(0)):].strip() + dependencies.append(pattern) + else: + command = command.strip() + if len(command) > 0: + result = result + command + '\n' + return [result, dependencies, version] + +def stage(name, commands, location = 'Libraries'): + if location == 'Libraries': + directory = libsDir + elif location == 'ThirdParty': + directory = thirdPartyDir + else: + error('Unknown location: ' + location) + [commands, dependencies, version] = filterByPlatform(commands) + if len(commands) > 0: + stages.append({ + 'name': name, + 'location': location, + 'directory': directory, + 'commands': commands, + 'version': version, + 'dependencies': dependencies + }) + +def winFailOnEach(command): + commands = command.split('\n') + result = '' + startingCommand = True + for command in commands: + command = re.sub(r'\$([A-Za-z0-9_]+)', r'%\1%', command) + if re.search(r'\$', command): + error('Bad command: ' + command) + appendCall = startingCommand and not re.match(r'(if|for) ', command) + called = 'call ' + command if appendCall else command + result = result + called + if command.endswith('^'): + startingCommand = False + else: + startingCommand = True + result = result + '\r\nif %errorlevel% neq 0 exit /b %errorlevel%\r\n' + return result + +def run(command): + print(command) + if win: + if os.path.exists("command.bat"): + os.remove("command.bat") + with open("command.bat", 'w') as file: + file.write('@echo OFF\r\n' + winFailOnEach(command)) + result = subprocess.run("command.bat", shell=True, env=modifiedEnv).returncode == 0 + if result and os.path.exists("command.bat"): + os.remove("command.bat") + return result + elif re.search(r'\%', command): + error('Bad command: ' + command) + else: + return subprocess.run("set -e\n" + command, shell=True, env=modifiedEnv).returncode == 0 + +def runStages(): + count = len(stages) + index = 0 + for stage in stages: + index = index + 1 + version = ('#' + str(stage['version'])) if (stage['version'] != '0') else '' + prefix = '[' + str(index) + '/' + str(count) + '](' + stage['location'] + '/' + stage['name'] + version + ')' + print(prefix + ': ', end = '') + stage['key'] = computeCacheKey(stage) + if checkCacheKey(stage): + print('SKIPPING') + else: + clearCacheKey(stage) + print('BUILDING') + os.chdir(stage['directory']) + commands = removeDir(stage['name']) + '\n' + stage['commands'] + if not run(commands): + print(prefix + ': FAILED') + finish(1) + writeCacheKey(stage) + +stage('patches', """ + git clone https://github.com/desktop-app/patches.git + cd patches + git checkout 975d6fbf1b +""") + +stage('depot_tools', """ +mac: + git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git +""", 'ThirdParty') + +stage('gyp', """ + git clone https://chromium.googlesource.com/external/gyp + cd gyp + git checkout d6c5dd51dc +depends:patches/gyp.diff + git apply $LIBS_DIR/patches/gyp.diff +mac: + ./setup.py build +""", 'ThirdParty') + +stage('yasm', """ +mac: + git clone -b macos_padding https://github.com/desktop-app/yasm.git + cd yasm + ./autogen.sh + make $MAKE_THREADS_CNT +""", 'ThirdParty') + +stage('macho_edit', """ +mac: + git clone https://github.com/desktop-app/macho_edit.git + cd macho_edit + xcodebuild build -configuration Release -project macho_edit.xcodeproj -target macho_edit +""", 'ThirdParty') + +stage('lzma', """ +win: + git clone https://github.com/desktop-app/lzma.git + cd lzma\\C\\Util\\LzmaLib + msbuild LzmaLib.sln /property:Configuration=Debug /property:Platform="$X8664" + msbuild LzmaLib.sln /property:Configuration=Release /property:Platform="$X8664" +""") + +stage('xz', """ +!win: + git clone -b v5.2.5 https://git.tukaani.org/xz.git + cd xz + CFLAGS="$UNGUARDED" CPPFLAGS="$UNGUARDED" cmake -B build . \\ + -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\ + -D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX + cmake --build build $MAKE_THREADS_CNT + cmake --install build +""") + +stage('zlib', """ + git clone https://github.com/desktop-app/zlib.git + cd zlib +win: + cd contrib\\vstudio\\vc14 + msbuild zlibstat.vcxproj /property:Configuration=Debug /property:Platform="%X8664%" + msbuild zlibstat.vcxproj /property:Configuration=ReleaseWithoutAsm /property:Platform="%X8664%" +mac: + CFLAGS="$MIN_VER $UNGUARDED" LDFLAGS="$MIN_VER" ./configure \\ + --prefix=$USED_PREFIX + make $MAKE_THREADS_CNT + make install +""") + +stage('mozjpeg', """ + git clone -b v4.0.1-rc2 https://github.com/mozilla/mozjpeg.git + cd mozjpeg +win: + cmake . ^ + -G "Visual Studio 16 2019" ^ + -A %WIN32X64% ^ + -DWITH_JPEG8=ON ^ + -DPNG_SUPPORTED=OFF + cmake --build . --config Debug + cmake --build . --config Release +mac: + cmake -B build . \\ + -D CMAKE_BUILD_TYPE=Release \\ + -D CMAKE_INSTALL_PREFIX=$USED_PREFIX \\ + -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\ + -D WITH_JPEG8=ON \\ + -D PNG_SUPPORTED=OFF + cmake --build build $MAKE_THREADS_CNT + cmake --install build +""") + +stage('openssl', """ + git clone -b OpenSSL_1_1_1-stable https://github.com/openssl/openssl openssl + cd openssl +win32: + perl Configure no-shared no-tests debug-VC-WIN32 +win64: + perl Configure no-shared no-tests debug-VC-WIN64A +win: + nmake + mkdir out.dbg + move libcrypto.lib out.dbg + move libssl.lib out.dbg + move ossl_static.pdb out.dbg\\ossl_static + nmake clean + move out.dbg\\ossl_static out.dbg\\ossl_static.pdb +win32: + perl Configure no-shared no-tests VC-WIN32 +win64: + perl Configure no-shared no-tests VC-WIN64A +win: + nmake + mkdir out + move libcrypto.lib out + move libssl.lib out + move ossl_static.pdb out +mac: + ./Configure --prefix=$USED_PREFIX no-shared no-tests darwin64-x86_64-cc $MIN_VER + make build_libs $MAKE_THREADS_CNT +""") + +stage('opus', """ + git clone -b td-v1.3.1 https://github.com/telegramdesktop/opus.git + cd opus +win: + cd win32\\VS2015 + msbuild opus.sln /property:Configuration=Debug /property:Platform="%WIN32X64%" + msbuild opus.sln /property:Configuration=Release /property:Platform="%WIN32X64%" +mac: + ./autogen.sh + CFLAGS="$MIN_VER $UNGUARDED" CPPFLAGS="$MIN_VER $UNGUARDED" LDFLAGS="$MIN_VER" ./configure --prefix=$USED_PREFIX + make $MAKE_THREADS_CNT + make install +""") + +stage('rnnoise', """ + git clone https://github.com/desktop-app/rnnoise.git + cd rnnoise + mkdir out + cd out +win: + cmake -A %WIN32X64% .. + cmake --build . --config Debug + cmake --build . --config Release +!win: + mkdir Debug + cd Debug + cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug ../.. + ninja + cd .. + mkdir Release + cd Release + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ../.. + ninja +""") + +stage('libiconv', """ +mac: + VERSION=1.16 + rm -f libiconv.tar.gz + wget -O libiconv.tar.gz https://ftp.gnu.org/pub/gnu/libiconv/libiconv-$VERSION.tar.gz + rm -rf libiconv-$VERSION + tar -xvzf libiconv.tar.gz + rm libiconv.tar.gz + mv libiconv-$VERSION libiconv + cd libiconv + CFLAGS="$MIN_VER $UNGUARDED" CPPFLAGS="$MIN_VER $UNGUARDED" LDFLAGS="$MIN_VER" ./configure --enable-static --prefix=$USED_PREFIX + make $MAKE_THREADS_CNT + make install +""") + +stage('ffmpeg', """ + git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg + cd ffmpeg + git checkout release/4.4 +win: + SET PATH_BACKUP_=%PATH% + SET PATH=%ROOT_DIR%\\ThirdParty\\msys64\\usr\\bin;%PATH% + + set CHERE_INVOKING=enabled_from_arguments + set MSYS2_PATH_TYPE=inherit + +depends:patches/build_ffmpeg_win.sh + bash --login ../patches/build_ffmpeg_win.sh + + SET PATH=%PATH_BACKUP_% +mac: + CFLAGS=`freetype-config --cflags` + LDFLAGS=`freetype-config --libs` + PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/X11/lib/pkgconfig + +depends:patches/macos_yasm_wrap.sh +depends:yasm/yasm +depends:macho_edit/build/Release/macho_edit + cp ../patches/macos_yasm_wrap.sh ./ + + ./configure --prefix=$USED_PREFIX \ + --extra-cflags="$MIN_VER $UNGUARDED -DCONFIG_SAFE_BITSTREAM_READER=1" \ + --extra-cxxflags="$MIN_VER $UNGUARDED -DCONFIG_SAFE_BITSTREAM_READER=1" \ + --extra-ldflags="$MIN_VER" \ + --x86asmexe=`pwd`/macos_yasm_wrap.sh \ + --enable-protocol=file \ + --enable-libopus \ + --disable-programs \ + --disable-doc \ + --disable-network \ + --disable-everything \ + --enable-hwaccel=h264_videotoolbox \ + --enable-hwaccel=hevc_videotoolbox \ + --enable-hwaccel=mpeg1_videotoolbox \ + --enable-hwaccel=mpeg2_videotoolbox \ + --enable-hwaccel=mpeg4_videotoolbox \ + --enable-decoder=aac \ + --enable-decoder=aac_at \ + --enable-decoder=aac_fixed \ + --enable-decoder=aac_latm \ + --enable-decoder=aasc \ + --enable-decoder=alac \ + --enable-decoder=alac_at \ + --enable-decoder=flac \ + --enable-decoder=gif \ + --enable-decoder=h264 \ + --enable-decoder=hevc \ + --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=opus \ + --enable-decoder=pcm_alaw \ + --enable-decoder=pcm_alaw_at \ + --enable-decoder=pcm_f32be \ + --enable-decoder=pcm_f32le \ + --enable-decoder=pcm_f64be \ + --enable-decoder=pcm_f64le \ + --enable-decoder=pcm_lxf \ + --enable-decoder=pcm_mulaw \ + --enable-decoder=pcm_mulaw_at \ + --enable-decoder=pcm_s16be \ + --enable-decoder=pcm_s16be_planar \ + --enable-decoder=pcm_s16le \ + --enable-decoder=pcm_s16le_planar \ + --enable-decoder=pcm_s24be \ + --enable-decoder=pcm_s24daud \ + --enable-decoder=pcm_s24le \ + --enable-decoder=pcm_s24le_planar \ + --enable-decoder=pcm_s32be \ + --enable-decoder=pcm_s32le \ + --enable-decoder=pcm_s32le_planar \ + --enable-decoder=pcm_s64be \ + --enable-decoder=pcm_s64le \ + --enable-decoder=pcm_s8 \ + --enable-decoder=pcm_s8_planar \ + --enable-decoder=pcm_u16be \ + --enable-decoder=pcm_u16le \ + --enable-decoder=pcm_u24be \ + --enable-decoder=pcm_u24le \ + --enable-decoder=pcm_u32be \ + --enable-decoder=pcm_u32le \ + --enable-decoder=pcm_u8 \ + --enable-decoder=vorbis \ + --enable-decoder=wavpack \ + --enable-decoder=wmalossless \ + --enable-decoder=wmapro \ + --enable-decoder=wmav1 \ + --enable-decoder=wmav2 \ + --enable-decoder=wmavoice \ + --enable-encoder=libopus \ + --enable-parser=aac \ + --enable-parser=aac_latm \ + --enable-parser=flac \ + --enable-parser=h264 \ + --enable-parser=hevc \ + --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=hevc \ + --enable-demuxer=m4v \ + --enable-demuxer=mov \ + --enable-demuxer=mp3 \ + --enable-demuxer=ogg \ + --enable-demuxer=wav \ + --enable-muxer=ogg \ + --enable-muxer=opus + + make $MAKE_THREADS_CNT + make install +""") + +stage('openal-soft', """ + git clone -b wasapi_exact_device_time https://github.com/telegramdesktop/openal-soft.git + cd openal-soft + cd build +win: + cmake .. ^ + -G "Visual Studio 16 2019" ^ + -A %WIN32X64% ^ + -D LIBTYPE:STRING=STATIC ^ + -D FORCE_STATIC_VCRT=ON + msbuild OpenAL.vcxproj /property:Configuration=Debug /property:Platform="%WIN32X64%" + msbuild OpenAL.vcxproj /property:Configuration=RelWithDebInfo /property:Platform="%WIN32X64%" +mac: + CFLAGS=$UNGUARDED CPPFLAGS=$UNGUARDED cmake \ + -D CMAKE_INSTALL_PREFIX:PATH=$USED_PREFIX \ + -D ALSOFT_EXAMPLES=OFF \ + -D LIBTYPE:STRING=STATIC \ + -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET .. + make $MAKE_THREADS_CNT + make install +""") + +stage('breakpad', """ + git clone https://chromium.googlesource.com/breakpad/breakpad + cd breakpad + git checkout bc8fb886 +depends:patches/breakpad.diff + git apply ../patches/breakpad.diff + git clone https://github.com/google/googletest src/testing +win: + cd src\\client\\windows + gyp --no-circular-check breakpad_client.gyp --format=ninja + cd ..\\.. + ninja -C out/Debug common crash_generation_client exception_handler + ninja -C out/Release common crash_generation_client exception_handler + cd tools\\windows\\dump_syms + gyp dump_syms.gyp --format=ninja + cd ..\\..\\.. + ninja -C out/Release dump_syms +mac: + git clone https://chromium.googlesource.com/linux-syscall-support src/third_party/lss + cd src/third_party/lss + git checkout a91633d1 + cd ../../.. + cd src/client/mac + xcodebuild -project Breakpad.xcodeproj -target Breakpad -configuration Debug build + xcodebuild -project Breakpad.xcodeproj -target Breakpad -configuration Release build + cd ../../tools/mac/dump_syms + xcodebuild -project dump_syms.xcodeproj -target dump_syms -configuration Release build +""") + +stage('crashpad', """ +mac: + git clone https://chromium.googlesource.com/crashpad/crashpad.git + cd crashpad + git checkout feb3aa3923 +depends:patches/crashpad.diff + git apply ../patches/crashpad.diff + cd third_party/mini_chromium + git clone https://chromium.googlesource.com/chromium/mini_chromium + cd mini_chromium + git checkout 7c5b0c1ab4 +depends:patches/mini_chromium.diff + git apply ../../../../patches/mini_chromium.diff + cd ../../gtest + git clone https://chromium.googlesource.com/external/github.com/google/googletest gtest + cd gtest + git checkout d62d6c6556 + cd ../../.. + + build/gyp_crashpad.py -Dmac_deployment_target=10.10 + ninja -C out/Debug base crashpad_util crashpad_client crashpad_handler + ninja -C out/Release base crashpad_util crashpad_client crashpad_handler +""") + +stage('tg_angle', """ +win: + git clone https://github.com/desktop-app/tg_angle.git + cd tg_angle + git checkout ec51cc6 + mkdir out + cd out + mkdir Debug + cd Debug + cmake -G Ninja ^ + -DCMAKE_BUILD_TYPE=Debug ^ + -DTG_ANGLE_SPECIAL_TARGET=%SPECIAL_TARGET% ^ + -DTG_ANGLE_ZLIB_INCLUDE_PATH=%LIBS_DIR%/zlib ../.. + ninja + cd .. + mkdir Release + cd Release + cmake -G Ninja ^ + -DCMAKE_BUILD_TYPE=Release ^ + -DTG_ANGLE_SPECIAL_TARGET=%SPECIAL_TARGET% ^ + -DTG_ANGLE_ZLIB_INCLUDE_PATH=%LIBS_DIR%/zlib ../.. + ninja + cd ..\\..\\.. +""") + +stage('qt_5_15_2', """ + git clone git://code.qt.io/qt/qt5.git qt_5_15_2 + cd qt_5_15_2 + perl init-repository --module-subset=qtbase,qtimageformats,qtsvg + git checkout v5.15.2 + git submodule update qtbase qtimageformats qtsvg +depends:patches/qtbase_5_15_2/*.patch + cd qtbase +win: + for /r %%i in (..\\..\\patches\\qtbase_5_15_2\\*) do git apply %%i + cd .. + + SET ANGLE_DIR=%LIBS_DIR%\\tg_angle + SET ANGLE_LIBS_DIR=%ANGLE_DIR%\\out + SET MOZJPEG_DIR=%LIBS_DIR%\\mozjpeg + SET OPENSSL_DIR=%LIBS_DIR%\\openssl + SET OPENSSL_LIBS_DIR=%OPENSSL_DIR%\\out + SET ZLIB_LIBS_DIR=%LIBS_DIR%\\zlib\\contrib\\vstudio\\vc14\\%X8664% + configure -prefix "%LIBS_DIR%\\Qt-5.15.2" ^ + -debug-and-release ^ + -force-debug-info ^ + -opensource ^ + -confirm-license ^ + -static ^ + -static-runtime ^ + -opengl es2 -no-angle ^ + -I "%ANGLE_DIR%\\include" ^ + -D "KHRONOS_STATIC=" ^ + -D "DESKTOP_APP_QT_STATIC_ANGLE=" ^ + QMAKE_LIBS_OPENGL_ES2_DEBUG="%ANGLE_LIBS_DIR%\\Debug\\tg_angle.lib %ZLIB_LIBS_DIR%\ZlibStatDebug\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib" ^ + QMAKE_LIBS_OPENGL_ES2_RELEASE="%ANGLE_LIBS_DIR%\\Release\\tg_angle.lib %ZLIB_LIBS_DIR%\ZlibStatReleaseWithoutAsm\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib" ^ + -egl ^ + QMAKE_LIBS_EGL_DEBUG="%ANGLE_LIBS_DIR%\\Debug\\tg_angle.lib %ZLIB_LIBS_DIR%\ZlibStatDebug\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib Gdi32.lib User32.lib" ^ + QMAKE_LIBS_EGL_RELEASE="%ANGLE_LIBS_DIR%\\Release\\tg_angle.lib %ZLIB_LIBS_DIR%\ZlibStatReleaseWithoutAsm\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib Gdi32.lib User32.lib" ^ + -openssl-linked ^ + -I "%OPENSSL_DIR%\include" ^ + OPENSSL_LIBS_DEBUG="%OPENSSL_LIBS_DIR%.dbg\libssl.lib %OPENSSL_LIBS_DIR%.dbg\libcrypto.lib Ws2_32.lib Gdi32.lib Advapi32.lib Crypt32.lib User32.lib" ^ + OPENSSL_LIBS_RELEASE="%OPENSSL_LIBS_DIR%\libssl.lib %OPENSSL_LIBS_DIR%\libcrypto.lib Ws2_32.lib Gdi32.lib Advapi32.lib Crypt32.lib User32.lib" ^ + -I "%MOZJPEG_DIR%" ^ + LIBJPEG_LIBS_DEBUG="%MOZJPEG_DIR%\Debug\jpeg-static.lib" ^ + LIBJPEG_LIBS_RELEASE="%MOZJPEG_DIR%\Release\jpeg-static.lib" ^ + -mp ^ + -nomake examples ^ + -nomake tests ^ + -platform win32-msvc + + jom -j16 + jom -j16 install +mac: + find ../../patches/qtbase_5_15_2 -type f -print0 | sort -z | xargs -0 git apply + cd .. + + ./configure -prefix "$USED_PREFIX/Qt-5.15.2" \ + -debug-and-release \ + -force-debug-info \ + -opensource \ + -confirm-license \ + -static \ + -opengl desktop \ + -no-openssl \ + -securetransport \ + -I "$USED_PREFIX/include" \ + LIBJPEG_LIBS="$USED_PREFIX/lib/libjpeg.a" \ + ZLIB_LIBS="$USED_PREFIX/lib/libz.a" \ + -nomake examples \ + -nomake tests \ + -platform macx-clang + + make $MAKE_THREADS_CNT + make install +""") + +stage('tg_owt', """ + git clone https://github.com/desktop-app/tg_owt.git + cd tg_owt + git checkout 91d836dc84 + git submodule init + git submodule update src/third_party/libvpx/source/libvpx src/third_party/libyuv +win: + SET MOZJPEG_PATH=$LIBS_DIR/mozjpeg + SET OPUS_PATH=$LIBS_DIR/opus/include + SET FFMPEG_PATH=$LIBS_DIR/ffmpeg +mac: + MOZJPEG_PATH=$USED_PREFIX/include + OPUS_PATH=$USED_PREFIX/include/opus + FFMPEG_PATH=$USED_PREFIX/include +common: + mkdir out + cd out + mkdir Debug + cd Debug + cmake -G Ninja \ + -DCMAKE_BUILD_TYPE=Debug \ + -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF \ + -DTG_OWT_SPECIAL_TARGET=$SPECIAL_TARGET \ + -DTG_OWT_LIBJPEG_INCLUDE_PATH=$MOZJPEG_PATH \ + -DTG_OWT_OPENSSL_INCLUDE_PATH=$LIBS_DIR/openssl/include \ + -DTG_OWT_OPUS_INCLUDE_PATH=$OPUS_PATH \ + -DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../.. + ninja + cd .. + mkdir Release + cd Release + cmake -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF \ + -DTG_OWT_SPECIAL_TARGET=$SPECIAL_TARGET \ + -DTG_OWT_LIBJPEG_INCLUDE_PATH=$MOZJPEG_PATH \ + -DTG_OWT_OPENSSL_INCLUDE_PATH=$LIBS_DIR/openssl/include \ + -DTG_OWT_OPUS_INCLUDE_PATH=$OPUS_PATH \ + -DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../.. + ninja +""") + +runStages() diff --git a/Telegram/build/prepare/win.bat b/Telegram/build/prepare/win.bat new file mode 100644 index 0000000000..c73fe2a3e5 --- /dev/null +++ b/Telegram/build/prepare/win.bat @@ -0,0 +1,12 @@ +@echo OFF + +set "FullScriptPath=%~dp0" + +python %FullScriptPath%prepare.py %* +if %errorlevel% neq 0 goto error + +exit /b + +:error +echo FAILED +exit /b 1 diff --git a/cmake b/cmake index 98c52815e9..f343a1634c 160000 --- a/cmake +++ b/cmake @@ -1 +1 @@ -Subproject commit 98c52815e90f049af4e97209a2283584bfecc913 +Subproject commit f343a1634cbdefb476e9020687db30a356ffe8f2 diff --git a/docs/building-mac.md b/docs/building-mac.md index cd485cc83f..d2d0ab408d 100644 --- a/docs/building-mac.md +++ b/docs/building-mac.md @@ -12,326 +12,13 @@ You will require **api_id** and **api_hash** to access the Telegram API servers. Go to ***BuildPath*** and run - MAKE_THREADS_CNT=-j8 - MACOSX_DEPLOYMENT_TARGET=10.12 - UNGUARDED="-Werror=unguarded-availability-new" - MIN_VER="-mmacosx-version-min=10.12" - ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew install automake cmake fdk-aac git lame libass libtool libvorbis libvpx ninja opus sdl shtool texi2html theora wget x264 xvid yasm pkg-config gnu-tar sudo xcode-select -s /Applications/Xcode.app/Contents/Developer git clone --recursive https://github.com/telegramdesktop/tdesktop.git - - mkdir ThirdParty - cd ThirdParty - - git clone https://github.com/desktop-app/patches.git - cd patches - git checkout d58ce6b2b0 - cd ../ - git clone https://chromium.googlesource.com/external/gyp - git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git - export PATH="$PWD/depot_tools:$PATH" - cd gyp - git checkout 9f2a7bb1 - git apply ../patches/gyp.diff - ./setup.py build - sudo ./setup.py install - cd .. - - git clone -b macos_padding https://github.com/desktop-app/yasm.git - cd yasm - ./autogen.sh - make $MAKE_THREADS_CNT - cd .. - - git clone https://github.com/desktop-app/macho_edit.git - cd macho_edit - xcodebuild build -configuration Release -project macho_edit.xcodeproj -target macho_edit - cd .. - - cd .. - mkdir -p Libraries/macos - cd Libraries/macos - - git clone https://github.com/desktop-app/patches.git - cd patches - git checkout d58ce6b2b0 - cd .. - - git clone https://git.tukaani.org/xz.git - cd xz - git checkout v5.2.5 - mkdir build - cd build - CFLAGS="$UNGUARDED" CPPFLAGS="$UNGUARDED" cmake -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.12 -D CMAKE_INSTALL_PREFIX:STRING=/usr/local/macos .. - make $MAKE_THREADS_CNT - sudo make install - cd ../.. - - git clone https://github.com/desktop-app/zlib.git - cd zlib - CFLAGS="$MIN_VER $UNGUARDED" LDFLAGS="$MIN_VER" ./configure --prefix=/usr/local/macos - make $MAKE_THREADS_CNT - sudo make install - cd .. - - git clone -b v4.0.1-rc2 https://github.com/mozilla/mozjpeg.git - cd mozjpeg - cmake -B build . \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr/local/macos \ - -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.12 \ - -DWITH_JPEG8=ON \ - -DPNG_SUPPORTED=OFF - cmake --build build $MAKE_THREADS_CNT - sudo cmake --install build - cd .. - - git clone https://github.com/openssl/openssl openssl_1_1_1 - cd openssl_1_1_1 - git checkout OpenSSL_1_1_1-stable - ./Configure --prefix=/usr/local/macos no-shared no-tests darwin64-x86_64-cc $MIN_VER - make build_libs $MAKE_THREADS_CNT - cd .. - - git clone https://github.com/xiph/opus.git - cd opus - git checkout v1.3 - ./autogen.sh - CFLAGS="$MIN_VER $UNGUARDED" CPPFLAGS="$MIN_VER $UNGUARDED" LDFLAGS="$MIN_VER" ./configure --prefix=/usr/local/macos - make $MAKE_THREADS_CNT - sudo make install - cd .. - - git clone https://github.com/desktop-app/rnnoise.git - cd rnnoise - mkdir out - cd out - mkdir Debug - cd Debug - cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug ../.. - ninja - cd .. - mkdir Release - cd Release - cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ../.. - ninja - cd ../../.. - - libiconv_ver=1.16 - wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-$libiconv_ver.tar.gz - tar -xvzf libiconv-$libiconv_ver.tar.gz - rm libiconv-$libiconv_ver.tar.gz - cd libiconv-$libiconv_ver - CFLAGS="$MIN_VER $UNGUARDED" CPPFLAGS="$MIN_VER $UNGUARDED" LDFLAGS="$MIN_VER" ./configure --enable-static --prefix=/usr/local/macos - make $MAKE_THREADS_CNT - sudo make install - cd .. - - git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg - cd ffmpeg - git checkout release/4.4 - CFLAGS=`freetype-config --cflags` - LDFLAGS=`freetype-config --libs` - PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/X11/lib/pkgconfig - cp ../patches/macos_yasm_wrap.sh ./ - - ./configure --prefix=/usr/local/macos \ - --extra-cflags="$MIN_VER $UNGUARDED -DCONFIG_SAFE_BITSTREAM_READER=1" \ - --extra-cxxflags="$MIN_VER $UNGUARDED -DCONFIG_SAFE_BITSTREAM_READER=1" \ - --extra-ldflags="$MIN_VER" \ - --x86asmexe=`pwd`/macos_yasm_wrap.sh \ - --enable-protocol=file \ - --enable-libopus \ - --disable-programs \ - --disable-doc \ - --disable-network \ - --disable-everything \ - --enable-hwaccel=h264_videotoolbox \ - --enable-hwaccel=hevc_videotoolbox \ - --enable-hwaccel=mpeg1_videotoolbox \ - --enable-hwaccel=mpeg2_videotoolbox \ - --enable-hwaccel=mpeg4_videotoolbox \ - --enable-decoder=aac \ - --enable-decoder=aac_at \ - --enable-decoder=aac_fixed \ - --enable-decoder=aac_latm \ - --enable-decoder=aasc \ - --enable-decoder=alac \ - --enable-decoder=alac_at \ - --enable-decoder=flac \ - --enable-decoder=gif \ - --enable-decoder=h264 \ - --enable-decoder=hevc \ - --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=opus \ - --enable-decoder=pcm_alaw \ - --enable-decoder=pcm_alaw_at \ - --enable-decoder=pcm_f32be \ - --enable-decoder=pcm_f32le \ - --enable-decoder=pcm_f64be \ - --enable-decoder=pcm_f64le \ - --enable-decoder=pcm_lxf \ - --enable-decoder=pcm_mulaw \ - --enable-decoder=pcm_mulaw_at \ - --enable-decoder=pcm_s16be \ - --enable-decoder=pcm_s16be_planar \ - --enable-decoder=pcm_s16le \ - --enable-decoder=pcm_s16le_planar \ - --enable-decoder=pcm_s24be \ - --enable-decoder=pcm_s24daud \ - --enable-decoder=pcm_s24le \ - --enable-decoder=pcm_s24le_planar \ - --enable-decoder=pcm_s32be \ - --enable-decoder=pcm_s32le \ - --enable-decoder=pcm_s32le_planar \ - --enable-decoder=pcm_s64be \ - --enable-decoder=pcm_s64le \ - --enable-decoder=pcm_s8 \ - --enable-decoder=pcm_s8_planar \ - --enable-decoder=pcm_u16be \ - --enable-decoder=pcm_u16le \ - --enable-decoder=pcm_u24be \ - --enable-decoder=pcm_u24le \ - --enable-decoder=pcm_u32be \ - --enable-decoder=pcm_u32le \ - --enable-decoder=pcm_u8 \ - --enable-decoder=vorbis \ - --enable-decoder=wavpack \ - --enable-decoder=wmalossless \ - --enable-decoder=wmapro \ - --enable-decoder=wmav1 \ - --enable-decoder=wmav2 \ - --enable-decoder=wmavoice \ - --enable-encoder=libopus \ - --enable-parser=aac \ - --enable-parser=aac_latm \ - --enable-parser=flac \ - --enable-parser=h264 \ - --enable-parser=hevc \ - --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=hevc \ - --enable-demuxer=m4v \ - --enable-demuxer=mov \ - --enable-demuxer=mp3 \ - --enable-demuxer=ogg \ - --enable-demuxer=wav \ - --enable-muxer=ogg \ - --enable-muxer=opus - - make $MAKE_THREADS_CNT - sudo make install - cd .. - - git clone --branch capture_with_webrtc https://github.com/telegramdesktop/openal-soft.git - cd openal-soft/build - CFLAGS=$UNGUARDED CPPFLAGS=$UNGUARDED cmake -D CMAKE_INSTALL_PREFIX:PATH=/usr/local/macos -D ALSOFT_EXAMPLES=OFF -D LIBTYPE:STRING=STATIC -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.12 .. - make $MAKE_THREADS_CNT - sudo make install - cd ../.. - - git clone https://chromium.googlesource.com/crashpad/crashpad.git - cd crashpad - git checkout feb3aa3923 - git apply ../patches/crashpad.diff - cd third_party/mini_chromium - git clone https://chromium.googlesource.com/chromium/mini_chromium - cd mini_chromium - git checkout 7c5b0c1ab4 - git apply ../../../../patches/mini_chromium.diff - cd ../../gtest - git clone https://chromium.googlesource.com/external/github.com/google/googletest gtest - cd gtest - git checkout d62d6c6556 - cd ../../.. - - build/gyp_crashpad.py -Dmac_deployment_target=10.10 - ninja -C out/Debug base crashpad_util crashpad_client crashpad_handler - ninja -C out/Release base crashpad_util crashpad_client crashpad_handler - cd .. - - git clone git://code.qt.io/qt/qt5.git qt_5_15_2 - cd qt_5_15_2 - perl init-repository --module-subset=qtbase,qtimageformats,qtsvg - git checkout v5.15.2 - git submodule update qtbase qtimageformats qtsvg - cd qtbase - find ../../patches/qtbase_5_15_2 -type f -print0 | sort -z | xargs -0 git apply - cd .. - - ./configure -prefix "/usr/local/desktop-app/Qt-5.15.2" \ - -debug-and-release \ - -force-debug-info \ - -opensource \ - -confirm-license \ - -static \ - -opengl desktop \ - -no-openssl \ - -securetransport \ - -I "/usr/local/macos/include" \ - LIBJPEG_LIBS="/usr/local/macos/lib/libjpeg.a" \ - ZLIB_LIBS="/usr/local/macos/lib/libz.a" \ - -nomake examples \ - -nomake tests \ - -platform macx-clang - - make $MAKE_THREADS_CNT - sudo make install - cd .. - - git clone https://github.com/desktop-app/tg_owt.git - cd tg_owt - git checkout 91d836dc84 - git submodule init - git submodule update - mkdir out - cd out - mkdir Debug - cd Debug - cmake -G Ninja \ - -DCMAKE_BUILD_TYPE=Debug \ - -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF \ - -DTG_OWT_SPECIAL_TARGET=mac \ - -DTG_OWT_LIBJPEG_INCLUDE_PATH=/usr/local/macos/include \ - -DTG_OWT_OPENSSL_INCLUDE_PATH=`pwd`/../../../openssl_1_1_1/include \ - -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/macos/include/opus \ - -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/macos/include ../.. - ninja - cd .. - mkdir Release - cd Release - cmake -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF \ - -DTG_OWT_SPECIAL_TARGET=mac \ - -DTG_OWT_LIBJPEG_INCLUDE_PATH=/usr/local/macos/include \ - -DTG_OWT_OPENSSL_INCLUDE_PATH=`pwd`/../../../openssl_1_1_1/include \ - -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/macos/include/opus \ - -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/macos/include ../.. - ninja - cd ../../.. + ./tdesktop/Telegram/build/prepare/mac.sh ### Building the project diff --git a/docs/building-mas.md b/docs/building-mas.md index cb8ca52ed2..da7be145bb 100644 --- a/docs/building-mas.md +++ b/docs/building-mas.md @@ -8,7 +8,7 @@ Go to ***BuildPath*** and run MACOSX_DEPLOYMENT_TARGET=10.12 - cd Libraries/macos + cd Libraries git clone https://chromium.googlesource.com/breakpad/breakpad cd breakpad diff --git a/docs/building-win-x64.md b/docs/building-win-x64.md index 5073fefff8..37d1bfd80d 100644 --- a/docs/building-win-x64.md +++ b/docs/building-win-x64.md @@ -23,251 +23,31 @@ You will require **api_id** and **api_hash** to access the Telegram API servers. * Download **Yasm** executable from [http://yasm.tortall.net/Download.html](http://yasm.tortall.net/Download.html), rename to *yasm.exe* and put to ***BuildPath*\\ThirdParty\\yasm** * Download **MSYS2** installer from [http://www.msys2.org/](http://www.msys2.org/) and install to ***BuildPath*\\ThirdParty\\msys64** * Download **jom** archive from [http://download.qt.io/official_releases/jom/jom.zip](http://download.qt.io/official_releases/jom/jom.zip) and unpack to ***BuildPath*\\ThirdParty\\jom** -* Download **Python 2.7** installer from [https://www.python.org/downloads/](https://www.python.org/downloads/) and install to ***BuildPath*\\ThirdParty\\Python27** +* Download **Python 3.9** installer from [https://www.python.org/downloads/](https://www.python.org/downloads/) and install to ***BuildPath*\\ThirdParty\\Python27** * Download **CMake** installer from [https://cmake.org/download/](https://cmake.org/download/) and install to ***BuildPath*\\ThirdParty\\cmake** * Download **Ninja** executable from [https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-win.zip](https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-win.zip) and unpack to ***BuildPath*\\ThirdParty\\Ninja** * Download **Git** installer from [https://git-scm.com/download/win](https://git-scm.com/download/win) and install it. * Download **NuGet** executable from [https://dist.nuget.org/win-x86-commandline/latest/nuget.exe](https://dist.nuget.org/win-x86-commandline/latest/nuget.exe) and put to ***BuildPath*\\ThirdParty\\NuGet** -Open **x64 Native Tools Command Prompt for VS 2019.bat**, go to ***BuildPath*** and run - - cd ThirdParty - git clone https://github.com/desktop-app/patches.git - cd patches - git checkout d58ce6b2b0 - cd ../ - git clone https://chromium.googlesource.com/external/gyp - cd gyp - git checkout 9f2a7bb1 - git apply ../patches/gyp.diff - cd ..\.. - -Add **GYP**, **Ninja** and **NuGet** to your PATH: +Add **Python 3.9** and **NuGet** to your PATH: * Open **Control Panel** -> **System** -> **Advanced system settings**. * Press **Environment Variables...**. * Select **Path**. * Press **Edit**. -* Add ***BuildPath*\\ThirdParty\\gyp** value. -* Add ***BuildPath*\\ThirdParty\\Ninja** value. +* Add ***BuildPath*\\ThirdParty\\Python39** value. * Add ***BuildPath*\\ThirdParty\\NuGet** value. +Open **x64 Native Tools Command Prompt for VS 2019.bat**, go to ***BuildPath*** and run + + python -m pip install pywin32 + ## Clone source code and prepare libraries Open **x64 Native Tools Command Prompt for VS 2019.bat**, go to ***BuildPath*** and run - SET PATH=%cd%\ThirdParty\Strawberry\perl\bin;%cd%\ThirdParty\Python27;%cd%\ThirdParty\NASM;%cd%\ThirdParty\jom;%cd%\ThirdParty\cmake\bin;%cd%\ThirdParty\yasm;%PATH% - git clone --recursive https://github.com/telegramdesktop/tdesktop.git - - if not exist Libraries\win64 mkdir Libraries\win64 - cd Libraries\win64 - - git clone https://github.com/desktop-app/patches.git - cd patches - git checkout d58ce6b2b0 - cd .. - - git clone https://github.com/desktop-app/lzma.git - cd lzma\C\Util\LzmaLib - msbuild LzmaLib.sln /property:Configuration=Debug /property:Platform="x64" - msbuild LzmaLib.sln /property:Configuration=Release /property:Platform="x64" - cd ..\..\..\.. - - git clone https://github.com/openssl/openssl.git openssl_1_1_1 - cd openssl_1_1_1 - git checkout OpenSSL_1_1_1-stable - perl Configure no-shared no-tests debug-VC-WIN64A - nmake - mkdir out64.dbg - move libcrypto.lib out64.dbg - move libssl.lib out64.dbg - move ossl_static.pdb out64.dbg\ossl_static - nmake clean - move out64.dbg\ossl_static out64.dbg\ossl_static.pdb - perl Configure no-shared no-tests VC-WIN64A - nmake - mkdir out64 - move libcrypto.lib out64 - move libssl.lib out64 - move ossl_static.pdb out64 - cd .. - - git clone https://github.com/desktop-app/zlib.git - cd zlib\contrib\vstudio\vc14 - msbuild zlibstat.vcxproj /property:Configuration=Debug /property:Platform="x64" - msbuild zlibstat.vcxproj /property:Configuration=ReleaseWithoutAsm /property:Platform="x64" - cd ..\..\..\.. - - git clone -b v4.0.1-rc2 https://github.com/mozilla/mozjpeg.git - cd mozjpeg - cmake . ^ - -G "Visual Studio 16 2019" ^ - -A x64 ^ - -DWITH_JPEG8=ON ^ - -DPNG_SUPPORTED=OFF - cmake --build . --config Debug - cmake --build . --config Release - cd .. - - git clone https://github.com/telegramdesktop/openal-soft.git - cd openal-soft - git checkout wasapi_exact_device_time - cd build - cmake .. ^ - -G "Visual Studio 16 2019" ^ - -A x64 ^ - -D LIBTYPE:STRING=STATIC ^ - -D FORCE_STATIC_VCRT=ON - msbuild OpenAL.vcxproj /property:Configuration=Debug /property:Platform="x64" - msbuild OpenAL.vcxproj /property:Configuration=RelWithDebInfo /property:Platform="x64" - cd ..\.. - - git clone https://github.com/google/breakpad - cd breakpad - git checkout a1dbcdcb43 - git apply ../patches/breakpad.diff - cd src - git clone https://github.com/google/googletest testing - cd client\windows - gyp --no-circular-check breakpad_client.gyp --format=ninja - cd ..\.. - ninja -C out/Debug_x64 common crash_generation_client exception_handler - ninja -C out/Release_x64 common crash_generation_client exception_handler - cd tools\windows\dump_syms - gyp dump_syms.gyp - msbuild dump_syms.vcxproj /property:Configuration=Release /property:Platform="x64" - cd ..\..\..\..\.. - - git clone https://github.com/telegramdesktop/opus.git - cd opus - git checkout tdesktop - cd win32\VS2015 - msbuild opus.sln /property:Configuration=Debug /property:Platform="x64" - msbuild opus.sln /property:Configuration=Release /property:Platform="x64" - cd ..\..\.. - - git clone https://github.com/desktop-app/rnnoise.git - cd rnnoise - mkdir out - cd out - cmake -A x64 .. - cmake --build . --config Debug - cmake --build . --config Release - cd ..\.. - - cd ..\.. - SET PATH_BACKUP_=%PATH% - SET PATH=%cd%\ThirdParty\msys64\usr\bin;%PATH% - cd Libraries\win64 - - git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg - cd ffmpeg - git checkout release/4.4 - - set CHERE_INVOKING=enabled_from_arguments - set MSYS2_PATH_TYPE=inherit - bash --login ../patches/build_ffmpeg_win.sh - - SET PATH=%PATH_BACKUP_% - cd .. - - git clone https://github.com/desktop-app/tg_angle.git - cd tg_angle - git checkout ec51cc6 - mkdir out - cd out - mkdir Debug - cd Debug - cmake -G Ninja ^ - -DCMAKE_BUILD_TYPE=Debug ^ - -DTG_ANGLE_SPECIAL_TARGET=win64 ^ - -DTG_ANGLE_ZLIB_INCLUDE_PATH=%cd%/../../../zlib ../.. - ninja - cd .. - mkdir Release - cd Release - cmake -G Ninja ^ - -DCMAKE_BUILD_TYPE=Release ^ - -DTG_ANGLE_SPECIAL_TARGET=win64 ^ - -DTG_ANGLE_ZLIB_INCLUDE_PATH=%cd%/../../../zlib ../.. - ninja - cd ..\..\.. - - SET LibrariesPath=%cd% - git clone git://code.qt.io/qt/qt5.git qt_5_15_2 - cd qt_5_15_2 - perl init-repository --module-subset=qtbase,qtimageformats,qtsvg - git checkout v5.15.2 - git submodule update qtbase qtimageformats qtsvg - cd qtbase - for /r %i in (..\..\patches\qtbase_5_15_2\*) do git apply %i - cd .. - - configure ^ - -prefix "%LibrariesPath%\Qt-5.15.2" ^ - -debug-and-release ^ - -force-debug-info ^ - -opensource ^ - -confirm-license ^ - -static ^ - -static-runtime ^ - -opengl es2 -no-angle ^ - -I "%LibrariesPath%\tg_angle\include" ^ - -D "KHRONOS_STATIC=" ^ - -D "DESKTOP_APP_QT_STATIC_ANGLE=" ^ - QMAKE_LIBS_OPENGL_ES2_DEBUG="%LibrariesPath%\tg_angle\out\Debug\tg_angle.lib %LibrariesPath%\zlib\contrib\vstudio\vc14\x64\ZlibStatDebug\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib" ^ - QMAKE_LIBS_OPENGL_ES2_RELEASE="%LibrariesPath%\tg_angle\out\Release\tg_angle.lib %LibrariesPath%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib" ^ - -egl ^ - QMAKE_LIBS_EGL_DEBUG="%LibrariesPath%\tg_angle\out\Debug\tg_angle.lib %LibrariesPath%\zlib\contrib\vstudio\vc14\x64\ZlibStatDebug\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib Gdi32.lib User32.lib" ^ - QMAKE_LIBS_EGL_RELEASE="%LibrariesPath%\tg_angle\out\Release\tg_angle.lib %LibrariesPath%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib Gdi32.lib User32.lib" ^ - -openssl-linked ^ - -I "%LibrariesPath%\openssl_1_1_1\include" ^ - OPENSSL_LIBS_DEBUG="%LibrariesPath%\openssl_1_1_1\out64.dbg\libssl.lib %LibrariesPath%\openssl_1_1_1\out64.dbg\libcrypto.lib Ws2_32.lib Gdi32.lib Advapi32.lib Crypt32.lib User32.lib" ^ - OPENSSL_LIBS_RELEASE="%LibrariesPath%\openssl_1_1_1\out64\libssl.lib %LibrariesPath%\openssl_1_1_1\out64\libcrypto.lib Ws2_32.lib Gdi32.lib Advapi32.lib Crypt32.lib User32.lib" ^ - -I "%LibrariesPath%\mozjpeg" ^ - LIBJPEG_LIBS_DEBUG="%LibrariesPath%\mozjpeg\Debug\jpeg-static.lib" ^ - LIBJPEG_LIBS_RELEASE="%LibrariesPath%\mozjpeg\Release\jpeg-static.lib" ^ - -mp ^ - -nomake examples ^ - -nomake tests ^ - -platform win32-msvc - - jom -j8 - jom -j8 install - cd .. - - git clone https://github.com/desktop-app/tg_owt.git - cd tg_owt - git checkout 91d836dc84 - git submodule init - git submodule update - mkdir out - cd out - mkdir Debug - cd Debug - cmake -G Ninja ^ - -DCMAKE_BUILD_TYPE=Debug ^ - -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF ^ - -DTG_OWT_SPECIAL_TARGET=win64 ^ - -DTG_OWT_LIBJPEG_INCLUDE_PATH=%cd%/../../../mozjpeg ^ - -DTG_OWT_OPENSSL_INCLUDE_PATH=%cd%/../../../openssl_1_1_1/include ^ - -DTG_OWT_OPUS_INCLUDE_PATH=%cd%/../../../opus/include ^ - -DTG_OWT_FFMPEG_INCLUDE_PATH=%cd%/../../../ffmpeg ../.. - ninja - cd .. - mkdir Release - cd Release - cmake -G Ninja ^ - -DCMAKE_BUILD_TYPE=Release ^ - -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF ^ - -DTG_OWT_SPECIAL_TARGET=win64 ^ - -DTG_OWT_LIBJPEG_INCLUDE_PATH=%cd%/../../../mozjpeg ^ - -DTG_OWT_OPENSSL_INCLUDE_PATH=%cd%/../../../openssl_1_1_1/include ^ - -DTG_OWT_OPUS_INCLUDE_PATH=%cd%/../../../opus/include ^ - -DTG_OWT_FFMPEG_INCLUDE_PATH=%cd%/../../../ffmpeg ../.. - ninja - cd ..\..\.. + tdesktop\Telegram\build\prepare\win.bat ## Build the project diff --git a/docs/building-win.md b/docs/building-win.md index 64b8e1e645..0c9af5d7b8 100644 --- a/docs/building-win.md +++ b/docs/building-win.md @@ -23,254 +23,31 @@ You will require **api_id** and **api_hash** to access the Telegram API servers. * Download **Yasm** executable from [http://yasm.tortall.net/Download.html](http://yasm.tortall.net/Download.html), rename to *yasm.exe* and put to ***BuildPath*\\ThirdParty\\yasm** * Download **MSYS2** installer from [http://www.msys2.org/](http://www.msys2.org/) and install to ***BuildPath*\\ThirdParty\\msys64** * Download **jom** archive from [http://download.qt.io/official_releases/jom/jom.zip](http://download.qt.io/official_releases/jom/jom.zip) and unpack to ***BuildPath*\\ThirdParty\\jom** -* Download **Python 2.7** installer from [https://www.python.org/downloads/](https://www.python.org/downloads/) and install to ***BuildPath*\\ThirdParty\\Python27** +* Download **Python 3.9** installer from [https://www.python.org/downloads/](https://www.python.org/downloads/) and install to ***BuildPath*\\ThirdParty\\Python39** * Download **CMake** installer from [https://cmake.org/download/](https://cmake.org/download/) and install to ***BuildPath*\\ThirdParty\\cmake** * Download **Ninja** executable from [https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-win.zip](https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-win.zip) and unpack to ***BuildPath*\\ThirdParty\\Ninja** * Download **Git** installer from [https://git-scm.com/download/win](https://git-scm.com/download/win) and install it. * Download **NuGet** executable from [https://dist.nuget.org/win-x86-commandline/latest/nuget.exe](https://dist.nuget.org/win-x86-commandline/latest/nuget.exe) and put to ***BuildPath*\\ThirdParty\\NuGet** -Open **x86 Native Tools Command Prompt for VS 2019.bat**, go to ***BuildPath*** and run - - cd ThirdParty - git clone https://github.com/desktop-app/patches.git - cd patches - git checkout d58ce6b2b0 - cd .. - - git clone https://chromium.googlesource.com/external/gyp - cd gyp - git checkout 9f2a7bb1 - git apply ../patches/gyp.diff - cd .. - - python -m pip install pywin32 - -Add **GYP**, **Ninja** and **NuGet** to your PATH: +Add **Python 3.9** and **NuGet** to your PATH: * Open **Control Panel** -> **System** -> **Advanced system settings**. * Press **Environment Variables...**. * Select **Path**. * Press **Edit**. -* Add ***BuildPath*\\ThirdParty\\gyp** value. -* Add ***BuildPath*\\ThirdParty\\Ninja** value. +* Add ***BuildPath*\\ThirdParty\\Python39** value. * Add ***BuildPath*\\ThirdParty\\NuGet** value. +Open **x86 Native Tools Command Prompt for VS 2019.bat**, go to ***BuildPath*** and run + + python -m pip install pywin32 + ## Clone source code and prepare libraries Open **x86 Native Tools Command Prompt for VS 2019.bat**, go to ***BuildPath*** and run - SET PATH=%cd%\ThirdParty\Strawberry\perl\bin;%cd%\ThirdParty\Python27;%cd%\ThirdParty\NASM;%cd%\ThirdParty\jom;%cd%\ThirdParty\cmake\bin;%cd%\ThirdParty\yasm;%PATH% - git clone --recursive https://github.com/telegramdesktop/tdesktop.git - - mkdir Libraries - cd Libraries - - git clone https://github.com/desktop-app/patches.git - cd patches - git checkout d58ce6b2b0 - cd .. - - git clone https://github.com/desktop-app/lzma.git - cd lzma\C\Util\LzmaLib - msbuild LzmaLib.sln /property:Configuration=Debug /property:Platform="x86" - msbuild LzmaLib.sln /property:Configuration=Release /property:Platform="x86" - cd ..\..\..\.. - - git clone https://github.com/openssl/openssl.git openssl_1_1_1 - cd openssl_1_1_1 - git checkout OpenSSL_1_1_1-stable - perl Configure no-shared no-tests debug-VC-WIN32 - nmake - mkdir out32.dbg - move libcrypto.lib out32.dbg - move libssl.lib out32.dbg - move ossl_static.pdb out32.dbg\ossl_static - nmake clean - move out32.dbg\ossl_static out32.dbg\ossl_static.pdb - perl Configure no-shared no-tests VC-WIN32 - nmake - mkdir out32 - move libcrypto.lib out32 - move libssl.lib out32 - move ossl_static.pdb out32 - cd .. - - git clone https://github.com/desktop-app/zlib.git - cd zlib\contrib\vstudio\vc14 - msbuild zlibstat.vcxproj /property:Configuration=Debug /property:Platform="x86" - msbuild zlibstat.vcxproj /property:Configuration=ReleaseWithoutAsm /property:Platform="x86" - cd ..\..\..\.. - - git clone -b v4.0.1-rc2 https://github.com/mozilla/mozjpeg.git - cd mozjpeg - cmake . ^ - -G "Visual Studio 16 2019" ^ - -A Win32 ^ - -DWITH_JPEG8=ON ^ - -DPNG_SUPPORTED=OFF - cmake --build . --config Debug - cmake --build . --config Release - cd .. - - git clone https://github.com/telegramdesktop/openal-soft.git - cd openal-soft - git checkout wasapi_exact_device_time - cd build - cmake .. ^ - -G "Visual Studio 16 2019" ^ - -A Win32 ^ - -D LIBTYPE:STRING=STATIC ^ - -D FORCE_STATIC_VCRT=ON - msbuild OpenAL.vcxproj /property:Configuration=Debug - msbuild OpenAL.vcxproj /property:Configuration=RelWithDebInfo - cd ..\.. - - git clone https://github.com/google/breakpad - cd breakpad - git checkout a1dbcdcb43 - git apply ../patches/breakpad.diff - cd src - git clone https://github.com/google/googletest testing - cd client\windows - gyp --no-circular-check breakpad_client.gyp --format=ninja - cd ..\.. - ninja -C out/Debug common crash_generation_client exception_handler - ninja -C out/Release common crash_generation_client exception_handler - cd tools\windows\dump_syms - gyp dump_syms.gyp - msbuild dump_syms.vcxproj /property:Configuration=Release - cd ..\..\..\..\.. - - git clone https://github.com/telegramdesktop/opus.git - cd opus - git checkout tdesktop - cd win32\VS2015 - msbuild opus.sln /property:Configuration=Debug /property:Platform="Win32" - msbuild opus.sln /property:Configuration=Release /property:Platform="Win32" - cd ..\..\.. - - git clone https://github.com/desktop-app/rnnoise.git - cd rnnoise - mkdir out - cd out - cmake -A Win32 .. - cmake --build . --config Debug - cmake --build . --config Release - cd ..\.. - - cd .. - SET PATH_BACKUP_=%PATH% - SET PATH=%cd%\ThirdParty\msys64\usr\bin;%PATH% - cd Libraries - - git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg - cd ffmpeg - git checkout release/4.4 - - set CHERE_INVOKING=enabled_from_arguments - set MSYS2_PATH_TYPE=inherit - bash --login ../patches/build_ffmpeg_win.sh - - SET PATH=%PATH_BACKUP_% - cd .. - - git clone https://github.com/desktop-app/tg_angle.git - cd tg_angle - git checkout ec51cc6 - mkdir out - cd out - mkdir Debug - cd Debug - cmake -G Ninja ^ - -DCMAKE_BUILD_TYPE=Debug ^ - -DTG_ANGLE_SPECIAL_TARGET=win ^ - -DTG_ANGLE_ZLIB_INCLUDE_PATH=%cd%/../../../zlib ../.. - ninja - cd .. - mkdir Release - cd Release - cmake -G Ninja ^ - -DCMAKE_BUILD_TYPE=Release ^ - -DTG_ANGLE_SPECIAL_TARGET=win ^ - -DTG_ANGLE_ZLIB_INCLUDE_PATH=%cd%/../../../zlib ../.. - ninja - cd ..\..\.. - - SET LibrariesPath=%cd% - git clone git://code.qt.io/qt/qt5.git qt_5_15_2 - cd qt_5_15_2 - perl init-repository --module-subset=qtbase,qtimageformats,qtsvg - git checkout v5.15.2 - git submodule update qtbase qtimageformats qtsvg - cd qtbase - for /r %i in (..\..\patches\qtbase_5_15_2\*) do git apply %i - cd .. - - configure ^ - -prefix "%LibrariesPath%\Qt-5.15.2" ^ - -debug-and-release ^ - -force-debug-info ^ - -opensource ^ - -confirm-license ^ - -static ^ - -static-runtime ^ - -opengl es2 -no-angle ^ - -I "%LibrariesPath%\tg_angle\include" ^ - -D "KHRONOS_STATIC=" ^ - -D "DESKTOP_APP_QT_STATIC_ANGLE=" ^ - QMAKE_LIBS_OPENGL_ES2_DEBUG="%LibrariesPath%\tg_angle\out\Debug\tg_angle.lib %LibrariesPath%\zlib\contrib\vstudio\vc14\x86\ZlibStatDebug\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib" ^ - QMAKE_LIBS_OPENGL_ES2_RELEASE="%LibrariesPath%\tg_angle\out\Release\tg_angle.lib %LibrariesPath%\zlib\contrib\vstudio\vc14\x86\ZlibStatReleaseWithoutAsm\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib" ^ - -egl ^ - QMAKE_LIBS_EGL_DEBUG="%LibrariesPath%\tg_angle\out\Debug\tg_angle.lib %LibrariesPath%\zlib\contrib\vstudio\vc14\x86\ZlibStatDebug\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib Gdi32.lib User32.lib" ^ - QMAKE_LIBS_EGL_RELEASE="%LibrariesPath%\tg_angle\out\Release\tg_angle.lib %LibrariesPath%\zlib\contrib\vstudio\vc14\x86\ZlibStatReleaseWithoutAsm\zlibstat.lib d3d9.lib dxgi.lib dxguid.lib Gdi32.lib User32.lib" ^ - -openssl-linked ^ - -I "%LibrariesPath%\openssl_1_1_1\include" ^ - OPENSSL_LIBS_DEBUG="%LibrariesPath%\openssl_1_1_1\out32.dbg\libssl.lib %LibrariesPath%\openssl_1_1_1\out32.dbg\libcrypto.lib Ws2_32.lib Gdi32.lib Advapi32.lib Crypt32.lib User32.lib" ^ - OPENSSL_LIBS_RELEASE="%LibrariesPath%\openssl_1_1_1\out32\libssl.lib %LibrariesPath%\openssl_1_1_1\out32\libcrypto.lib Ws2_32.lib Gdi32.lib Advapi32.lib Crypt32.lib User32.lib" ^ - -I "%LibrariesPath%\mozjpeg" ^ - LIBJPEG_LIBS_DEBUG="%LibrariesPath%\mozjpeg\Debug\jpeg-static.lib" ^ - LIBJPEG_LIBS_RELEASE="%LibrariesPath%\mozjpeg\Release\jpeg-static.lib" ^ - -mp ^ - -nomake examples ^ - -nomake tests ^ - -platform win32-msvc - - jom -j8 - jom -j8 install - cd .. - - git clone https://github.com/desktop-app/tg_owt.git - cd tg_owt - git checkout 91d836dc84 - git submodule init - git submodule update - mkdir out - cd out - mkdir Debug - cd Debug - cmake -G Ninja ^ - -DCMAKE_BUILD_TYPE=Debug ^ - -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF ^ - -DTG_OWT_SPECIAL_TARGET=win ^ - -DTG_OWT_LIBJPEG_INCLUDE_PATH=%cd%/../../../mozjpeg ^ - -DTG_OWT_OPENSSL_INCLUDE_PATH=%cd%/../../../openssl_1_1_1/include ^ - -DTG_OWT_OPUS_INCLUDE_PATH=%cd%/../../../opus/include ^ - -DTG_OWT_FFMPEG_INCLUDE_PATH=%cd%/../../../ffmpeg ../.. - ninja - cd .. - mkdir Release - cd Release - cmake -G Ninja ^ - -DCMAKE_BUILD_TYPE=Release ^ - -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF ^ - -DTG_OWT_SPECIAL_TARGET=win ^ - -DTG_OWT_LIBJPEG_INCLUDE_PATH=%cd%/../../../mozjpeg ^ - -DTG_OWT_OPENSSL_INCLUDE_PATH=%cd%/../../../openssl_1_1_1/include ^ - -DTG_OWT_OPUS_INCLUDE_PATH=%cd%/../../../opus/include ^ - -DTG_OWT_FFMPEG_INCLUDE_PATH=%cd%/../../../ffmpeg ../.. - ninja - cd ..\..\.. + tdesktop\Telegram\build\prepare\win.bat ## Build the project