kotatogram-desktop/Telegram/build/prepare/prepare.py
Daniel Novomeský 6ff2c08764 Added dependencies for Windows build
They will be used for plugins in kimageformats:
dav1d, libavif are needed for AVIF plugin
libde265, libheif are needed for HEIF plugin
libjxl is needed for JXL plugin
dav1d could be used by ffmpeg to provide AV1 decoding
meson is required to build dav1d
2022-12-23 10:58:22 +04:00

1467 lines
47 KiB
Python

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)
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 + '/../../../..')
pathSep = ';' if win else ':'
libsLoc = 'Libraries' if not win64 else (os.path.join('Libraries', 'win64'))
keysLoc = 'cache_keys'
rootDir = os.getcwd()
libsDir = os.path.realpath(os.path.join(rootDir, libsLoc))
thirdPartyDir = os.path.realpath(os.path.join(rootDir, 'ThirdParty'))
usedPrefix = os.path.realpath(os.path.join(libsDir, 'local'))
optionsList = [
'skip-release',
'build-qt5',
'skip-qt5',
'build-qt6',
'skip-qt6',
'build-stackwalk',
]
options = []
runCommand = []
customRunCommand = False
for arg in sys.argv[1:]:
if customRunCommand:
runCommand.append(arg)
if arg in optionsList:
options.append(arg)
elif arg == 'run':
customRunCommand = True
buildQt5 = not 'skip-qt5' in options if win else 'build-qt5' in options
buildQt6 = 'build-qt6' in options if win else not 'skip-qt6' in options
if not os.path.isdir(os.path.join(libsDir, keysLoc)):
pathlib.Path(os.path.join(libsDir, keysLoc)).mkdir(parents=True, exist_ok=True)
if not os.path.isdir(os.path.join(thirdPartyDir, keysLoc)):
pathlib.Path(os.path.join(thirdPartyDir, keysLoc)).mkdir(parents=True, exist_ok=True)
pathPrefixes = [
'ThirdParty\\msys64\\mingw64\\bin',
'ThirdParty\\jom',
'ThirdParty\\cmake\\bin',
'ThirdParty\\gyp',
] if win else [
'ThirdParty/gyp',
'ThirdParty/yasm',
'ThirdParty/depot_tools',
]
pathPrefix = ''
for singlePrefix in pathPrefixes:
pathPrefix = pathPrefix + os.path.join(rootDir, 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,
'THIRDPARTY_DIR': thirdPartyDir,
'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(os.path.join(libsDir, pattern))
items = [pattern]
if len(pathlist) == 0:
pathlist = glob.glob(os.path.join(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 os.path.join(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 not os.path.exists(os.path.join(stage['directory'], stage['name'])):
return 'NotFound'
if not os.path.exists(key):
return 'Stale'
with open(key, 'r') as file:
return 'Good' if (file.read() == stage['key']) else 'Stale'
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
if 'release' in scopes:
if 'skip-release' in options:
inscope = False
elif len(scopes) == 1:
continue
skip = inscope if m.group(1) == '!' else not inscope
elif not skip and not re.match(r'\s*#', command):
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 printCommands(commands):
print('---------------------------------COMMANDS-LIST----------------------------------')
print(commands, end='')
print('--------------------------------------------------------------------------------')
def run(commands):
printCommands(commands)
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(commands))
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'\%', commands):
error('Bad command: ' + commands)
else:
return subprocess.run("set -e\n" + commands, shell=True, env=modifiedEnv).returncode == 0
# Thanks https://stackoverflow.com/a/510364
class _Getch:
"""Gets a single character from standard input. Does not echo to the
screen."""
def __init__(self):
try:
self.impl = _GetchWindows()
except ImportError:
self.impl = _GetchUnix()
def __call__(self): return self.impl()
class _GetchUnix:
def __init__(self):
import tty, sys
def __call__(self):
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
class _GetchWindows:
def __init__(self):
import msvcrt
def __call__(self):
import msvcrt
return msvcrt.getch().decode('ascii')
getch = _Getch()
def runStages():
onlyStages = []
rebuildStale = False
for arg in sys.argv[1:]:
if arg in options:
continue
elif arg == 'silent':
rebuildStale = True
continue
found = False
for stage in stages:
if stage['name'] == arg:
onlyStages.append(arg)
found = True
break
if not found:
error('Unknown argument: ' + arg)
count = len(stages)
index = 0
for stage in stages:
if len(onlyStages) > 0 and not stage['name'] in onlyStages:
continue
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 = '', flush=True)
stage['key'] = computeCacheKey(stage)
commands = removeDir(stage['name']) + '\n' + stage['commands']
checkResult = 'Forced' if len(onlyStages) > 0 else checkCacheKey(stage)
if checkResult == 'Good':
print('SKIPPING')
continue
elif checkResult == 'NotFound':
print('NOT FOUND, ', end='')
elif checkResult == 'Stale' or checkResult == 'Forced':
if checkResult == 'Stale':
print('CHANGED, ', end='')
if rebuildStale:
checkResult == 'Rebuild'
else:
print('(r)ebuild, rebuild (a)ll, (s)kip, (p)rint, (q)uit?: ', end='', flush=True)
while True:
ch = 'r' if rebuildStale else getch()
if ch == 'q':
finish(0)
elif ch == 'p':
printCommands(commands)
checkResult = 'Printed'
break
elif ch == 's':
checkResult = 'Skip'
break
elif ch == 'r':
checkResult = 'Rebuild'
break
elif ch == 'a':
checkResult = 'Rebuild'
rebuildStale = True
break
if checkResult == 'Printed':
continue
if checkResult == 'Skip':
print('SKIPPING')
continue
clearCacheKey(stage)
print('BUILDING:')
os.chdir(stage['directory'])
if not run(commands):
print(prefix + ': FAILED')
finish(1)
writeCacheKey(stage)
if customRunCommand:
os.chdir(executePath)
command = ' '.join(runCommand) + '\n'
if not run(command):
print('FAILED :(')
finish(1)
finish(0)
stage('patches', """
git clone https://github.com/desktop-app/patches.git
cd patches
git checkout 92f4ee3867
""")
stage('msys64', """
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
powershell -Command "iwr -OutFile ./msys64.exe https://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-20221028.sfx.exe"
msys64.exe
del msys64.exe
bash -c "pacman-key --init; pacman-key --populate; pacman -Syu --noconfirm"
pacman -S --noconfirm mingw-w64-x86_64-perl mingw-w64-x86_64-nasm mingw-w64-x86_64-yasm mingw-w64-x86_64-ninja
SET PATH=%PATH_BACKUP_%
""", 'ThirdParty')
stage('python', """
version: """ + (subprocess.run(['python', '-V'], capture_output=True, env=modifiedEnv).stdout.decode().strip().split()[-1] if win else '0') + """
win:
python -m venv python
python\\Scripts\\activate.bat
pip install pywin32 six meson
deactivate
""", 'ThirdParty')
stage('NuGet', """
win:
mkdir NuGet
powershell -Command "iwr -OutFile ./NuGet/nuget.exe https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
""", 'ThirdParty')
stage('jom', """
win:
powershell -Command "iwr -OutFile ./jom.zip https://master.qt.io/official_releases/jom/jom_1_1_3.zip"
powershell -Command "Expand-Archive ./jom.zip"
del jom.zip
""", 'ThirdParty')
stage('depot_tools', """
mac:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
cd depot_tools
./update_depot_tools
""", 'ThirdParty')
if not mac or 'build-stackwalk' in options:
stage('gyp', """
win:
git clone https://chromium.googlesource.com/external/gyp
cd gyp
git checkout 9d09418933
mac:
python3 -m pip install ^
--ignore-installed ^
--target=$THIRDPARTY_DIR/gyp ^
git+https://chromium.googlesource.com/external/gyp@master
""", 'ThirdParty')
stage('yasm', """
mac:
git clone https://github.com/yasm/yasm.git
cd yasm
git checkout 41762bea
./autogen.sh
make $MAKE_THREADS_CNT
""", '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"
release:
msbuild LzmaLib.sln /property:Configuration=Release /property:Platform="$X8664"
""")
stage('xz', """
!win:
git clone -b v5.2.9 https://git.tukaani.org/xz.git
cd xz
sed -i '' '\\@check_symbol_exists(futimens "sys/types.h;sys/stat.h" HAVE_FUTIMENS)@d' CMakeLists.txt
CFLAGS="$UNGUARDED" CPPFLAGS="$UNGUARDED" cmake -B build . \\
-D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
-D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
-D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX
cmake --build build $MAKE_THREADS_CNT
cmake --install build
""")
stage('zlib', """
git clone -b v1.2.11 https://github.com/madler/zlib.git
cd zlib
win:
cmake . ^
-A %WIN32X64% ^
-DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
-DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
-DCMAKE_C_FLAGS="/DZLIB_WINAPI"
cmake --build . --config Debug
release:
cmake --build . --config Release
mac:
CFLAGS="$MIN_VER $UNGUARDED" LDFLAGS="$MIN_VER" ./configure \\
--static \\
--prefix=$USED_PREFIX \\
--archs="-arch x86_64 -arch arm64"
make $MAKE_THREADS_CNT
make install
""")
stage('mozjpeg', """
git clone -b v4.0.3 https://github.com/mozilla/mozjpeg.git
cd mozjpeg
win:
cmake . ^
-A %WIN32X64% ^
-DWITH_JPEG8=ON ^
-DPNG_SUPPORTED=OFF
cmake --build . --config Debug
release:
cmake --build . --config Release
mac:
CFLAGS="-arch arm64" cmake -B build.arm64 . \\
-D CMAKE_SYSTEM_NAME=Darwin \\
-D CMAKE_SYSTEM_PROCESSOR=arm64 \\
-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 ENABLE_SHARED=OFF \\
-D PNG_SUPPORTED=OFF
cmake --build build.arm64 $MAKE_THREADS_CNT
CFLAGS="-arch x86_64" cmake -B build . \\
-D CMAKE_SYSTEM_NAME=Darwin \\
-D CMAKE_SYSTEM_PROCESSOR=x86_64 \\
-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 ENABLE_SHARED=OFF \\
-D PNG_SUPPORTED=OFF
cmake --build build $MAKE_THREADS_CNT
lipo -create build.arm64/libjpeg.a build/libjpeg.a -output build/libjpeg.a
lipo -create build.arm64/libturbojpeg.a build/libturbojpeg.a -output build/libturbojpeg.a
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
release:
move out.dbg\\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-arm64-cc $MIN_VER
make build_libs $MAKE_THREADS_CNT
mkdir out.arm64
mv libssl.a out.arm64
mv libcrypto.a out.arm64
make clean
./Configure --prefix=$USED_PREFIX no-shared no-tests darwin64-x86_64-cc $MIN_VER
make build_libs $MAKE_THREADS_CNT
mkdir out.x86_64
mv libssl.a out.x86_64
mv libcrypto.a out.x86_64
lipo -create out.arm64/libcrypto.a out.x86_64/libcrypto.a -output libcrypto.a
lipo -create out.arm64/libssl.a out.x86_64/libssl.a -output libssl.a
""")
stage('opus', """
git clone -b v1.3.1 https://github.com/xiph/opus.git
cd opus
git cherry-pick 927de8453c
win:
cmake -B out . ^
-A %WIN32X64% ^
-DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
-DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
-DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG"
cmake --build out --config Debug
cmake --build out --config Release
cmake --install out --config Release
mac:
CFLAGS="$UNGUARDED" CPPFLAGS="$UNGUARDED" cmake -B build . \\
-D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
-D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
-D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX
cmake --build build $MAKE_THREADS_CNT
cmake --install build
""")
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
release:
cmake --build . --config Release
!win:
mkdir Debug
cd Debug
cmake -G Ninja ../.. \\
-D CMAKE_BUILD_TYPE=Debug \\
-D CMAKE_OSX_ARCHITECTURES="x86_64;arm64"
ninja
release:
cd ..
mkdir Release
cd Release
cmake -G Ninja ../.. \\
-D CMAKE_BUILD_TYPE=Release \\
-D CMAKE_OSX_ARCHITECTURES="x86_64;arm64"
ninja
""")
stage('libiconv', """
mac:
VERSION=1.17
rm -f libiconv.tar.gz
wget -O libiconv.tar.gz ftp://ftp.gnu.org/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 -arch arm64" CPPFLAGS="$MIN_VER $UNGUARDED -arch arm64" LDFLAGS="$MIN_VER" ./configure --enable-static --host=arm --prefix=$USED_PREFIX
make $MAKE_THREADS_CNT
mkdir out.arm64
mv lib/.libs/libiconv.a out.arm64
make clean
CFLAGS="$MIN_VER $UNGUARDED -arch x86_64" CPPFLAGS="$MIN_VER $UNGUARDED -arch x86_64" LDFLAGS="$MIN_VER" ./configure --enable-static --host=x86_64 --prefix=$USED_PREFIX
make $MAKE_THREADS_CNT
mkdir out.x86_64
mv lib/.libs/libiconv.a out.x86_64
lipo -create out.arm64/libiconv.a out.x86_64/libiconv.a -output lib/.libs/libiconv.a
make install
""")
stage('dav1d', """
win:
git clone -b 1.0.0 --depth 1 https://code.videolan.org/videolan/dav1d.git
cd dav1d
depends:python/Scripts/activate.bat
%THIRDPARTY_DIR%\\python\\Scripts\\activate.bat
meson setup --prefix %LIBS_DIR%/local --default-library=static --buildtype=debug -Denable_tools=false -Denable_tests=false -Db_vscrt=mtd builddir-debug
meson compile -C builddir-debug
meson install -C builddir-debug
release:
meson setup --prefix %LIBS_DIR%/local --default-library=static --buildtype=release -Denable_tools=false -Denable_tests=false -Db_vscrt=mt builddir-release
meson compile -C builddir-release
meson install -C builddir-release
win:
copy %LIBS_DIR%\\local\\lib\\libdav1d.a %LIBS_DIR%\\local\\lib\\dav1d.lib
deactivate
""")
stage('libavif', """
win:
git clone -b v0.11.1 --depth 1 https://github.com/AOMediaCodec/libavif.git
cd libavif
cmake . ^
-A %WIN32X64% ^
-DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
-DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
-DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
-DBUILD_SHARED_LIBS=OFF ^
-DAVIF_ENABLE_WERROR=OFF ^
-DAVIF_CODEC_DAV1D=ON
cmake --build . --config Debug
cmake --install . --config Debug
release:
cmake --build . --config Release
cmake --install . --config Release
""")
stage('libde265', """
win:
git clone https://github.com/strukturag/libde265.git
cd libde265
git checkout c96962cf6a0259f1678e9a0e1566eb9b5516093a
cmake . ^
-A %WIN32X64% ^
-DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
-DCMAKE_C_FLAGS="/DLIBDE265_STATIC_BUILD" ^
-DCMAKE_CXX_FLAGS="/DLIBDE265_STATIC_BUILD" ^
-DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
-DCMAKE_CXX_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
-DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
-DCMAKE_CXX_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
-DENABLE_SDL=OFF ^
-DBUILD_SHARED_LIBS=OFF ^
-DENABLE_DECODER=OFF ^
-DENABLE_ENCODER=OFF
cmake --build . --config Debug
cmake --install . --config Debug
release:
cmake --build . --config Release
cmake --install . --config Release
""")
stage('libheif', """
win:
git clone --depth 1 -b v1.14.0 https://github.com/strukturag/libheif.git
cd libheif
%THIRDPARTY_DIR%\\msys64\\usr\\bin\\sed.exe -i 's/LIBHEIF_EXPORTS/LIBDE265_STATIC_BUILD/g' libheif/CMakeLists.txt
%THIRDPARTY_DIR%\\msys64\\usr\\bin\\sed.exe -i 's/HAVE_VISIBILITY/LIBHEIF_STATIC_BUILD/g' libheif/CMakeLists.txt
cmake . ^
-A %WIN32X64% ^
-DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
-DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
-DCMAKE_CXX_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
-DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
-DCMAKE_CXX_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
-DBUILD_SHARED_LIBS=OFF ^
-DENABLE_PLUGIN_LOADING=OFF ^
-DWITH_LIBDE265=ON ^
-DWITH_SvtEnc=OFF ^
-DWITH_RAV1E=OFF ^
-DWITH_EXAMPLES=OFF
cmake --build . --config Debug
cmake --install . --config Debug
release:
cmake --build . --config Release
cmake --install . --config Release
""")
stage('libjxl', """
win:
git clone -b v0.7.0 --depth 1 --recursive --shallow-submodules https://github.com/libjxl/libjxl.git
cd libjxl
cmake . ^
-A %WIN32X64% ^
-DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
-DCMAKE_C_FLAGS="/DJXL_STATIC_DEFINE /DJXL_THREADS_STATIC_DEFINE" ^
-DCMAKE_CXX_FLAGS="/DJXL_STATIC_DEFINE /DJXL_THREADS_STATIC_DEFINE" ^
-DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
-DCMAKE_CXX_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
-DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
-DCMAKE_CXX_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
-DBUILD_SHARED_LIBS=OFF ^
-DBUILD_TESTING=OFF ^
-DJPEGXL_ENABLE_FUZZERS=OFF ^
-DJPEGXL_ENABLE_DEVTOOLS=OFF ^
-DJPEGXL_ENABLE_TOOLS=OFF ^
-DJPEGXL_ENABLE_DOXYGEN=OFF ^
-DJPEGXL_ENABLE_MANPAGES=OFF ^
-DJPEGXL_ENABLE_EXAMPLES=OFF ^
-DJPEGXL_ENABLE_JNI=OFF ^
-DJPEGXL_ENABLE_SJPEG=OFF ^
-DJPEGXL_ENABLE_OPENEXR=OFF ^
-DJPEGXL_ENABLE_SKCMS=ON ^
-DJPEGXL_BUNDLE_SKCMS=ON ^
-DJPEGXL_ENABLE_VIEWERS=OFF ^
-DJPEGXL_ENABLE_TCMALLOC=OFF ^
-DJPEGXL_ENABLE_PLUGINS=OFF ^
-DJPEGXL_ENABLE_COVERAGE=OFF ^
-DJPEGXL_ENABLE_PROFILER=OFF ^
-DJPEGXL_WARNINGS_AS_ERRORS=OFF
cmake --build . --config Debug
cmake --install . --config Debug
release:
cmake --build . --config Release
cmake --install . --config Release
""")
stage('libvpx', """
git clone https://github.com/webmproject/libvpx.git
depends:patches/libvpx/*.patch
cd libvpx
git checkout v1.11.0
win:
for /r %%i in (..\\patches\\libvpx\\*) do git apply %%i
SET PATH_BACKUP_=%PATH%
SET PATH=%ROOT_DIR%\\ThirdParty\\msys64\\usr\\bin;%PATH%
SET CHERE_INVOKING=enabled_from_arguments
SET MSYS2_PATH_TYPE=inherit
if "%X8664%" equ "x64" (
SET "TARGET=x86_64-win64-vs17"
) else (
SET "TARGET=x86-win32-vs17"
)
depends:patches/build_libvpx_win.sh
bash --login ../patches/build_libvpx_win.sh
SET PATH=%PATH_BACKUP_%
mac:
find ../patches/libvpx -type f -print0 | sort -z | xargs -0 git apply
depends:yasm/yasm
./configure --prefix=$USED_PREFIX \
--target=arm64-darwin20-gcc \
--disable-examples \
--disable-unit-tests \
--disable-tools \
--disable-docs \
--enable-vp8 \
--enable-vp9 \
--enable-webm-io
make $MAKE_THREADS_CNT
mkdir out.arm64
mv libvpx.a out.arm64
make clean
./configure --prefix=$USED_PREFIX \
--target=x86_64-darwin20-gcc \
--disable-examples \
--disable-unit-tests \
--disable-tools \
--disable-docs \
--enable-vp8 \
--enable-vp9 \
--enable-webm-io
make $MAKE_THREADS_CNT
mkdir out.x86_64
mv libvpx.a out.x86_64
lipo -create out.arm64/libvpx.a out.x86_64/libvpx.a -output libvpx.a
make install
""")
stage('nv-codec-headers', """
win:
git clone https://github.com/FFmpeg/nv-codec-headers.git
cd nv-codec-headers
git checkout n11.1.5.1
""")
stage('ffmpeg', """
git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg
cd ffmpeg
git checkout cc33e73618
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:
export PKG_CONFIG_PATH=$USED_PREFIX/lib/pkgconfig
depends:yasm/yasm
configureFFmpeg() {
arch=$1
./configure --prefix=$USED_PREFIX \
--enable-cross-compile \
--target-os=darwin \
--arch="$arch" \
--extra-cflags="$MIN_VER -arch $arch $UNGUARDED -DCONFIG_SAFE_BITSTREAM_READER=1 -I$USED_PREFIX/include" \
--extra-cxxflags="$MIN_VER -arch $arch $UNGUARDED -DCONFIG_SAFE_BITSTREAM_READER=1 -I$USED_PREFIX/include" \
--extra-ldflags="$MIN_VER -arch $arch $USED_PREFIX/lib/libopus.a" \
--disable-programs \
--disable-doc \
--disable-network \
--disable-everything \
--enable-protocol=file \
--enable-libopus \
--enable-libvpx \
--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=ac3 \
--enable-decoder=alac \
--enable-decoder=alac_at \
--enable-decoder=av1 \
--enable-decoder=eac3 \
--enable-decoder=flac \
--enable-decoder=gif \
--enable-decoder=h264 \
--enable-decoder=hevc \
--enable-decoder=libvpx_vp8 \
--enable-decoder=libvpx_vp9 \
--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=vp8 \
--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=matroska \
--enable-demuxer=m4v \
--enable-demuxer=mov \
--enable-demuxer=mp3 \
--enable-demuxer=ogg \
--enable-demuxer=wav \
--enable-muxer=ogg \
--enable-muxer=opus
}
configureFFmpeg arm64
make $MAKE_THREADS_CNT
mkdir out.arm64
mv libavformat/libavformat.a out.arm64
mv libavcodec/libavcodec.a out.arm64
mv libswresample/libswresample.a out.arm64
mv libswscale/libswscale.a out.arm64
mv libavutil/libavutil.a out.arm64
make clean
configureFFmpeg x86_64
make $MAKE_THREADS_CNT
mkdir out.x86_64
mv libavformat/libavformat.a out.x86_64
mv libavcodec/libavcodec.a out.x86_64
mv libswresample/libswresample.a out.x86_64
mv libswscale/libswscale.a out.x86_64
mv libavutil/libavutil.a out.x86_64
lipo -create out.arm64/libavformat.a out.x86_64/libavformat.a -output libavformat/libavformat.a
lipo -create out.arm64/libavcodec.a out.x86_64/libavcodec.a -output libavcodec/libavcodec.a
lipo -create out.arm64/libswresample.a out.x86_64/libswresample.a -output libswresample/libswresample.a
lipo -create out.arm64/libswscale.a out.x86_64/libswscale.a -output libswscale/libswscale.a
lipo -create out.arm64/libavutil.a out.x86_64/libavutil.a -output libavutil/libavutil.a
make install
""")
stage('openal-soft', """
version: 2
win:
git clone -b wasapi_exact_device_time https://github.com/telegramdesktop/openal-soft.git
cd openal-soft
cmake -B build . ^
-A %WIN32X64% ^
-D LIBTYPE:STRING=STATIC ^
-D FORCE_STATIC_VCRT=ON
cmake --build build --config Debug --parallel
release:
cmake --build build --config RelWithDebInfo --parallel
mac:
git clone https://github.com/kcat/openal-soft.git
cd openal-soft
git checkout 1.22.2
CFLAGS=$UNGUARDED CPPFLAGS=$UNGUARDED cmake -B build . \\
-D CMAKE_INSTALL_PREFIX:PATH=$USED_PREFIX \\
-D ALSOFT_EXAMPLES=OFF \\
-D ALSOFT_UTILS=OFF \\
-D LIBTYPE:STRING=STATIC \\
-D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
-D CMAKE_OSX_ARCHITECTURES="x86_64;arm64"
cmake --build build $MAKE_THREADS_CNT
cmake --install build
""")
if 'build-stackwalk' in options:
stage('stackwalk', """
mac:
git clone https://chromium.googlesource.com/breakpad/breakpad stackwalk
cd stackwalk
git checkout dfcb7b6799
depends:patches/breakpad.diff
git apply ../patches/breakpad.diff
git clone -b release-1.11.0 https://github.com/google/googletest src/testing
git clone https://chromium.googlesource.com/linux-syscall-support src/third_party/lss
cd src/third_party/lss
git checkout e1e7b0ad8e
cd ../../build
PYTHONPATH=$THIRDPARTY_DIR/gyp
python3 gyp_breakpad
cd ../processor
xcodebuild -project processor.xcodeproj -target minidump_stackwalk -configuration Release build
""")
stage('breakpad', """
git clone https://chromium.googlesource.com/breakpad/breakpad
cd breakpad
git checkout dfcb7b6799
depends:patches/breakpad.diff
git apply ../patches/breakpad.diff
git clone -b release-1.11.0 https://github.com/google/googletest src/testing
win:
SET "PYTHONUTF8=1"
if "%X8664%" equ "x64" (
SET "FolderPostfix=_x64"
) else (
SET "FolderPostfix="
)
depends:python/Scripts/activate.bat
%THIRDPARTY_DIR%\\python\\Scripts\\activate.bat
cd src\\client\\windows
gyp --no-circular-check breakpad_client.gyp --format=ninja
cd ..\\..
ninja -C out/Debug%FolderPostfix% common crash_generation_client exception_handler
release:
ninja -C out/Release%FolderPostfix% common crash_generation_client exception_handler
cd tools\\windows\\dump_syms
gyp dump_syms.gyp --format=ninja
cd ..\\..\\..
ninja -C out/Release%FolderPostfix% dump_syms
win:
deactivate
mac:
git clone https://chromium.googlesource.com/linux-syscall-support src/third_party/lss
cd src/third_party/lss
git checkout e1e7b0ad8e
cd ../../..
cd src/client/mac
xcodebuild -project Breakpad.xcodeproj -target Breakpad -configuration Debug build
release:
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://github.com/desktop-app/crashpad.git
cd crashpad
git checkout c1b7afa2fd
git submodule init
git submodule update third_party/mini_chromium
ZLIB_PATH=$USED_PREFIX/include
ZLIB_LIB=$USED_PREFIX/lib/libz.a
mkdir out
cd out
mkdir Debug.x86_64
cd Debug.x86_64
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DCRASHPAD_SPECIAL_TARGET=$SPECIAL_TARGET \
-DCRASHPAD_ZLIB_INCLUDE_PATH=$ZLIB_PATH \
-DCRASHPAD_ZLIB_LIB_PATH=$ZLIB_LIB ../..
ninja
cd ..
mkdir Debug.arm64
cd Debug.arm64
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DCRASHPAD_SPECIAL_TARGET=$SPECIAL_TARGET \
-DCRASHPAD_ZLIB_INCLUDE_PATH=$ZLIB_PATH \
-DCRASHPAD_ZLIB_LIB_PATH=$ZLIB_LIB ../..
ninja
cd ..
mkdir Debug
lipo -create Debug.arm64/crashpad_handler Debug.x86_64/crashpad_handler -output Debug/crashpad_handler
lipo -create Debug.arm64/libcrashpad_client.a Debug.x86_64/libcrashpad_client.a -output Debug/libcrashpad_client.a
release:
mkdir Release.x86_64
cd Release.x86_64
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DCRASHPAD_SPECIAL_TARGET=$SPECIAL_TARGET \
-DCRASHPAD_ZLIB_INCLUDE_PATH=$ZLIB_PATH \
-DCRASHPAD_ZLIB_LIB_PATH=$ZLIB_LIB ../..
ninja
cd ..
mkdir Release.arm64
cd Release.arm64
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DCRASHPAD_SPECIAL_TARGET=$SPECIAL_TARGET \
-DCRASHPAD_ZLIB_INCLUDE_PATH=$ZLIB_PATH \
-DCRASHPAD_ZLIB_LIB_PATH=$ZLIB_LIB ../..
ninja
cd ..
mkdir Release
lipo -create Release.arm64/crashpad_handler Release.x86_64/crashpad_handler -output Release/crashpad_handler
lipo -create Release.arm64/libcrashpad_client.a Release.x86_64/libcrashpad_client.a -output Release/libcrashpad_client.a
""")
stage('tg_angle', """
win:
git clone https://github.com/desktop-app/tg_angle.git
cd tg_angle
git checkout 0bb011f9e4
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
release:
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 ..\\..\\..
""")
if buildQt5:
stage('qt_5_15_7', """
git clone https://code.qt.io/qt/qt5.git qt_5_15_7
cd qt_5_15_7
perl init-repository --module-subset=qtbase,qtimageformats,qtsvg
git checkout v5.15.7-lts-lgpl
git submodule update qtbase qtimageformats qtsvg
depends:patches/qtbase_5_15_7/*.patch
cd qtbase
win:
for /r %%i in (..\\..\\patches\\qtbase_5_15_7\\*) do git apply %%i
cd ..
SET CONFIGURATIONS=-debug
release:
SET CONFIGURATIONS=-debug-and-release
win:
""" + removeDir("\"%LIBS_DIR%\\Qt-5.15.7\"") + """
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
configure -prefix "%LIBS_DIR%\\Qt-5.15.7" ^
%CONFIGURATIONS% ^
-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%\Debug\zlibstaticd.lib d3d9.lib dxgi.lib dxguid.lib" ^
QMAKE_LIBS_OPENGL_ES2_RELEASE="%ANGLE_LIBS_DIR%\\Release\\tg_angle.lib %ZLIB_LIBS_DIR%\Release\zlibstatic.lib d3d9.lib dxgi.lib dxguid.lib" ^
-egl ^
QMAKE_LIBS_EGL_DEBUG="%ANGLE_LIBS_DIR%\\Debug\\tg_angle.lib %ZLIB_LIBS_DIR%\Debug\zlibstaticd.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%\Release\zlibstatic.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_7 -type f -print0 | sort -z | xargs -0 git apply
cd ..
CONFIGURATIONS=-debug
release:
CONFIGURATIONS=-debug-and-release
mac:
./configure -prefix "$USED_PREFIX/Qt-5.15.7" \
$CONFIGURATIONS \
-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
""")
if buildQt6:
stage('qt_6_3_2', """
mac:
git clone -b v6.3.2 https://code.qt.io/qt/qt5.git qt_6_3_2
cd qt_6_3_2
perl init-repository --module-subset=qtbase,qtimageformats,qtsvg,qt5compat
depends:patches/qtbase_6_3_2/*.patch
cd qtbase
find ../../patches/qtbase_6_3_2 -type f -print0 | sort -z | xargs -0 git apply
cd ..
CONFIGURATIONS=-debug
release:
CONFIGURATIONS=-debug-and-release
mac:
./configure -prefix "$USED_PREFIX/Qt-6.3.2" \
$CONFIGURATIONS \
-force-debug-info \
-opensource \
-confirm-license \
-static \
-opengl desktop \
-no-openssl \
-securetransport \
-I "$USED_PREFIX/include" \
-no-feature-futimens \
-nomake examples \
-nomake tests \
-platform macx-clang -- -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
ninja
ninja install
""")
stage('tg_owt', """
git clone https://github.com/desktop-app/tg_owt.git
cd tg_owt
git checkout 9b70d7679e
git submodule init
git submodule update src/third_party/libyuv src/third_party/crc32c/src src/third_party/abseil-cpp
win:
SET MOZJPEG_PATH=$LIBS_DIR/mozjpeg
SET OPUS_PATH=$USED_PREFIX/include/opus
SET OPENSSL_PATH=$LIBS_DIR/openssl/include
SET LIBVPX_PATH=$USED_PREFIX/include
SET FFMPEG_PATH=$LIBS_DIR/ffmpeg
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=$OPENSSL_PATH \
-DTG_OWT_OPUS_INCLUDE_PATH=$OPUS_PATH \
-DTG_OWT_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
-DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
ninja
release:
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=$OPENSSL_PATH \
-DTG_OWT_OPUS_INCLUDE_PATH=$OPUS_PATH \
-DTG_OWT_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
-DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
ninja
mac:
MOZJPEG_PATH=$USED_PREFIX/include
OPUS_PATH=$USED_PREFIX/include/opus
LIBVPX_PATH=$USED_PREFIX/include
FFMPEG_PATH=$USED_PREFIX/include
mkdir out
cd out
mkdir Debug.x86_64
cd Debug.x86_64
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-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_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
-DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
ninja
cd ..
mkdir Debug.arm64
cd Debug.arm64
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-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_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
-DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
ninja
cd ..
mkdir Debug
lipo -create Debug.arm64/libtg_owt.a Debug.x86_64/libtg_owt.a -output Debug/libtg_owt.a
release:
mkdir Release.x86_64
cd Release.x86_64
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-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_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
-DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
ninja
cd ..
mkdir Release.arm64
cd Release.arm64
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-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_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
-DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
ninja
cd ..
mkdir Release
lipo -create Release.arm64/libtg_owt.a Release.x86_64/libtg_owt.a -output Release/libtg_owt.a
""")
stage('protobuf', """
win:
git clone --recursive -b v21.9 https://github.com/protocolbuffers/protobuf
cd protobuf
git clone https://github.com/abseil/abseil-cpp third_party/abseil-cpp
cd third_party/abseil-cpp
git checkout 273292d1cf
cd ../..
mkdir build
cd build
cmake .. ^
-A %WIN32X64% ^
-Dprotobuf_BUILD_TESTS=OFF ^
-Dprotobuf_BUILD_PROTOBUF_BINARIES=ON ^
-Dprotobuf_BUILD_LIBPROTOC=ON ^
-Dprotobuf_WITH_ZLIB_DEFAULT=OFF ^
-Dprotobuf_DEBUG_POSTFIX=""
cmake --build . --config Release --parallel
cmake --build . --config Debug --parallel
""")
# mac:
# git clone --recursive -b v21.9 https://github.com/protocolbuffers/protobuf
# cd protobuf
# git clone https://github.com/abseil/abseil-cpp third_party/abseil-cpp
# cd third_party/abseil-cpp
# git checkout 273292d1cf
# cd ../..
# mkdir build
# cd build
# CFLAGS="$UNGUARDED" CPPFLAGS="$UNGUARDED" cmake .. \
# -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \
# -Dprotobuf_BUILD_TESTS=OFF \
# -Dprotobuf_BUILD_PROTOBUF_BINARIES=ON \
# -Dprotobuf_BUILD_LIBPROTOC=ON \
# -Dprotobuf_WITH_ZLIB_DEFAULT=OFF
# cmake --build . $MAKE_THREADS_CNT
runStages()