Files
darling-lol/tools/build-riot-server-runtime.py
T
lucannez64andClaude Opus 5.5 4370f375cd Cut Darling overhead in League fights and add passive match capture
Game process (ARAM Hexgate: 84 -> 127 FPS average, slowest stretches ~110):
- Local pthread mutexes, condition variables and Mach semaphores are on by
  default in the game process only, with /tmp/rclol-no-local-* opt-outs.
  The main thread's darlingserver waits fell from 1.36 to 0.10 ms per frame.
- Local semaphores: the count and the slot generation change in one
  compare-exchange, a destroy leaves a negative marker, the table is reset
  after fork, and names the table did not create go to the server.
- Metal: drop identical re-binds (keyed on the Indium object, depth-stencil
  retained), pass blit resources by reference, and stop resetting vertex
  descriptors twice.
- Core isolation of the main thread is opt-in (/tmp/rclol-core-isolation);
  it lowered FPS in its only match.
- Optimized libc/libc++/Foundation overlays, AVX2 string primitives, real CPU
  topology and their installers and offline checks.

Tools and docs:
- tools/riot-match-capture: passive /proc sampler, user-space IP profiler and
  reports, plus a comparison against the game's netstats.
- tools/riot-lsem-model and tools/riot-metal-bind-model: host models that
  extract the shipped code and check it.
- tools/install-riot-metal-pair.sh installs Metal and Indium together.
- Status, setup, testing and troubleshooting docs updated with the measured
  matches and the switch table; manifest file counts match the patches.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 16:48:34 +02:00

21 lines
1.3 KiB
Python

#!/usr/bin/env python3
"""Rebuild changed IPC code into owned outputs, preserving configured objects."""
from pathlib import Path
import shlex,subprocess
project=Path(__file__).resolve().parent.parent
build=project/'build/darling-src/build/src/external/darlingserver'
flags={}
for line in (build/'CMakeFiles/darlingserver.dir/flags.make').read_text().splitlines():
if line.startswith('CXX_') and ' = ' in line:
k,v=line.split(' = ',1);flags[k]=shlex.split(v)
link=shlex.split((build/'CMakeFiles/darlingserver.dir/link.txt').read_text())
for name in ['call','message','darlingserver','process','server']:
obj=project/f'build/riot-server-{name}.o'
subprocess.run(['clang++',*flags['CXX_DEFINES'],*flags['CXX_INCLUDES'],*flags['CXX_FLAGS'],'-c',str(project/f'build/darling-src/src/external/darlingserver/src/{name}.cpp'),'-o',str(obj)],check=True)
link[link.index(f'CMakeFiles/darlingserver.dir/src/{name}.cpp.o')]=str(obj)
link[link.index('-o')+1]=str(project/'build/riot-darlingserver')
subprocess.run(link,cwd=build,check=True)
subprocess.run(['clang++',*flags['CXX_DEFINES'],*flags['CXX_INCLUDES'],*flags['CXX_FLAGS'],
'-D_GNU_SOURCE','-Wno-macro-redefined',str(project/'tools/riot-host-message-check.cpp'),
str(project/'build/riot-server-message.o'),'-o',str(project/'build/riot-host-message-check')],check=True)