prepare.py 64 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933
  1. import os, sys, pprint, re, json, pathlib, hashlib, subprocess, glob, tempfile
  2. executePath = os.getcwd()
  3. sys.dont_write_bytecode = True
  4. scriptPath = os.path.dirname(os.path.realpath(__file__))
  5. sys.path.append(scriptPath + '/..')
  6. import qt_version
  7. def finish(code):
  8. global executePath
  9. os.chdir(executePath)
  10. sys.exit(code)
  11. def error(text):
  12. print('[ERROR] ' + text)
  13. finish(1)
  14. def nativeToolsError():
  15. error('Make sure to run from Native Tools Command Prompt.')
  16. win = (sys.platform == 'win32')
  17. mac = (sys.platform == 'darwin')
  18. if win and not 'Platform' in os.environ:
  19. nativeToolsError()
  20. win32 = win and (os.environ['Platform'] == 'x86')
  21. win64 = win and (os.environ['Platform'] == 'x64')
  22. winarm = win and (os.environ['Platform'] == 'arm64')
  23. arch = ''
  24. if win32:
  25. arch = 'x86'
  26. elif win64:
  27. arch = 'x64'
  28. elif winarm:
  29. arch = 'arm'
  30. if not qt_version.resolve(arch):
  31. error('Usupported platform.')
  32. qt = os.environ.get('QT')
  33. if win and not 'COMSPEC' in os.environ:
  34. error('COMSPEC environment variable is not set.')
  35. if win and not win32 and not win64 and not winarm:
  36. nativeToolsError()
  37. os.chdir(scriptPath + '/../../../..')
  38. pathSep = ';' if win else ':'
  39. libsLoc = 'Libraries' if not win64 else (os.path.join('Libraries', 'win64'))
  40. keysLoc = 'cache_keys'
  41. rootDir = os.getcwd()
  42. libsDir = os.path.realpath(os.path.join(rootDir, libsLoc))
  43. thirdPartyDir = os.path.realpath(os.path.join(rootDir, 'ThirdParty'))
  44. usedPrefix = os.path.realpath(os.path.join(libsDir, 'local'))
  45. optionsList = [
  46. 'qt6',
  47. 'skip-release',
  48. 'build-stackwalk',
  49. ]
  50. options = []
  51. runCommand = []
  52. customRunCommand = False
  53. for arg in sys.argv[1:]:
  54. if customRunCommand:
  55. runCommand.append(arg)
  56. if arg in optionsList:
  57. options.append(arg)
  58. elif arg == 'run':
  59. customRunCommand = True
  60. elif arg == 'shell':
  61. customRunCommand = True
  62. runCommand.append('shell')
  63. if not os.path.isdir(os.path.join(libsDir, keysLoc)):
  64. pathlib.Path(os.path.join(libsDir, keysLoc)).mkdir(parents=True, exist_ok=True)
  65. if not os.path.isdir(os.path.join(thirdPartyDir, keysLoc)):
  66. pathlib.Path(os.path.join(thirdPartyDir, keysLoc)).mkdir(parents=True, exist_ok=True)
  67. pathPrefixes = [
  68. 'ThirdParty\\msys64\\mingw64\\bin',
  69. 'ThirdParty\\jom',
  70. 'ThirdParty\\cmake\\bin',
  71. 'ThirdParty\\gyp',
  72. ] if win else [
  73. 'ThirdParty/gyp',
  74. 'ThirdParty/yasm',
  75. 'ThirdParty/depot_tools',
  76. ]
  77. pathPrefix = ''
  78. for singlePrefix in pathPrefixes:
  79. pathPrefix = pathPrefix + os.path.join(rootDir, singlePrefix) + pathSep
  80. environment = {
  81. 'USED_PREFIX': usedPrefix,
  82. 'ROOT_DIR': rootDir,
  83. 'LIBS_DIR': libsDir,
  84. 'THIRDPARTY_DIR': thirdPartyDir,
  85. 'PATH_PREFIX': pathPrefix,
  86. }
  87. if (win32):
  88. environment.update({
  89. 'SPECIAL_TARGET': 'win',
  90. 'X8664': 'x86',
  91. 'WIN32X64': 'Win32',
  92. })
  93. elif (win64):
  94. environment.update({
  95. 'SPECIAL_TARGET': 'win64',
  96. 'X8664': 'x64',
  97. 'WIN32X64': 'x64',
  98. })
  99. elif (winarm):
  100. environment.update({
  101. 'SPECIAL_TARGET': 'winarm',
  102. 'X8664': 'ARM64',
  103. 'WIN32X64': 'ARM64',
  104. })
  105. elif (mac):
  106. environment.update({
  107. 'SPECIAL_TARGET': 'mac',
  108. 'MAKE_THREADS_CNT': '-j' + str(os.cpu_count()),
  109. 'MACOSX_DEPLOYMENT_TARGET': '10.13',
  110. 'UNGUARDED': '-Werror=unguarded-availability-new',
  111. 'MIN_VER': '-mmacosx-version-min=10.13',
  112. })
  113. ignoreInCacheForThirdParty = [
  114. 'USED_PREFIX',
  115. 'LIBS_DIR',
  116. 'SPECIAL_TARGET',
  117. 'X8664',
  118. 'WIN32X64',
  119. ]
  120. environmentKeyString = ''
  121. envForThirdPartyKeyString = ''
  122. for key in environment:
  123. part = key + '=' + environment[key] + ';'
  124. environmentKeyString += part
  125. if not key in ignoreInCacheForThirdParty:
  126. envForThirdPartyKeyString += part
  127. environmentKey = hashlib.sha1(environmentKeyString.encode('utf-8')).hexdigest()
  128. envForThirdPartyKey = hashlib.sha1(envForThirdPartyKeyString.encode('utf-8')).hexdigest()
  129. modifiedEnv = os.environ.copy()
  130. for key in environment:
  131. modifiedEnv[key] = environment[key]
  132. modifiedEnv['PATH'] = environment['PATH_PREFIX'] + modifiedEnv['PATH']
  133. def computeFileHash(path):
  134. sha1 = hashlib.sha1()
  135. with open(path, 'rb') as f:
  136. while True:
  137. data = f.read(256 * 1024)
  138. if not data:
  139. break
  140. sha1.update(data)
  141. return sha1.hexdigest()
  142. def computeCacheKey(stage):
  143. if (stage['location'] == 'ThirdParty'):
  144. envKey = envForThirdPartyKey
  145. else:
  146. envKey = environmentKey
  147. objects = [
  148. envKey,
  149. stage['location'],
  150. stage['name'],
  151. stage['version'],
  152. stage['commands']
  153. ]
  154. for pattern in stage['dependencies']:
  155. pathlist = glob.glob(os.path.join(libsDir, pattern))
  156. items = [pattern]
  157. if len(pathlist) == 0:
  158. pathlist = glob.glob(os.path.join(thirdPartyDir, pattern))
  159. if len(pathlist) == 0:
  160. error('Nothing found: ' + pattern)
  161. for path in pathlist:
  162. if not os.path.exists(path):
  163. error('Not found: ' + path)
  164. items.append(computeFileHash(path))
  165. objects.append(':'.join(items))
  166. return hashlib.sha1(';'.join(objects).encode('utf-8')).hexdigest()
  167. def keyPath(stage):
  168. return os.path.join(stage['directory'], keysLoc, stage['name'])
  169. def checkCacheKey(stage):
  170. if not 'key' in stage:
  171. error('Key not set in stage: ' + stage['name'])
  172. key = keyPath(stage)
  173. if not os.path.exists(os.path.join(stage['directory'], stage['name'])):
  174. return 'NotFound'
  175. if not os.path.exists(key):
  176. return 'Stale'
  177. with open(key, 'r') as file:
  178. return 'Good' if (file.read() == stage['key']) else 'Stale'
  179. def clearCacheKey(stage):
  180. key = keyPath(stage)
  181. if os.path.exists(key):
  182. os.remove(key)
  183. def writeCacheKey(stage):
  184. if not 'key' in stage:
  185. error('Key not set in stage: ' + stage['name'])
  186. key = keyPath(stage)
  187. with open(key, 'w') as file:
  188. file.write(stage['key'])
  189. stages = []
  190. def removeDir(folder):
  191. if win:
  192. return 'if exist ' + folder + ' rmdir /Q /S ' + folder + '\nif exist ' + folder + ' exit /b 1'
  193. return 'rm -rf ' + folder
  194. def setVar(key, multilineValue):
  195. singlelineValue = ' '.join(multilineValue.replace('\n', '').split());
  196. if win:
  197. return 'SET "' + key + '=' + singlelineValue + '"';
  198. return key + '="' + singlelineValue + '"';
  199. def filterByPlatform(commands):
  200. commands = commands.split('\n')
  201. result = ''
  202. dependencies = []
  203. version = '0'
  204. skip = False
  205. for command in commands:
  206. m = re.match(r'(!?)([a-z0-9_]+):', command)
  207. if m and m.group(2) != 'depends' and m.group(2) != 'version':
  208. scopes = m.group(2).split('_')
  209. inscope = 'common' in scopes
  210. if win and 'win' in scopes:
  211. inscope = True
  212. if win32 and 'win32' in scopes:
  213. inscope = True
  214. if win64 and 'win64' in scopes:
  215. inscope = True
  216. if winarm and 'winarm' in scopes:
  217. inscope = True
  218. if mac and 'mac' in scopes:
  219. inscope = True
  220. # if linux and 'linux' in scopes:
  221. # inscope = True
  222. if 'release' in scopes:
  223. if 'skip-release' in options:
  224. inscope = False
  225. elif len(scopes) == 1:
  226. continue
  227. skip = inscope if m.group(1) == '!' else not inscope
  228. elif not skip and not re.match(r'\s*#', command):
  229. if m and m.group(2) == 'version':
  230. version = version + '.' + command[len(m.group(0)):].strip()
  231. elif m and m.group(2) == 'depends':
  232. pattern = command[len(m.group(0)):].strip()
  233. dependencies.append(pattern)
  234. else:
  235. command = command.strip()
  236. if len(command) > 0:
  237. result = result + command + '\n'
  238. return [result, dependencies, version]
  239. def stage(name, commands, location = 'Libraries'):
  240. if location == 'Libraries':
  241. directory = libsDir
  242. elif location == 'ThirdParty':
  243. directory = thirdPartyDir
  244. else:
  245. error('Unknown location: ' + location)
  246. [commands, dependencies, version] = filterByPlatform(commands)
  247. if len(commands) > 0:
  248. stages.append({
  249. 'name': name,
  250. 'location': location,
  251. 'directory': directory,
  252. 'commands': commands,
  253. 'version': version,
  254. 'dependencies': dependencies
  255. })
  256. def winFailOnEach(command):
  257. commands = command.split('\n')
  258. result = ''
  259. startingCommand = True
  260. for command in commands:
  261. command = re.sub(r'\$([A-Za-z0-9_]+)', r'%\1%', command)
  262. if re.search(r'\$[^<]', command):
  263. error('Bad command: ' + command)
  264. appendCall = startingCommand and not re.match(r'(if|for) ', command)
  265. called = 'call ' + command if appendCall else command
  266. result = result + called
  267. if command.endswith('^'):
  268. startingCommand = False
  269. else:
  270. startingCommand = True
  271. result = result + '\r\nif %errorlevel% neq 0 exit /b %errorlevel%\r\n'
  272. return result
  273. def printCommands(commands):
  274. print('---------------------------------COMMANDS-LIST----------------------------------')
  275. print(commands, end='')
  276. print('--------------------------------------------------------------------------------')
  277. def run(commands):
  278. printCommands(commands)
  279. if win:
  280. if os.path.exists("command.bat"):
  281. os.remove("command.bat")
  282. with open("command.bat", 'w') as file:
  283. file.write('@echo OFF\r\n' + winFailOnEach(commands))
  284. result = subprocess.run("command.bat", shell=True, env=modifiedEnv).returncode == 0
  285. if result and os.path.exists("command.bat"):
  286. os.remove("command.bat")
  287. return result
  288. elif re.search(r'\%', commands):
  289. error('Bad command: ' + commands)
  290. else:
  291. return subprocess.run("set -e\n" + commands, shell=True, env=modifiedEnv).returncode == 0
  292. # Thanks https://stackoverflow.com/a/510364
  293. class _Getch:
  294. """Gets a single character from standard input. Does not echo to the
  295. screen."""
  296. def __init__(self):
  297. try:
  298. self.impl = _GetchWindows()
  299. except ImportError:
  300. self.impl = _GetchUnix()
  301. def __call__(self): return self.impl()
  302. class _GetchUnix:
  303. def __init__(self):
  304. import tty, sys
  305. def __call__(self):
  306. import sys, tty, termios
  307. fd = sys.stdin.fileno()
  308. old_settings = termios.tcgetattr(fd)
  309. try:
  310. tty.setraw(sys.stdin.fileno())
  311. ch = sys.stdin.read(1)
  312. finally:
  313. termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
  314. return ch
  315. class _GetchWindows:
  316. def __init__(self):
  317. import msvcrt
  318. def __call__(self):
  319. import msvcrt
  320. return msvcrt.getch().decode('ascii')
  321. getch = _Getch()
  322. def runStages():
  323. onlyStages = []
  324. rebuildStale = False
  325. for arg in sys.argv[1:]:
  326. if arg in options:
  327. continue
  328. elif arg == 'silent':
  329. rebuildStale = True
  330. continue
  331. found = False
  332. for stage in stages:
  333. if stage['name'] == arg:
  334. onlyStages.append(arg)
  335. found = True
  336. break
  337. if not found:
  338. error('Unknown argument: ' + arg)
  339. count = len(stages)
  340. index = 0
  341. for stage in stages:
  342. if len(onlyStages) > 0 and not stage['name'] in onlyStages:
  343. continue
  344. index = index + 1
  345. version = ('#' + str(stage['version'])) if (stage['version'] != '0') else ''
  346. prefix = '[' + str(index) + '/' + str(count) + '](' + stage['location'] + '/' + stage['name'] + version + ')'
  347. print(prefix + ': ', end = '', flush=True)
  348. stage['key'] = computeCacheKey(stage)
  349. commands = removeDir(stage['name']) + '\n' + stage['commands']
  350. checkResult = 'Forced' if len(onlyStages) > 0 else checkCacheKey(stage)
  351. if checkResult == 'Good':
  352. print('SKIPPING')
  353. continue
  354. elif checkResult == 'NotFound':
  355. print('NOT FOUND, ', end='')
  356. elif checkResult == 'Stale' or checkResult == 'Forced':
  357. if checkResult == 'Stale':
  358. print('CHANGED, ', end='')
  359. if rebuildStale:
  360. checkResult == 'Rebuild'
  361. else:
  362. print('(r)ebuild, rebuild (a)ll, (s)kip, (p)rint, (q)uit?: ', end='', flush=True)
  363. while True:
  364. ch = 'r' if rebuildStale else getch()
  365. if ch == 'q':
  366. finish(0)
  367. elif ch == 'p':
  368. printCommands(commands)
  369. checkResult = 'Printed'
  370. break
  371. elif ch == 's':
  372. checkResult = 'Skip'
  373. break
  374. elif ch == 'r':
  375. checkResult = 'Rebuild'
  376. break
  377. elif ch == 'a':
  378. checkResult = 'Rebuild'
  379. rebuildStale = True
  380. break
  381. if checkResult == 'Printed':
  382. continue
  383. if checkResult == 'Skip':
  384. print('SKIPPING')
  385. continue
  386. clearCacheKey(stage)
  387. print('BUILDING:')
  388. os.chdir(stage['directory'])
  389. if not run(commands):
  390. print(prefix + ': FAILED')
  391. finish(1)
  392. writeCacheKey(stage)
  393. if customRunCommand:
  394. os.chdir(executePath)
  395. if len(runCommand) == 1 and runCommand[0] == 'shell':
  396. print('Preparing interactive mode..')
  397. if win:
  398. modifiedEnv['PROMPT'] = '(prepare) $P$G'
  399. subprocess.run("cmd.exe", shell=True, env=modifiedEnv)
  400. else:
  401. prompt = '(prepare) %~ %# '
  402. with tempfile.NamedTemporaryFile(mode='w', delete=False) as tmp_zshrc:
  403. tmp_zshrc.write(f'export PS1="{prompt}"\n')
  404. tmp_zshrc_path = tmp_zshrc.name
  405. subprocess.run(['zsh', '--rcs', tmp_zshrc_path], env=modifiedEnv)
  406. os.remove(tmp_zshrc_path)
  407. elif not run(' '.join(runCommand) + '\n'):
  408. print('FAILED :(')
  409. finish(1)
  410. finish(0)
  411. stage('patches', """
  412. git clone https://github.com/desktop-app/patches.git
  413. cd patches
  414. git checkout b88d491492
  415. """)
  416. stage('msys64', """
  417. win:
  418. SET PATH_BACKUP_=%PATH%
  419. SET PATH=%ROOT_DIR%\\ThirdParty\\msys64\\usr\\bin;%PATH%
  420. SET CHERE_INVOKING=enabled_from_arguments
  421. SET MSYS2_PATH_TYPE=inherit
  422. powershell -Command "iwr -OutFile ./msys64.exe https://github.com/msys2/msys2-installer/releases/download/2024-05-07/msys2-base-x86_64-20240507.sfx.exe"
  423. msys64.exe
  424. del msys64.exe
  425. bash -c "pacman-key --init; pacman-key --populate; pacman -Syu --noconfirm"
  426. pacman -Syu --noconfirm mingw-w64-x86_64-perl mingw-w64-x86_64-nasm mingw-w64-x86_64-yasm mingw-w64-x86_64-ninja msys/make diffutils pkg-config
  427. SET PATH=%PATH_BACKUP_%
  428. """, 'ThirdParty')
  429. stage('python', """
  430. version: """ + (subprocess.run(['python', '-V'], capture_output=True, text=True, env=modifiedEnv).stdout.strip().split()[-1] if win else '0') + """
  431. win:
  432. python -m venv python
  433. python\\Scripts\\activate.bat
  434. pip install pywin32 six meson
  435. deactivate
  436. """, 'ThirdParty')
  437. stage('NuGet', """
  438. win:
  439. mkdir NuGet
  440. powershell -Command "iwr -OutFile ./NuGet/nuget.exe https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
  441. """, 'ThirdParty')
  442. stage('jom', """
  443. win:
  444. powershell -Command "iwr -OutFile ./jom.zip https://master.qt.io/official_releases/jom/jom_1_1_3.zip"
  445. powershell -Command "Expand-Archive ./jom.zip"
  446. del jom.zip
  447. """, 'ThirdParty')
  448. stage('depot_tools', """
  449. mac:
  450. git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
  451. cd depot_tools
  452. ./update_depot_tools
  453. """, 'ThirdParty')
  454. if not mac or 'build-stackwalk' in options:
  455. stage('gyp', """
  456. win:
  457. git clone https://github.com/desktop-app/gyp.git
  458. cd gyp
  459. git checkout 618958fdbe
  460. mac:
  461. python3 -m pip install \\
  462. --ignore-installed \\
  463. --target=$THIRDPARTY_DIR/gyp \\
  464. git+https://chromium.googlesource.com/external/gyp@master
  465. """, 'ThirdParty')
  466. stage('yasm', """
  467. mac:
  468. git clone https://github.com/yasm/yasm.git
  469. cd yasm
  470. git checkout 41762bea
  471. ./autogen.sh
  472. make $MAKE_THREADS_CNT
  473. """, 'ThirdParty')
  474. stage('lzma', """
  475. win:
  476. git clone https://github.com/desktop-app/lzma.git
  477. cd lzma\\C\\Util\\LzmaLib
  478. msbuild -m LzmaLib.sln /property:Configuration=Debug /property:Platform="$X8664"
  479. release:
  480. msbuild -m LzmaLib.sln /property:Configuration=Release /property:Platform="$X8664"
  481. """)
  482. stage('xz', """
  483. !win:
  484. git clone -b v5.4.5 https://github.com/tukaani-project/xz.git
  485. cd xz
  486. sed -i '' '\\@check_symbol_exists(futimens "sys/types.h;sys/stat.h" HAVE_FUTIMENS)@d' CMakeLists.txt
  487. CFLAGS="$UNGUARDED" CPPFLAGS="$UNGUARDED" cmake -B build . \\
  488. -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
  489. -D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
  490. -D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX
  491. cmake --build build $MAKE_THREADS_CNT
  492. cmake --install build
  493. """)
  494. stage('zlib', """
  495. git clone https://github.com/madler/zlib.git
  496. cd zlib
  497. git checkout 643e17b749
  498. win:
  499. cmake . ^
  500. -A %WIN32X64% ^
  501. -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded$<$<CONFIG:Debug>:Debug>" ^
  502. -DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
  503. -DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
  504. -DCMAKE_C_FLAGS="/DZLIB_WINAPI"
  505. cmake --build . --config Debug --parallel
  506. release:
  507. cmake --build . --config Release --parallel
  508. mac:
  509. CFLAGS="$MIN_VER $UNGUARDED" LDFLAGS="$MIN_VER" ./configure \\
  510. --static \\
  511. --prefix=$USED_PREFIX \\
  512. --archs="-arch x86_64 -arch arm64"
  513. make $MAKE_THREADS_CNT
  514. make install
  515. """)
  516. stage('mozjpeg', """
  517. git clone -b v4.1.5 https://github.com/mozilla/mozjpeg.git
  518. cd mozjpeg
  519. win:
  520. cmake . ^
  521. -A %WIN32X64% ^
  522. -DWITH_JPEG8=ON ^
  523. -DPNG_SUPPORTED=OFF
  524. cmake --build . --config Debug --parallel
  525. release:
  526. cmake --build . --config Release --parallel
  527. mac:
  528. CFLAGS="-arch arm64" cmake -B build.arm64 . \\
  529. -D CMAKE_SYSTEM_NAME=Darwin \\
  530. -D CMAKE_SYSTEM_PROCESSOR=arm64 \\
  531. -D CMAKE_BUILD_TYPE=Release \\
  532. -D CMAKE_INSTALL_PREFIX=$USED_PREFIX \\
  533. -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
  534. -D WITH_JPEG8=ON \\
  535. -D ENABLE_SHARED=OFF \\
  536. -D PNG_SUPPORTED=OFF
  537. cmake --build build.arm64 $MAKE_THREADS_CNT
  538. CFLAGS="-arch x86_64" cmake -B build . \\
  539. -D CMAKE_SYSTEM_NAME=Darwin \\
  540. -D CMAKE_SYSTEM_PROCESSOR=x86_64 \\
  541. -D CMAKE_BUILD_TYPE=Release \\
  542. -D CMAKE_INSTALL_PREFIX=$USED_PREFIX \\
  543. -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
  544. -D WITH_JPEG8=ON \\
  545. -D ENABLE_SHARED=OFF \\
  546. -D PNG_SUPPORTED=OFF
  547. cmake --build build $MAKE_THREADS_CNT
  548. lipo -create build.arm64/libjpeg.a build/libjpeg.a -output build/libjpeg.a
  549. lipo -create build.arm64/libturbojpeg.a build/libturbojpeg.a -output build/libturbojpeg.a
  550. cmake --install build
  551. """)
  552. stage('openssl3', """
  553. git clone -b openssl-3.2.1 https://github.com/openssl/openssl openssl3
  554. cd openssl3
  555. win32:
  556. perl Configure no-shared no-tests debug-VC-WIN32 /FS
  557. win64:
  558. perl Configure no-shared no-tests debug-VC-WIN64A /FS
  559. winarm:
  560. perl Configure no-shared no-tests debug-VC-WIN64-ARM /FS
  561. win:
  562. jom -j%NUMBER_OF_PROCESSORS% build_libs
  563. mkdir out.dbg
  564. move libcrypto.lib out.dbg
  565. move libssl.lib out.dbg
  566. move ossl_static.pdb out.dbg
  567. release:
  568. move out.dbg\\ossl_static.pdb out.dbg\\ossl_static
  569. jom clean
  570. move out.dbg\\ossl_static out.dbg\\ossl_static.pdb
  571. win32_release:
  572. perl Configure no-shared no-tests VC-WIN32 /FS
  573. win64_release:
  574. perl Configure no-shared no-tests VC-WIN64A /FS
  575. winarm_release:
  576. perl Configure no-shared no-tests VC-WIN64-ARM /FS
  577. win_release:
  578. jom -j%NUMBER_OF_PROCESSORS% build_libs
  579. mkdir out
  580. move libcrypto.lib out
  581. move libssl.lib out
  582. move ossl_static.pdb out
  583. mac:
  584. ./Configure --prefix=$USED_PREFIX no-shared no-tests darwin64-arm64-cc $MIN_VER
  585. make build_libs $MAKE_THREADS_CNT
  586. mkdir out.arm64
  587. mv libssl.a out.arm64
  588. mv libcrypto.a out.arm64
  589. make clean
  590. ./Configure --prefix=$USED_PREFIX no-shared no-tests darwin64-x86_64-cc $MIN_VER
  591. make build_libs $MAKE_THREADS_CNT
  592. mkdir out.x86_64
  593. mv libssl.a out.x86_64
  594. mv libcrypto.a out.x86_64
  595. lipo -create out.arm64/libcrypto.a out.x86_64/libcrypto.a -output libcrypto.a
  596. lipo -create out.arm64/libssl.a out.x86_64/libssl.a -output libssl.a
  597. """)
  598. stage('opus', """
  599. git clone -b v1.3.1 https://github.com/xiph/opus.git
  600. cd opus
  601. git cherry-pick 927de8453c
  602. win:
  603. cmake -B out . ^
  604. -A %WIN32X64% ^
  605. -DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
  606. -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded$<$<CONFIG:Debug>:Debug>" ^
  607. -DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
  608. -DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG"
  609. cmake --build out --config Debug --parallel
  610. cmake --build out --config Release --parallel
  611. cmake --install out --config Release
  612. mac:
  613. CFLAGS="$UNGUARDED" CPPFLAGS="$UNGUARDED" cmake -B build . \\
  614. -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
  615. -D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
  616. -D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX
  617. cmake --build build $MAKE_THREADS_CNT
  618. cmake --install build
  619. """)
  620. stage('rnnoise', """
  621. git clone https://github.com/desktop-app/rnnoise.git
  622. cd rnnoise
  623. git checkout fe37e57d09
  624. mkdir out
  625. cd out
  626. win:
  627. cmake -A %WIN32X64% ..
  628. cmake --build . --config Debug --parallel
  629. release:
  630. cmake --build . --config Release --parallel
  631. !win:
  632. mkdir Debug
  633. cd Debug
  634. cmake -G Ninja ../.. \\
  635. -D CMAKE_BUILD_TYPE=Debug \\
  636. -D CMAKE_OSX_ARCHITECTURES="x86_64;arm64"
  637. ninja
  638. release:
  639. cd ..
  640. mkdir Release
  641. cd Release
  642. cmake -G Ninja ../.. \\
  643. -D CMAKE_BUILD_TYPE=Release \\
  644. -D CMAKE_OSX_ARCHITECTURES="x86_64;arm64"
  645. ninja
  646. """)
  647. stage('libiconv', """
  648. mac:
  649. VERSION=1.17
  650. rm -f libiconv.tar.gz
  651. wget -O libiconv.tar.gz ftp://ftp.gnu.org/gnu/libiconv/libiconv-$VERSION.tar.gz
  652. rm -rf libiconv-$VERSION
  653. tar -xvzf libiconv.tar.gz
  654. rm libiconv.tar.gz
  655. mv libiconv-$VERSION libiconv
  656. cd libiconv
  657. CFLAGS="$MIN_VER $UNGUARDED -arch arm64" CPPFLAGS="$MIN_VER $UNGUARDED -arch arm64" LDFLAGS="$MIN_VER" ./configure --enable-static --host=arm --prefix=$USED_PREFIX
  658. make $MAKE_THREADS_CNT
  659. mkdir out.arm64
  660. mv lib/.libs/libiconv.a out.arm64
  661. make clean
  662. 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
  663. make $MAKE_THREADS_CNT
  664. mkdir out.x86_64
  665. mv lib/.libs/libiconv.a out.x86_64
  666. lipo -create out.arm64/libiconv.a out.x86_64/libiconv.a -output lib/.libs/libiconv.a
  667. make install
  668. """)
  669. stage('gas-preprocessor', """
  670. win:
  671. git clone https://github.com/FFmpeg/gas-preprocessor
  672. cd gas-preprocessor
  673. echo @echo off > cpp.bat
  674. echo cl %%%%%%** >> cpp.bat
  675. """)
  676. # Somehow in x86 Debug build dav1d crashes on AV1 10bpc videos.
  677. stage('dav1d', """
  678. git clone -b 1.4.1 https://code.videolan.org/videolan/dav1d.git
  679. cd dav1d
  680. win32:
  681. SET "TARGET=x86"
  682. SET "DAV1D_ASM_DISABLE=-Denable_asm=false"
  683. win64:
  684. SET "TARGET=x86_64"
  685. SET "DAV1D_ASM_DISABLE="
  686. winarm:
  687. SET "TARGET=aarch64"
  688. SET "DAV1D_ASM_DISABLE="
  689. SET "PATH_BACKUP_=%PATH%"
  690. SET "PATH=%LIBS_DIR%\\gas-preprocessor;%PATH%"
  691. echo armasm64 fails with 'syntax error in expression: tbnz x14, #4, 8f' as if this instruction is unknown/unsupported.
  692. git revert --no-edit d503bb0ccaf104b2f13da0f092e09cc9411b3297
  693. win:
  694. set FILE=cross-file.txt
  695. echo [binaries] > %FILE%
  696. echo c = 'cl' >> %FILE%
  697. echo cpp = 'cl' >> %FILE%
  698. echo ar = 'lib' >> %FILE%
  699. echo windres = 'rc' >> %FILE%
  700. echo [host_machine] >> %FILE%
  701. echo system = 'windows' >> %FILE%
  702. echo cpu_family = '%TARGET%' >> %FILE%
  703. echo cpu = '%TARGET%' >> %FILE%
  704. echo endian = 'little' >> %FILE%
  705. depends:python/Scripts/activate.bat
  706. %THIRDPARTY_DIR%\\python\\Scripts\\activate.bat
  707. meson setup --cross-file %FILE% --prefix %LIBS_DIR%/local --default-library=static --buildtype=debug -Denable_tools=false -Denable_tests=false %DAV1D_ASM_DISABLE% -Db_vscrt=mtd builddir-debug
  708. meson compile -C builddir-debug
  709. meson install -C builddir-debug
  710. release:
  711. meson setup --cross-file %FILE% --prefix %LIBS_DIR%/local --default-library=static --buildtype=release -Denable_tools=false -Denable_tests=false -Db_vscrt=mt builddir-release
  712. meson compile -C builddir-release
  713. meson install -C builddir-release
  714. win:
  715. copy %LIBS_DIR%\\local\\lib\\libdav1d.a %LIBS_DIR%\\local\\lib\\dav1d.lib
  716. deactivate
  717. winarm:
  718. SET "PATH=%PATH_BACKUP_%"
  719. mac:
  720. buildOneArch() {
  721. arch=$1
  722. folder=`pwd`/$2
  723. meson setup \\
  724. --cross-file ../patches/macos_meson_${arch}.txt \\
  725. --prefix ${USED_PREFIX} \\
  726. --default-library=static \\
  727. --buildtype=minsize \\
  728. -Denable_tools=false \\
  729. -Denable_tests=false \\
  730. ${folder}
  731. meson compile -C ${folder}
  732. meson install -C ${folder}
  733. mv ${USED_PREFIX}/lib/libdav1d.a ${folder}/libdav1d.a
  734. }
  735. buildOneArch arm64 build.arm64
  736. buildOneArch x86_64 build
  737. lipo -create build.arm64/libdav1d.a build/libdav1d.a -output ${USED_PREFIX}/lib/libdav1d.a
  738. """)
  739. stage('openh264', """
  740. git clone -b v2.4.1 https://github.com/cisco/openh264.git
  741. cd openh264
  742. win32:
  743. SET "TARGET=x86"
  744. win64:
  745. SET "TARGET=x86_64"
  746. winarm:
  747. SET "TARGET=aarch64"
  748. SET "PATH_BACKUP_=%PATH%"
  749. SET "PATH=%LIBS_DIR%\\gas-preprocessor;%PATH%"
  750. win:
  751. set FILE=cross-file.txt
  752. echo [binaries] > %FILE%
  753. echo c = 'cl' >> %FILE%
  754. echo cpp = 'cl' >> %FILE%
  755. echo ar = 'lib' >> %FILE%
  756. echo windres = 'rc' >> %FILE%
  757. echo [host_machine] >> %FILE%
  758. echo system = 'windows' >> %FILE%
  759. echo cpu_family = '%TARGET%' >> %FILE%
  760. echo cpu = '%TARGET%' >> %FILE%
  761. echo endian = 'little' >> %FILE%
  762. depends:python/Scripts/activate.bat
  763. %THIRDPARTY_DIR%\\python\\Scripts\\activate.bat
  764. meson setup --cross-file %FILE% --prefix %LIBS_DIR%/local --default-library=static --buildtype=debug -Db_vscrt=mtd builddir-debug
  765. meson compile -C builddir-debug
  766. meson install -C builddir-debug
  767. release:
  768. meson setup --cross-file %FILE% --prefix %LIBS_DIR%/local --default-library=static --buildtype=release -Db_vscrt=mt builddir-release
  769. meson compile -C builddir-release
  770. meson install -C builddir-release
  771. win:
  772. copy %LIBS_DIR%\\local\\lib\\libopenh264.a %LIBS_DIR%\\local\\lib\\openh264.lib
  773. deactivate
  774. winarm:
  775. SET "PATH=%PATH_BACKUP_%"
  776. mac:
  777. buildOneArch() {
  778. arch=$1
  779. folder=`pwd`/$2
  780. meson setup \
  781. --cross-file ../patches/macos_meson_${arch}.txt \
  782. --prefix ${USED_PREFIX} \
  783. --default-library=static \
  784. --buildtype=minsize \
  785. ${folder}
  786. meson compile -C ${folder}
  787. meson install -C ${folder}
  788. mv ${USED_PREFIX}/lib/libopenh264.a ${folder}/libopenh264.a
  789. }
  790. buildOneArch aarch64 build.aarch64
  791. buildOneArch x86_64 build.x86_64
  792. lipo -create build.aarch64/libopenh264.a build.x86_64/libopenh264.a -output ${USED_PREFIX}/lib/libopenh264.a
  793. """)
  794. stage('libavif', """
  795. git clone -b v1.0.4 https://github.com/AOMediaCodec/libavif.git
  796. cd libavif
  797. win:
  798. cmake . ^
  799. -A %WIN32X64% ^
  800. -DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
  801. -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded$<$<CONFIG:Debug>:Debug>" ^
  802. -DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
  803. -DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
  804. -DBUILD_SHARED_LIBS=OFF ^
  805. -DAVIF_ENABLE_WERROR=OFF ^
  806. -DAVIF_CODEC_DAV1D=ON
  807. cmake --build . --config Debug --parallel
  808. cmake --install . --config Debug
  809. release:
  810. cmake --build . --config Release --parallel
  811. cmake --install . --config Release
  812. mac:
  813. cmake . \\
  814. -D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
  815. -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
  816. -D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX \\
  817. -D BUILD_SHARED_LIBS=OFF \\
  818. -D AVIF_ENABLE_WERROR=OFF \\
  819. -D AVIF_CODEC_DAV1D=ON \\
  820. -D CMAKE_DISABLE_FIND_PACKAGE_libsharpyuv=ON
  821. cmake --build . --config MinSizeRel $MAKE_THREADS_CNT
  822. cmake --install . --config MinSizeRel
  823. """)
  824. stage('libde265', """
  825. git clone -b v1.0.15 https://github.com/strukturag/libde265.git
  826. cd libde265
  827. win:
  828. cmake . ^
  829. -A %WIN32X64% ^
  830. -DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
  831. -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded$<$<CONFIG:Debug>:Debug>" ^
  832. -DCMAKE_C_FLAGS="/DLIBDE265_STATIC_BUILD" ^
  833. -DCMAKE_CXX_FLAGS="/DLIBDE265_STATIC_BUILD" ^
  834. -DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
  835. -DCMAKE_CXX_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
  836. -DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
  837. -DCMAKE_CXX_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
  838. -DENABLE_SDL=OFF ^
  839. -DBUILD_SHARED_LIBS=OFF ^
  840. -DENABLE_DECODER=OFF ^
  841. -DENABLE_ENCODER=OFF
  842. cmake --build . --config Debug --parallel
  843. cmake --install . --config Debug
  844. release:
  845. cmake --build . --config Release --parallel
  846. cmake --install . --config Release
  847. mac:
  848. cmake . \\
  849. -D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
  850. -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
  851. -D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX \\
  852. -D DISABLE_SSE=ON \\
  853. -D ENABLE_SDL=OFF \\
  854. -D BUILD_SHARED_LIBS=OFF \\
  855. -D ENABLE_DECODER=ON \\
  856. -D ENABLE_ENCODER=OFF
  857. cmake --build . --config MinSizeRel $MAKE_THREADS_CNT
  858. cmake --install . --config MinSizeRel
  859. """)
  860. stage('libwebp', """
  861. git clone -b v1.4.0 https://github.com/webmproject/libwebp.git
  862. cd libwebp
  863. win:
  864. nmake /f Makefile.vc CFG=debug-static OBJDIR=out RTLIBCFG=static all
  865. nmake /f Makefile.vc CFG=release-static OBJDIR=out RTLIBCFG=static all
  866. copy out\\release-static\\$X8664\\lib\\libwebp.lib out\\release-static\\$X8664\\lib\\webp.lib
  867. copy out\\release-static\\$X8664\\lib\\libwebpdemux.lib out\\release-static\\$X8664\\lib\\webpdemux.lib
  868. copy out\\release-static\\$X8664\\lib\\libwebpmux.lib out\\release-static\\$X8664\\lib\\webpmux.lib
  869. mac:
  870. buildOneArch() {
  871. arch=$1
  872. folder=$2
  873. CFLAGS=$UNGUARDED cmake -B $folder -G Ninja . \\
  874. -D CMAKE_BUILD_TYPE=Release \\
  875. -D CMAKE_INSTALL_PREFIX=$USED_PREFIX \\
  876. -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
  877. -D CMAKE_OSX_ARCHITECTURES=$arch \\
  878. -D WEBP_BUILD_ANIM_UTILS=OFF \\
  879. -D WEBP_BUILD_CWEBP=OFF \\
  880. -D WEBP_BUILD_DWEBP=OFF \\
  881. -D WEBP_BUILD_GIF2WEBP=OFF \\
  882. -D WEBP_BUILD_IMG2WEBP=OFF \\
  883. -D WEBP_BUILD_VWEBP=OFF \\
  884. -D WEBP_BUILD_WEBPMUX=OFF \\
  885. -D WEBP_BUILD_WEBPINFO=OFF \\
  886. -D WEBP_BUILD_EXTRAS=OFF
  887. cmake --build $folder $MAKE_THREADS_CNT
  888. }
  889. buildOneArch arm64 build.arm64
  890. buildOneArch x86_64 build
  891. lipo -create build.arm64/libsharpyuv.a build/libsharpyuv.a -output build/libsharpyuv.a
  892. lipo -create build.arm64/libwebp.a build/libwebp.a -output build/libwebp.a
  893. lipo -create build.arm64/libwebpdemux.a build/libwebpdemux.a -output build/libwebpdemux.a
  894. lipo -create build.arm64/libwebpmux.a build/libwebpmux.a -output build/libwebpmux.a
  895. cmake --install build
  896. """)
  897. stage('libheif', """
  898. git clone -b v1.18.2 https://github.com/strukturag/libheif.git
  899. cd libheif
  900. win:
  901. %THIRDPARTY_DIR%\\msys64\\usr\\bin\\sed.exe -i 's/LIBHEIF_EXPORTS/LIBDE265_STATIC_BUILD/g' libheif/CMakeLists.txt
  902. %THIRDPARTY_DIR%\\msys64\\usr\\bin\\sed.exe -i 's/HAVE_VISIBILITY/LIBHEIF_STATIC_BUILD/g' libheif/CMakeLists.txt
  903. cmake . ^
  904. -A %WIN32X64% ^
  905. -DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
  906. -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded$<$<CONFIG:Debug>:Debug>" ^
  907. -DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
  908. -DCMAKE_CXX_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
  909. -DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
  910. -DCMAKE_CXX_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
  911. -DBUILD_SHARED_LIBS=OFF ^
  912. -DBUILD_TESTING=OFF ^
  913. -DENABLE_PLUGIN_LOADING=OFF ^
  914. -DWITH_LIBDE265=ON ^
  915. -DWITH_SvtEnc=OFF ^
  916. -DWITH_SvtEnc_PLUGIN=OFF ^
  917. -DWITH_RAV1E=OFF ^
  918. -DWITH_RAV1E_PLUGIN=OFF ^
  919. -DWITH_EXAMPLES=OFF
  920. cmake --build . --config Debug --parallel
  921. cmake --install . --config Debug
  922. release:
  923. cmake --build . --config Release --parallel
  924. cmake --install . --config Release
  925. mac:
  926. cmake . \\
  927. -D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
  928. -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
  929. -D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX \\
  930. -D BUILD_SHARED_LIBS=OFF \\
  931. -D BUILD_TESTING=OFF \\
  932. -D ENABLE_PLUGIN_LOADING=OFF \\
  933. -D WITH_AOM_ENCODER=OFF \\
  934. -D WITH_AOM_DECODER=OFF \\
  935. -D WITH_X265=OFF \\
  936. -D WITH_SvtEnc=OFF \\
  937. -D WITH_RAV1E=OFF \\
  938. -D WITH_DAV1D=ON \\
  939. -D WITH_LIBDE265=ON \\
  940. -D LIBDE265_INCLUDE_DIR=$USED_PREFIX/include/ \\
  941. -D LIBDE265_LIBRARY=$USED_PREFIX/lib/libde265.a \\
  942. -D LIBSHARPYUV_INCLUDE_DIR=$USED_PREFIX/include/webp/ \\
  943. -D LIBSHARPYUV_LIBRARY=$USED_PREFIX/lib/libsharpyuv.a \\
  944. -D WITH_EXAMPLES=OFF
  945. cmake --build . --config MinSizeRel $MAKE_THREADS_CNT
  946. cmake --install . --config MinSizeRel
  947. """)
  948. stage('libjxl', """
  949. git clone -b v0.11.1 --recursive --shallow-submodules https://github.com/libjxl/libjxl.git
  950. cd libjxl
  951. """ + setVar("cmake_defines", """
  952. -DBUILD_SHARED_LIBS=OFF
  953. -DBUILD_TESTING=OFF
  954. -DJPEGXL_ENABLE_FUZZERS=OFF
  955. -DJPEGXL_ENABLE_DEVTOOLS=OFF
  956. -DJPEGXL_ENABLE_TOOLS=OFF
  957. -DJPEGXL_ENABLE_DOXYGEN=OFF
  958. -DJPEGXL_ENABLE_MANPAGES=OFF
  959. -DJPEGXL_ENABLE_EXAMPLES=OFF
  960. -DJPEGXL_ENABLE_JNI=OFF
  961. -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=OFF
  962. -DJPEGXL_ENABLE_SJPEG=OFF
  963. -DJPEGXL_ENABLE_OPENEXR=OFF
  964. -DJPEGXL_ENABLE_SKCMS=ON
  965. -DJPEGXL_ENABLE_VIEWERS=OFF
  966. -DJPEGXL_ENABLE_TCMALLOC=OFF
  967. -DJPEGXL_ENABLE_PLUGINS=OFF
  968. -DJPEGXL_ENABLE_COVERAGE=OFF
  969. -DJPEGXL_WARNINGS_AS_ERRORS=OFF
  970. """) + """
  971. win:
  972. cmake . ^
  973. -A %WIN32X64% ^
  974. -DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
  975. -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded$<$<CONFIG:Debug>:Debug>" ^
  976. -DCMAKE_C_FLAGS="/DJXL_STATIC_DEFINE /DJXL_THREADS_STATIC_DEFINE /DJXL_CMS_STATIC_DEFINE" ^
  977. -DCMAKE_CXX_FLAGS="/DJXL_STATIC_DEFINE /DJXL_THREADS_STATIC_DEFINE /DJXL_CMS_STATIC_DEFINE" ^
  978. -DCMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
  979. -DCMAKE_CXX_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
  980. -DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
  981. -DCMAKE_CXX_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
  982. %cmake_defines%
  983. cmake --build . --config Debug --parallel
  984. cmake --install . --config Debug
  985. release:
  986. cmake --build . --config Release --parallel
  987. cmake --install . --config Release
  988. mac:
  989. cmake . \\
  990. -D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
  991. -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
  992. -D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX \\
  993. ${cmake_defines}
  994. cmake --build . --config MinSizeRel $MAKE_THREADS_CNT
  995. cmake --install . --config MinSizeRel
  996. """)
  997. stage('libvpx', """
  998. git clone https://github.com/webmproject/libvpx.git
  999. depends:patches/libvpx/*.patch
  1000. cd libvpx
  1001. git checkout v1.14.1
  1002. win:
  1003. for /r %%i in (..\\patches\\libvpx\\*) do git apply %%i
  1004. SET PATH_BACKUP_=%PATH%
  1005. SET PATH=%ROOT_DIR%\\ThirdParty\\msys64\\usr\\bin;%PATH%
  1006. SET CHERE_INVOKING=enabled_from_arguments
  1007. SET MSYS2_PATH_TYPE=inherit
  1008. win32:
  1009. SET "TOOLCHAIN=x86-win32-vs17"
  1010. win64:
  1011. SET "TOOLCHAIN=x86_64-win64-vs17"
  1012. winarm:
  1013. SET "TOOLCHAIN=arm64-win64-vs17"
  1014. win:
  1015. depends:patches/build_libvpx_win.sh
  1016. bash --login ../patches/build_libvpx_win.sh
  1017. SET PATH=%PATH_BACKUP_%
  1018. mac:
  1019. find ../patches/libvpx -type f -print0 | sort -z | xargs -0 git apply
  1020. depends:yasm/yasm
  1021. ./configure --prefix=$USED_PREFIX \
  1022. --target=arm64-darwin20-gcc \
  1023. --disable-examples \
  1024. --disable-unit-tests \
  1025. --disable-tools \
  1026. --disable-docs \
  1027. --enable-vp8 \
  1028. --enable-vp9 \
  1029. --enable-webm-io \
  1030. --size-limit=4096x4096
  1031. make $MAKE_THREADS_CNT
  1032. mkdir out.arm64
  1033. mv libvpx.a out.arm64
  1034. make clean
  1035. ./configure --prefix=$USED_PREFIX \
  1036. --target=x86_64-darwin20-gcc \
  1037. --disable-examples \
  1038. --disable-unit-tests \
  1039. --disable-tools \
  1040. --disable-docs \
  1041. --enable-vp8 \
  1042. --enable-vp9 \
  1043. --enable-webm-io
  1044. make $MAKE_THREADS_CNT
  1045. mkdir out.x86_64
  1046. mv libvpx.a out.x86_64
  1047. lipo -create out.arm64/libvpx.a out.x86_64/libvpx.a -output libvpx.a
  1048. make install
  1049. """)
  1050. stage('liblcms2', """
  1051. git clone -b lcms2.16 https://github.com/mm2/Little-CMS.git liblcms2
  1052. cd liblcms2
  1053. win:
  1054. depends:python/Scripts/activate.bat
  1055. %THIRDPARTY_DIR%\\python\\Scripts\\activate.bat
  1056. meson setup --default-library=static --buildtype=debug -Db_vscrt=mtd out/Debug
  1057. meson compile -C out/Debug
  1058. release:
  1059. meson setup --default-library=static --buildtype=release -Db_vscrt=mt out/Release
  1060. meson compile -C out/Release
  1061. win:
  1062. deactivate
  1063. mac:
  1064. buildOneArch() {
  1065. arch=$1
  1066. folder=`pwd`/$2
  1067. meson setup \\
  1068. --cross-file ../patches/macos_meson_${arch}.txt \\
  1069. --prefix ${USED_PREFIX} \\
  1070. --default-library=static \\
  1071. --buildtype=minsize \\
  1072. ${folder}
  1073. meson compile -C ${folder}
  1074. meson install -C ${folder}
  1075. mv ${USED_PREFIX}/lib/liblcms2.a ${folder}/liblcms2.a
  1076. }
  1077. buildOneArch arm64 build.arm64
  1078. buildOneArch x86_64 build
  1079. lipo -create build.arm64/liblcms2.a build/liblcms2.a -output ${USED_PREFIX}/lib/liblcms2.a
  1080. """)
  1081. stage('nv-codec-headers', """
  1082. win:
  1083. git clone -b n12.1.14.0 https://github.com/FFmpeg/nv-codec-headers.git
  1084. """)
  1085. stage('regex', """
  1086. git clone -b boost-1.83.0 https://github.com/boostorg/regex.git
  1087. """)
  1088. stage('ffmpeg', """
  1089. git clone -b n6.1.1 https://github.com/FFmpeg/FFmpeg.git ffmpeg
  1090. cd ffmpeg
  1091. win:
  1092. depends:patches/ffmpeg.patch
  1093. git apply ../patches/ffmpeg.patch
  1094. SET PATH_BACKUP_=%PATH%
  1095. SET PATH=%ROOT_DIR%\\ThirdParty\\msys64\\usr\\bin;%PATH%
  1096. SET CHERE_INVOKING=enabled_from_arguments
  1097. SET MSYS2_PATH_TYPE=inherit
  1098. SET "ARCH_PARAM="
  1099. winarm:
  1100. SET "ARCH_PARAM=--arch=aarch64"
  1101. win:
  1102. depends:patches/build_ffmpeg_win.sh
  1103. bash --login ../patches/build_ffmpeg_win.sh
  1104. SET PATH=%PATH_BACKUP_%
  1105. mac:
  1106. export PKG_CONFIG_PATH=$USED_PREFIX/lib/pkgconfig
  1107. depends:yasm/yasm
  1108. configureFFmpeg() {
  1109. arch=$1
  1110. ./configure --prefix=$USED_PREFIX \
  1111. --enable-cross-compile \
  1112. --target-os=darwin \
  1113. --arch="$arch" \
  1114. --extra-cflags="$MIN_VER -arch $arch $UNGUARDED -DCONFIG_SAFE_BITSTREAM_READER=1 -I$USED_PREFIX/include" \
  1115. --extra-cxxflags="$MIN_VER -arch $arch $UNGUARDED -DCONFIG_SAFE_BITSTREAM_READER=1 -I$USED_PREFIX/include" \
  1116. --extra-ldflags="$MIN_VER -arch $arch $USED_PREFIX/lib/libopus.a -lc++" \
  1117. --disable-programs \
  1118. --disable-doc \
  1119. --disable-network \
  1120. --disable-everything \
  1121. --enable-protocol=file \
  1122. --enable-libdav1d \
  1123. --enable-libopenh264 \
  1124. --enable-libopus \
  1125. --enable-libvpx \
  1126. --enable-hwaccel=h264_videotoolbox \
  1127. --enable-hwaccel=hevc_videotoolbox \
  1128. --enable-hwaccel=mpeg1_videotoolbox \
  1129. --enable-hwaccel=mpeg2_videotoolbox \
  1130. --enable-hwaccel=mpeg4_videotoolbox \
  1131. --enable-decoder=aac \
  1132. --enable-decoder=aac_at \
  1133. --enable-decoder=aac_fixed \
  1134. --enable-decoder=aac_latm \
  1135. --enable-decoder=aasc \
  1136. --enable-decoder=ac3 \
  1137. --enable-decoder=alac \
  1138. --enable-decoder=alac_at \
  1139. --enable-decoder=av1 \
  1140. --enable-decoder=eac3 \
  1141. --enable-decoder=flac \
  1142. --enable-decoder=gif \
  1143. --enable-decoder=h264 \
  1144. --enable-decoder=hevc \
  1145. --enable-decoder=libdav1d \
  1146. --enable-decoder=libvpx_vp8 \
  1147. --enable-decoder=libvpx_vp9 \
  1148. --enable-decoder=mp1 \
  1149. --enable-decoder=mp1float \
  1150. --enable-decoder=mp2 \
  1151. --enable-decoder=mp2float \
  1152. --enable-decoder=mp3 \
  1153. --enable-decoder=mp3adu \
  1154. --enable-decoder=mp3adufloat \
  1155. --enable-decoder=mp3float \
  1156. --enable-decoder=mp3on4 \
  1157. --enable-decoder=mp3on4float \
  1158. --enable-decoder=mpeg4 \
  1159. --enable-decoder=msmpeg4v2 \
  1160. --enable-decoder=msmpeg4v3 \
  1161. --enable-decoder=opus \
  1162. --enable-decoder=pcm_alaw \
  1163. --enable-decoder=pcm_alaw_at \
  1164. --enable-decoder=pcm_f32be \
  1165. --enable-decoder=pcm_f32le \
  1166. --enable-decoder=pcm_f64be \
  1167. --enable-decoder=pcm_f64le \
  1168. --enable-decoder=pcm_lxf \
  1169. --enable-decoder=pcm_mulaw \
  1170. --enable-decoder=pcm_mulaw_at \
  1171. --enable-decoder=pcm_s16be \
  1172. --enable-decoder=pcm_s16be_planar \
  1173. --enable-decoder=pcm_s16le \
  1174. --enable-decoder=pcm_s16le_planar \
  1175. --enable-decoder=pcm_s24be \
  1176. --enable-decoder=pcm_s24daud \
  1177. --enable-decoder=pcm_s24le \
  1178. --enable-decoder=pcm_s24le_planar \
  1179. --enable-decoder=pcm_s32be \
  1180. --enable-decoder=pcm_s32le \
  1181. --enable-decoder=pcm_s32le_planar \
  1182. --enable-decoder=pcm_s64be \
  1183. --enable-decoder=pcm_s64le \
  1184. --enable-decoder=pcm_s8 \
  1185. --enable-decoder=pcm_s8_planar \
  1186. --enable-decoder=pcm_u16be \
  1187. --enable-decoder=pcm_u16le \
  1188. --enable-decoder=pcm_u24be \
  1189. --enable-decoder=pcm_u24le \
  1190. --enable-decoder=pcm_u32be \
  1191. --enable-decoder=pcm_u32le \
  1192. --enable-decoder=pcm_u8 \
  1193. --enable-decoder=vorbis \
  1194. --enable-decoder=vp8 \
  1195. --enable-decoder=wavpack \
  1196. --enable-decoder=wmalossless \
  1197. --enable-decoder=wmapro \
  1198. --enable-decoder=wmav1 \
  1199. --enable-decoder=wmav2 \
  1200. --enable-decoder=wmavoice \
  1201. --enable-encoder=aac \
  1202. --enable-encoder=libopus \
  1203. --enable-encoder=libopenh264 \
  1204. --enable-encoder=pcm_s16le \
  1205. --enable-filter=atempo \
  1206. --enable-parser=aac \
  1207. --enable-parser=aac_latm \
  1208. --enable-parser=flac \
  1209. --enable-parser=gif \
  1210. --enable-parser=h264 \
  1211. --enable-parser=hevc \
  1212. --enable-parser=mpeg4video \
  1213. --enable-parser=mpegaudio \
  1214. --enable-parser=opus \
  1215. --enable-parser=vorbis \
  1216. --enable-demuxer=aac \
  1217. --enable-demuxer=flac \
  1218. --enable-demuxer=gif \
  1219. --enable-demuxer=h264 \
  1220. --enable-demuxer=hevc \
  1221. --enable-demuxer=matroska \
  1222. --enable-demuxer=m4v \
  1223. --enable-demuxer=mov \
  1224. --enable-demuxer=mp3 \
  1225. --enable-demuxer=ogg \
  1226. --enable-demuxer=wav \
  1227. --enable-muxer=mp4 \
  1228. --enable-muxer=ogg \
  1229. --enable-muxer=opus \
  1230. --enable-muxer=wav
  1231. }
  1232. configureFFmpeg arm64
  1233. make $MAKE_THREADS_CNT
  1234. mkdir out.arm64
  1235. mv libavfilter/libavfilter.a out.arm64
  1236. mv libavformat/libavformat.a out.arm64
  1237. mv libavcodec/libavcodec.a out.arm64
  1238. mv libswresample/libswresample.a out.arm64
  1239. mv libswscale/libswscale.a out.arm64
  1240. mv libavutil/libavutil.a out.arm64
  1241. make clean
  1242. configureFFmpeg x86_64
  1243. make $MAKE_THREADS_CNT
  1244. mkdir out.x86_64
  1245. mv libavfilter/libavfilter.a out.x86_64
  1246. mv libavformat/libavformat.a out.x86_64
  1247. mv libavcodec/libavcodec.a out.x86_64
  1248. mv libswresample/libswresample.a out.x86_64
  1249. mv libswscale/libswscale.a out.x86_64
  1250. mv libavutil/libavutil.a out.x86_64
  1251. lipo -create out.arm64/libavfilter.a out.x86_64/libavfilter.a -output libavfilter/libavfilter.a
  1252. lipo -create out.arm64/libavformat.a out.x86_64/libavformat.a -output libavformat/libavformat.a
  1253. lipo -create out.arm64/libavcodec.a out.x86_64/libavcodec.a -output libavcodec/libavcodec.a
  1254. lipo -create out.arm64/libswresample.a out.x86_64/libswresample.a -output libswresample/libswresample.a
  1255. lipo -create out.arm64/libswscale.a out.x86_64/libswscale.a -output libswscale/libswscale.a
  1256. lipo -create out.arm64/libavutil.a out.x86_64/libavutil.a -output libavutil/libavutil.a
  1257. make install
  1258. """)
  1259. stage('openal-soft', """
  1260. git clone https://github.com/telegramdesktop/openal-soft.git
  1261. cd openal-soft
  1262. win:
  1263. git checkout 5e9429354d
  1264. cmake -B build . ^
  1265. -A %WIN32X64% ^
  1266. -D LIBTYPE:STRING=STATIC ^
  1267. -D FORCE_STATIC_VCRT=ON ^
  1268. -D ALSOFT_UTILS=OFF ^
  1269. -D ALSOFT_EXAMPLES=OFF ^
  1270. -D ALSOFT_TESTS=OFF
  1271. cmake --build build --config Debug --parallel
  1272. release:
  1273. cmake --build build --config RelWithDebInfo --parallel
  1274. mac:
  1275. git checkout coreaudio_device_uid
  1276. CFLAGS=$UNGUARDED CPPFLAGS=$UNGUARDED cmake -B build . \\
  1277. -D CMAKE_BUILD_TYPE=RelWithDebInfo \\
  1278. -D CMAKE_INSTALL_PREFIX:PATH=$USED_PREFIX \\
  1279. -D ALSOFT_EXAMPLES=OFF \\
  1280. -D ALSOFT_UTILS=OFF \\
  1281. -D ALSOFT_TESTS=OFF \\
  1282. -D LIBTYPE:STRING=STATIC \\
  1283. -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
  1284. -D CMAKE_OSX_ARCHITECTURES="x86_64;arm64"
  1285. cmake --build build $MAKE_THREADS_CNT
  1286. cmake --install build
  1287. """)
  1288. if 'build-stackwalk' in options:
  1289. stage('stackwalk', """
  1290. mac:
  1291. git clone https://chromium.googlesource.com/breakpad/breakpad stackwalk
  1292. cd stackwalk
  1293. git checkout dfcb7b6799
  1294. depends:patches/breakpad.diff
  1295. git apply ../patches/breakpad.diff
  1296. git clone -b release-1.11.0 https://github.com/google/googletest src/testing
  1297. git clone https://chromium.googlesource.com/linux-syscall-support src/third_party/lss
  1298. cd src/third_party/lss
  1299. git checkout e1e7b0ad8e
  1300. cd ../../build
  1301. PYTHONPATH=$THIRDPARTY_DIR/gyp python3 gyp_breakpad
  1302. cd ../processor
  1303. xcodebuild -project processor.xcodeproj -target minidump_stackwalk -configuration Release build
  1304. """)
  1305. stage('breakpad', """
  1306. git clone https://chromium.googlesource.com/breakpad/breakpad
  1307. cd breakpad
  1308. git checkout dfcb7b6799
  1309. depends:patches/breakpad.diff
  1310. git apply ../patches/breakpad.diff
  1311. git clone -b release-1.11.0 https://github.com/google/googletest src/testing
  1312. win:
  1313. SET "PYTHONUTF8=1"
  1314. SET "FolderPostfix="
  1315. win64:
  1316. SET "FolderPostfix=_x64"
  1317. winarm:
  1318. SET "FolderPostfix=_ARM64"
  1319. win:
  1320. depends:python/Scripts/activate.bat
  1321. %THIRDPARTY_DIR%\\python\\Scripts\\activate.bat
  1322. cd src\\client\\windows
  1323. gyp --no-circular-check breakpad_client.gyp --format=ninja
  1324. cd ..\\..
  1325. ninja -C out/Debug%FolderPostfix% common crash_generation_client exception_handler
  1326. release:
  1327. ninja -C out/Release%FolderPostfix% common crash_generation_client exception_handler
  1328. cd tools\\windows\\dump_syms
  1329. gyp dump_syms.gyp --format=msvs
  1330. msbuild -m dump_syms.vcxproj /property:Configuration=Release /property:Platform="x64"
  1331. win:
  1332. deactivate
  1333. mac:
  1334. git clone https://chromium.googlesource.com/linux-syscall-support src/third_party/lss
  1335. cd src/third_party/lss
  1336. git checkout e1e7b0ad8e
  1337. cd ../../..
  1338. cd src/client/mac
  1339. xcodebuild -project Breakpad.xcodeproj -target Breakpad -configuration Debug build
  1340. release:
  1341. xcodebuild -project Breakpad.xcodeproj -target Breakpad -configuration Release build
  1342. cd ../../tools/mac/dump_syms
  1343. xcodebuild -project dump_syms.xcodeproj -target dump_syms -configuration Release build
  1344. """)
  1345. stage('crashpad', """
  1346. mac:
  1347. git clone https://github.com/desktop-app/crashpad.git
  1348. cd crashpad
  1349. git checkout 3279fae3f0
  1350. git submodule init
  1351. git submodule update third_party/mini_chromium
  1352. ZLIB_PATH=$USED_PREFIX/include
  1353. ZLIB_LIB=$USED_PREFIX/lib/libz.a
  1354. mkdir out
  1355. cd out
  1356. mkdir Debug.x86_64
  1357. cd Debug.x86_64
  1358. cmake -G Ninja \
  1359. -DCMAKE_BUILD_TYPE=Debug \
  1360. -DCMAKE_OSX_ARCHITECTURES=x86_64 \
  1361. -DCRASHPAD_SPECIAL_TARGET=$SPECIAL_TARGET \
  1362. -DCRASHPAD_ZLIB_INCLUDE_PATH=$ZLIB_PATH \
  1363. -DCRASHPAD_ZLIB_LIB_PATH=$ZLIB_LIB ../..
  1364. ninja
  1365. cd ..
  1366. mkdir Debug.arm64
  1367. cd Debug.arm64
  1368. cmake -G Ninja \
  1369. -DCMAKE_BUILD_TYPE=Debug \
  1370. -DCMAKE_OSX_ARCHITECTURES=arm64 \
  1371. -DCRASHPAD_SPECIAL_TARGET=$SPECIAL_TARGET \
  1372. -DCRASHPAD_ZLIB_INCLUDE_PATH=$ZLIB_PATH \
  1373. -DCRASHPAD_ZLIB_LIB_PATH=$ZLIB_LIB ../..
  1374. ninja
  1375. cd ..
  1376. mkdir Debug
  1377. lipo -create Debug.arm64/crashpad_handler Debug.x86_64/crashpad_handler -output Debug/crashpad_handler
  1378. lipo -create Debug.arm64/libcrashpad_client.a Debug.x86_64/libcrashpad_client.a -output Debug/libcrashpad_client.a
  1379. release:
  1380. mkdir Release.x86_64
  1381. cd Release.x86_64
  1382. cmake -G Ninja \
  1383. -DCMAKE_BUILD_TYPE=Release \
  1384. -DCMAKE_OSX_ARCHITECTURES=x86_64 \
  1385. -DCRASHPAD_SPECIAL_TARGET=$SPECIAL_TARGET \
  1386. -DCRASHPAD_ZLIB_INCLUDE_PATH=$ZLIB_PATH \
  1387. -DCRASHPAD_ZLIB_LIB_PATH=$ZLIB_LIB ../..
  1388. ninja
  1389. cd ..
  1390. mkdir Release.arm64
  1391. cd Release.arm64
  1392. cmake -G Ninja \
  1393. -DCMAKE_BUILD_TYPE=Release \
  1394. -DCMAKE_OSX_ARCHITECTURES=arm64 \
  1395. -DCRASHPAD_SPECIAL_TARGET=$SPECIAL_TARGET \
  1396. -DCRASHPAD_ZLIB_INCLUDE_PATH=$ZLIB_PATH \
  1397. -DCRASHPAD_ZLIB_LIB_PATH=$ZLIB_LIB ../..
  1398. ninja
  1399. cd ..
  1400. mkdir Release
  1401. lipo -create Release.arm64/crashpad_handler Release.x86_64/crashpad_handler -output Release/crashpad_handler
  1402. lipo -create Release.arm64/libcrashpad_client.a Release.x86_64/libcrashpad_client.a -output Release/libcrashpad_client.a
  1403. """)
  1404. if qt < '6':
  1405. if win:
  1406. stage('tg_angle', """
  1407. win:
  1408. git clone https://github.com/desktop-app/tg_angle.git
  1409. cd tg_angle
  1410. git checkout e3f59e8d0c
  1411. mkdir out
  1412. cd out
  1413. mkdir Debug
  1414. cd Debug
  1415. cmake -G Ninja ^
  1416. -DCMAKE_BUILD_TYPE=Debug ^
  1417. -DTG_ANGLE_SPECIAL_TARGET=%SPECIAL_TARGET% ^
  1418. -DTG_ANGLE_ZLIB_INCLUDE_PATH=%LIBS_DIR%/zlib ../..
  1419. ninja
  1420. release:
  1421. cd ..
  1422. mkdir Release
  1423. cd Release
  1424. cmake -G Ninja ^
  1425. -DCMAKE_BUILD_TYPE=Release ^
  1426. -DTG_ANGLE_SPECIAL_TARGET=%SPECIAL_TARGET% ^
  1427. -DTG_ANGLE_ZLIB_INCLUDE_PATH=%LIBS_DIR%/zlib ../..
  1428. ninja
  1429. cd ..\\..\\..
  1430. """)
  1431. stage('qt_' + qt, """
  1432. git clone -b v$QT-lts-lgpl https://github.com/qt/qt5.git qt_$QT
  1433. cd qt_$QT
  1434. git submodule update --init --recursive --progress qtbase qtimageformats qtsvg
  1435. depends:patches/qtbase_""" + qt + """/*.patch
  1436. cd qtbase
  1437. win:
  1438. git revert --no-edit 6ad56dce34
  1439. setlocal enabledelayedexpansion
  1440. for /r %%i in (..\\..\\patches\\qtbase_%QT%\\*) do (
  1441. git apply %%i -v
  1442. if errorlevel 1 (
  1443. echo ERROR: Applying patch %%~nxi failed!
  1444. exit /b 1
  1445. )
  1446. )
  1447. cd ..
  1448. SET CONFIGURATIONS=-debug
  1449. release:
  1450. SET CONFIGURATIONS=-debug-and-release
  1451. win:
  1452. """ + removeDir('"%LIBS_DIR%\\Qt-' + qt + '"') + """
  1453. SET ANGLE_DIR=%LIBS_DIR%\\tg_angle
  1454. SET ANGLE_LIBS_DIR=%ANGLE_DIR%\\out
  1455. SET MOZJPEG_DIR=%LIBS_DIR%\\mozjpeg
  1456. SET OPENSSL_DIR=%LIBS_DIR%\\openssl3
  1457. SET OPENSSL_LIBS_DIR=%OPENSSL_DIR%\\out
  1458. SET ZLIB_LIBS_DIR=%LIBS_DIR%\\zlib
  1459. SET WEBP_DIR=%LIBS_DIR%\\libwebp
  1460. configure -prefix "%LIBS_DIR%\\Qt-%QT%" ^
  1461. %CONFIGURATIONS% ^
  1462. -force-debug-info ^
  1463. -opensource ^
  1464. -confirm-license ^
  1465. -static ^
  1466. -static-runtime ^
  1467. -opengl es2 -no-angle ^
  1468. -I "%ANGLE_DIR%\\include" ^
  1469. -D "KHRONOS_STATIC=" ^
  1470. -D "DESKTOP_APP_QT_STATIC_ANGLE=" ^
  1471. QMAKE_LIBS_OPENGL_ES2_DEBUG="%ANGLE_LIBS_DIR%\\Debug\\tg_angle.lib %ZLIB_LIBS_DIR%\\Debug\\zlibstaticd.lib d3d9.lib dxgi.lib dxguid.lib" ^
  1472. QMAKE_LIBS_OPENGL_ES2_RELEASE="%ANGLE_LIBS_DIR%\\Release\\tg_angle.lib %ZLIB_LIBS_DIR%\\Release\\zlibstatic.lib d3d9.lib dxgi.lib dxguid.lib" ^
  1473. -egl ^
  1474. 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" ^
  1475. 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" ^
  1476. -openssl-linked ^
  1477. -I "%OPENSSL_DIR%\\include" ^
  1478. 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" ^
  1479. OPENSSL_LIBS_RELEASE="%OPENSSL_LIBS_DIR%\\libssl.lib %OPENSSL_LIBS_DIR%\\libcrypto.lib Ws2_32.lib Gdi32.lib Advapi32.lib Crypt32.lib User32.lib" ^
  1480. -I "%MOZJPEG_DIR%" ^
  1481. LIBJPEG_LIBS_DEBUG="%MOZJPEG_DIR%\\Debug\\jpeg-static.lib" ^
  1482. LIBJPEG_LIBS_RELEASE="%MOZJPEG_DIR%\\Release\\jpeg-static.lib" ^
  1483. -system-webp ^
  1484. -I "%WEBP_DIR%\\src" ^
  1485. -L "%WEBP_DIR%\\out\\release-static\\$X8664\\lib" ^
  1486. -mp ^
  1487. -no-feature-netlistmgr ^
  1488. -nomake examples ^
  1489. -nomake tests ^
  1490. -platform win32-msvc
  1491. jom -j%NUMBER_OF_PROCESSORS%
  1492. jom -j%NUMBER_OF_PROCESSORS% install
  1493. mac:
  1494. find ../../patches/qtbase_$QT -type f -print0 | sort -z | xargs -0 git apply
  1495. cd ..
  1496. CONFIGURATIONS=-debug
  1497. release:
  1498. CONFIGURATIONS=-debug-and-release
  1499. mac:
  1500. ./configure -prefix "$USED_PREFIX/Qt-$QT" \
  1501. $CONFIGURATIONS \
  1502. -force-debug-info \
  1503. -opensource \
  1504. -confirm-license \
  1505. -static \
  1506. -opengl desktop \
  1507. -no-openssl \
  1508. -securetransport \
  1509. -I "$USED_PREFIX/include" \
  1510. LIBJPEG_LIBS="$USED_PREFIX/lib/libjpeg.a" \
  1511. ZLIB_LIBS="$USED_PREFIX/lib/libz.a" \
  1512. -nomake examples \
  1513. -nomake tests \
  1514. -platform macx-clang
  1515. make $MAKE_THREADS_CNT
  1516. make install
  1517. """)
  1518. else: # qt > '6'
  1519. branch = 'v$QT' + ('-lts-lgpl' if qt < '6.3' else '')
  1520. stage('qt_' + qt, """
  1521. git clone -b """ + branch + """ https://github.com/qt/qt5.git qt_$QT
  1522. cd qt_$QT
  1523. git submodule update --init --recursive --progress qtbase qtimageformats qtsvg
  1524. depends:patches/qtbase_""" + qt + """/*.patch
  1525. cd qtbase
  1526. mac:
  1527. find ../../patches/qtbase_$QT -type f -print0 | sort -z | xargs -0 git apply -v
  1528. cd ..
  1529. sed -i.bak 's/tqtc-//' {qtimageformats,qtsvg}/dependencies.yaml
  1530. CONFIGURATIONS=-debug
  1531. release:
  1532. CONFIGURATIONS=-debug-and-release
  1533. mac:
  1534. ./configure -prefix "$USED_PREFIX/Qt-$QT" \
  1535. $CONFIGURATIONS \
  1536. -force-debug-info \
  1537. -opensource \
  1538. -confirm-license \
  1539. -static \
  1540. -opengl desktop \
  1541. -no-openssl \
  1542. -securetransport \
  1543. -system-webp \
  1544. -I "$USED_PREFIX/include" \
  1545. -no-feature-futimens \
  1546. -no-feature-brotli \
  1547. -nomake examples \
  1548. -nomake tests \
  1549. -platform macx-clang -- \
  1550. -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
  1551. -DCMAKE_PREFIX_PATH="$USED_PREFIX"
  1552. ninja
  1553. ninja install
  1554. win:
  1555. for /r %%i in (..\\..\\patches\\qtbase_%QT%\\*) do git apply %%i -v
  1556. cd ..
  1557. SET CONFIGURATIONS=-debug
  1558. release:
  1559. SET CONFIGURATIONS=-debug-and-release
  1560. win:
  1561. """ + removeDir('"%LIBS_DIR%\\Qt' + qt + '"') + """
  1562. SET MOZJPEG_DIR=%LIBS_DIR%\\mozjpeg
  1563. SET OPENSSL_DIR=%LIBS_DIR%\\openssl3
  1564. SET OPENSSL_LIBS_DIR=%OPENSSL_DIR%\\out
  1565. SET ZLIB_LIBS_DIR=%LIBS_DIR%\\zlib
  1566. SET WEBP_DIR=%LIBS_DIR%\\libwebp
  1567. SET LCMS2_DIR=%LIBS_DIR%\\liblcms2
  1568. configure -prefix "%LIBS_DIR%\\Qt-%QT%" ^
  1569. %CONFIGURATIONS% ^
  1570. -force-debug-info ^
  1571. -opensource ^
  1572. -confirm-license ^
  1573. -static ^
  1574. -static-runtime ^
  1575. -feature-c++20 ^
  1576. -no-sbom ^
  1577. -openssl linked ^
  1578. -system-webp ^
  1579. -system-zlib ^
  1580. -system-libjpeg ^
  1581. -nomake examples ^
  1582. -nomake tests ^
  1583. -platform win32-msvc ^
  1584. -D ZLIB_WINAPI ^
  1585. -- ^
  1586. -D OPENSSL_FOUND=1 ^
  1587. -D OPENSSL_INCLUDE_DIR="%OPENSSL_DIR%\\include" ^
  1588. -D LIB_EAY_DEBUG="%OPENSSL_LIBS_DIR%.dbg\\libcrypto.lib" ^
  1589. -D SSL_EAY_DEBUG="%OPENSSL_LIBS_DIR%.dbg\\libssl.lib" ^
  1590. -D LIB_EAY_RELEASE="%OPENSSL_LIBS_DIR%\\libcrypto.lib" ^
  1591. -D SSL_EAY_RELEASE="%OPENSSL_LIBS_DIR%\\libssl.lib" ^
  1592. -D JPEG_FOUND=1 ^
  1593. -D JPEG_INCLUDE_DIR="%MOZJPEG_DIR%" ^
  1594. -D JPEG_LIBRARY_DEBUG="%MOZJPEG_DIR%\\Debug\\jpeg-static.lib" ^
  1595. -D JPEG_LIBRARY_RELEASE="%MOZJPEG_DIR%\\Release\\jpeg-static.lib" ^
  1596. -D ZLIB_FOUND=1 ^
  1597. -D ZLIB_INCLUDE_DIR="%ZLIB_LIBS_DIR%" ^
  1598. -D ZLIB_LIBRARY_DEBUG="%ZLIB_LIBS_DIR%\\Debug\\zlibstaticd.lib" ^
  1599. -D ZLIB_LIBRARY_RELEASE="%ZLIB_LIBS_DIR%\\Release\\zlibstatic.lib" ^
  1600. -D WebP_INCLUDE_DIR="%WEBP_DIR%\\src" ^
  1601. -D WebP_demux_INCLUDE_DIR="%WEBP_DIR%\\src" ^
  1602. -D WebP_mux_INCLUDE_DIR="%WEBP_DIR%\\src" ^
  1603. -D WebP_LIBRARY="%WEBP_DIR%\\out\\release-static\\$X8664\\lib\\webp.lib" ^
  1604. -D WebP_demux_LIBRARY="%WEBP_DIR%\\out\\release-static\\$X8664\\lib\\webpdemux.lib" ^
  1605. -D WebP_mux_LIBRARY="%WEBP_DIR%\\out\\release-static\\$X8664\\lib\\webpmux.lib" ^
  1606. -D LCMS2_FOUND=1 ^
  1607. -D LCMS2_INCLUDE_DIR="%LCMS2_DIR%\\include" ^
  1608. -D LCMS2_LIBRARIES="%LCMS2_DIR%\\out\\Release\\src\\liblcms2.a"
  1609. cmake --build . --config Debug --parallel
  1610. cmake --install . --config Debug
  1611. cmake --build . --parallel
  1612. cmake --install .
  1613. """)
  1614. stage('tg_owt', """
  1615. git clone https://github.com/desktop-app/tg_owt.git
  1616. cd tg_owt
  1617. git checkout 4a60ce1ab9
  1618. git submodule init
  1619. git submodule update
  1620. win:
  1621. SET MOZJPEG_PATH=$LIBS_DIR/mozjpeg
  1622. SET OPUS_PATH=$USED_PREFIX/include/opus
  1623. SET OPENSSL_PATH=$LIBS_DIR/openssl3/include
  1624. SET LIBVPX_PATH=$USED_PREFIX/include
  1625. SET OPENH264_PATH=$USED_PREFIX/include
  1626. SET FFMPEG_PATH=$LIBS_DIR/ffmpeg
  1627. mkdir out
  1628. cd out
  1629. mkdir Debug
  1630. cd Debug
  1631. cmake -G Ninja \
  1632. -DCMAKE_BUILD_TYPE=Debug \
  1633. -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF \
  1634. -DTG_OWT_SPECIAL_TARGET=$SPECIAL_TARGET \
  1635. -DTG_OWT_LIBJPEG_INCLUDE_PATH=$MOZJPEG_PATH \
  1636. -DTG_OWT_OPENSSL_INCLUDE_PATH=$OPENSSL_PATH \
  1637. -DTG_OWT_OPUS_INCLUDE_PATH=$OPUS_PATH \
  1638. -DTG_OWT_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
  1639. -DTG_OWT_OPENH264_INCLUDE_PATH=$OPENH264_PATH \
  1640. -DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
  1641. ninja
  1642. release:
  1643. cd ..
  1644. mkdir Release
  1645. cd Release
  1646. cmake -G Ninja \
  1647. -DCMAKE_BUILD_TYPE=Release \
  1648. -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF \
  1649. -DTG_OWT_SPECIAL_TARGET=$SPECIAL_TARGET \
  1650. -DTG_OWT_LIBJPEG_INCLUDE_PATH=$MOZJPEG_PATH \
  1651. -DTG_OWT_OPENSSL_INCLUDE_PATH=$OPENSSL_PATH \
  1652. -DTG_OWT_OPUS_INCLUDE_PATH=$OPUS_PATH \
  1653. -DTG_OWT_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
  1654. -DTG_OWT_OPENH264_INCLUDE_PATH=$OPENH264_PATH \
  1655. -DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
  1656. ninja
  1657. mac:
  1658. MOZJPEG_PATH=$USED_PREFIX/include
  1659. OPUS_PATH=$USED_PREFIX/include/opus
  1660. LIBVPX_PATH=$USED_PREFIX/include
  1661. OPENH264_PATH=$USED_PREFIX/include
  1662. FFMPEG_PATH=$USED_PREFIX/include
  1663. mkdir out
  1664. cd out
  1665. mkdir Debug.x86_64
  1666. cd Debug.x86_64
  1667. cmake -G Ninja \
  1668. -DCMAKE_BUILD_TYPE=Debug \
  1669. -DCMAKE_OSX_ARCHITECTURES=x86_64 \
  1670. -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF \
  1671. -DTG_OWT_SPECIAL_TARGET=$SPECIAL_TARGET \
  1672. -DTG_OWT_LIBJPEG_INCLUDE_PATH=$MOZJPEG_PATH \
  1673. -DTG_OWT_OPENSSL_INCLUDE_PATH=$LIBS_DIR/openssl3/include \
  1674. -DTG_OWT_OPUS_INCLUDE_PATH=$OPUS_PATH \
  1675. -DTG_OWT_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
  1676. -DTG_OWT_OPENH264_INCLUDE_PATH=$OPENH264_PATH \
  1677. -DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
  1678. ninja
  1679. cd ..
  1680. mkdir Debug.arm64
  1681. cd Debug.arm64
  1682. cmake -G Ninja \
  1683. -DCMAKE_BUILD_TYPE=Debug \
  1684. -DCMAKE_OSX_ARCHITECTURES=arm64 \
  1685. -DTG_OWT_BUILD_AUDIO_BACKENDS=OFF \
  1686. -DTG_OWT_SPECIAL_TARGET=$SPECIAL_TARGET \
  1687. -DTG_OWT_LIBJPEG_INCLUDE_PATH=$MOZJPEG_PATH \
  1688. -DTG_OWT_OPENSSL_INCLUDE_PATH=$LIBS_DIR/openssl3/include \
  1689. -DTG_OWT_OPUS_INCLUDE_PATH=$OPUS_PATH \
  1690. -DTG_OWT_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
  1691. -DTG_OWT_OPENH264_INCLUDE_PATH=$OPENH264_PATH \
  1692. -DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
  1693. ninja
  1694. cd ..
  1695. mkdir Debug
  1696. lipo -create Debug.arm64/libtg_owt.a Debug.x86_64/libtg_owt.a -output Debug/libtg_owt.a
  1697. release:
  1698. mkdir Release.x86_64
  1699. cd Release.x86_64
  1700. cmake -G Ninja \
  1701. -DCMAKE_BUILD_TYPE=Release \
  1702. -DCMAKE_OSX_ARCHITECTURES=x86_64 \
  1703. -DTG_OWT_SPECIAL_TARGET=$SPECIAL_TARGET \
  1704. -DTG_OWT_LIBJPEG_INCLUDE_PATH=$MOZJPEG_PATH \
  1705. -DTG_OWT_OPENSSL_INCLUDE_PATH=$LIBS_DIR/openssl3/include \
  1706. -DTG_OWT_OPUS_INCLUDE_PATH=$OPUS_PATH \
  1707. -DTG_OWT_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
  1708. -DTG_OWT_OPENH264_INCLUDE_PATH=$OPENH264_PATH \
  1709. -DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
  1710. ninja
  1711. cd ..
  1712. mkdir Release.arm64
  1713. cd Release.arm64
  1714. cmake -G Ninja \
  1715. -DCMAKE_BUILD_TYPE=Release \
  1716. -DCMAKE_OSX_ARCHITECTURES=arm64 \
  1717. -DTG_OWT_SPECIAL_TARGET=$SPECIAL_TARGET \
  1718. -DTG_OWT_LIBJPEG_INCLUDE_PATH=$MOZJPEG_PATH \
  1719. -DTG_OWT_OPENSSL_INCLUDE_PATH=$LIBS_DIR/openssl3/include \
  1720. -DTG_OWT_OPUS_INCLUDE_PATH=$OPUS_PATH \
  1721. -DTG_OWT_LIBVPX_INCLUDE_PATH=$LIBVPX_PATH \
  1722. -DTG_OWT_OPENH264_INCLUDE_PATH=$OPENH264_PATH \
  1723. -DTG_OWT_FFMPEG_INCLUDE_PATH=$FFMPEG_PATH ../..
  1724. ninja
  1725. cd ..
  1726. mkdir Release
  1727. lipo -create Release.arm64/libtg_owt.a Release.x86_64/libtg_owt.a -output Release/libtg_owt.a
  1728. """)
  1729. stage('ada', """
  1730. git clone -b v2.9.0 https://github.com/ada-url/ada.git
  1731. cd ada
  1732. win:
  1733. cmake -B out . ^
  1734. -A %WIN32X64% ^
  1735. -D ADA_TESTING=OFF ^
  1736. -D ADA_TOOLS=OFF ^
  1737. -D CMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded$<$<CONFIG:Debug>:Debug>" ^
  1738. -D CMAKE_C_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
  1739. -D CMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG"
  1740. cmake --build out --config Debug --parallel
  1741. cmake --build out --config Release --parallel
  1742. mac:
  1743. CFLAGS="$UNGUARDED" CPPFLAGS="$UNGUARDED" cmake -B build . \\
  1744. -D ADA_TESTING=OFF \\
  1745. -D ADA_TOOLS=OFF \\
  1746. -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
  1747. -D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
  1748. -D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX
  1749. cmake --build build $MAKE_THREADS_CNT
  1750. cmake --install build
  1751. """)
  1752. stage('protobuf', """
  1753. win:
  1754. git clone --recursive -b v21.9 https://github.com/protocolbuffers/protobuf
  1755. cd protobuf
  1756. git clone https://github.com/abseil/abseil-cpp third_party/abseil-cpp
  1757. cd third_party/abseil-cpp
  1758. git checkout 273292d1cf
  1759. cd ../..
  1760. mkdir build
  1761. cd build
  1762. cmake .. ^
  1763. -A %WIN32X64% ^
  1764. -Dprotobuf_BUILD_TESTS=OFF ^
  1765. -Dprotobuf_BUILD_PROTOBUF_BINARIES=ON ^
  1766. -Dprotobuf_BUILD_LIBPROTOC=ON ^
  1767. -Dprotobuf_WITH_ZLIB_DEFAULT=OFF ^
  1768. -Dprotobuf_DEBUG_POSTFIX=""
  1769. cmake --build . --config Release --parallel
  1770. cmake --build . --config Debug --parallel
  1771. """)
  1772. # mac:
  1773. # git clone --recursive -b v21.9 https://github.com/protocolbuffers/protobuf
  1774. # cd protobuf
  1775. # git clone https://github.com/abseil/abseil-cpp third_party/abseil-cpp
  1776. # cd third_party/abseil-cpp
  1777. # git checkout 273292d1cf
  1778. # cd ../..
  1779. # mkdir build
  1780. # cd build
  1781. # CFLAGS="$UNGUARDED" CPPFLAGS="$UNGUARDED" cmake .. \
  1782. # -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \
  1783. # -Dprotobuf_BUILD_TESTS=OFF \
  1784. # -Dprotobuf_BUILD_PROTOBUF_BINARIES=ON \
  1785. # -Dprotobuf_BUILD_LIBPROTOC=ON \
  1786. # -Dprotobuf_WITH_ZLIB_DEFAULT=OFF
  1787. # cmake --build . $MAKE_THREADS_CNT
  1788. if win:
  1789. currentCodePage = subprocess.run('chcp', capture_output=True, shell=True, text=True, env=modifiedEnv).stdout.strip().split()[-1]
  1790. subprocess.run('chcp 65001 > nul', shell=True, env=modifiedEnv)
  1791. runStages()
  1792. subprocess.run('chcp ' + currentCodePage + ' > nul', shell=True, env=modifiedEnv)
  1793. else:
  1794. runStages()