our_knp/cats-dogs/build.py
int 8f43927575 Initial import: KNP experiments (examples, viz, cats-dogs, reports)
examples/ is based on KasperskyLab/knp at 55470ed6 with local changes
to the mnist-learn altai/blifat models, cuda-backend CMake and model_loader.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:17:15 +03:00

35 lines
1.5 KiB
Python

"""Build an isolated copy using the existing, working KNP compiler/link settings."""
from concurrent.futures import ThreadPoolExecutor
from pathlib import Path
import shlex
import subprocess
source = Path('/mnt/c/KNP/cats-dogs/source')
build = Path('/home/int/run/cats-dogs/build')
build.mkdir(parents=True, exist_ok=True)
old = Path('/home/int/knp-build/examples/mnist-learn')
flags = {}
for line in (old / 'CMakeFiles/mnist_learn_example.dir/flags.make').read_text().splitlines():
if ' = ' in line:
key, value = line.split(' = ', 1)
flags[key] = shlex.split(value)
includes = [x.replace('/mnt/c/KNP/examples/examples/mnist-learn', str(source)) for x in flags['CXX_INCLUDES']]
link = shlex.split((old / 'CMakeFiles/mnist_learn_example.dir/link.txt').read_text())
files = [x for x in link if x.endswith('.cpp.o')]
def compile_file(obj):
relative = obj.split('.dir/', 1)[1][:-2]
target = build / (relative.replace('/', '_') + '.o')
subprocess.run(['/usr/bin/c++', '-std=c++17', *flags['CXX_DEFINES'], *includes,
*flags['CXX_FLAGS'], '-c', str(source / relative), '-o', str(target)], check=True)
print(relative, flush=True)
return str(target)
with ThreadPoolExecutor(max_workers=2) as pool:
objects = list(pool.map(compile_file, files))
tail = link[link.index('-o') + 2:]
tail = [str((old / x).resolve()) if x.startswith('../../') else x for x in tail]
subprocess.run(['/usr/bin/c++', *objects, '-o', str(build / 'cats_dogs'), *tail], cwd=old, check=True)
print(build / 'cats_dogs', flush=True)