32 lines
1.3 KiB
Python
32 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Внутренний сборочный интерфейс sprinter-cc с краткой диагностикой."""
|
|
import argparse
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
from sdbg.build import compile_unit
|
|
|
|
p = argparse.ArgumentParser(description=__doc__)
|
|
p.add_argument('command', choices=['compile'])
|
|
p.add_argument('--plain', action='store_true')
|
|
p.add_argument('--sdcc', type=Path, required=True)
|
|
p.add_argument('--assembler', type=Path, required=True)
|
|
p.add_argument('--source', type=Path, required=True)
|
|
p.add_argument('--output', type=Path, required=True)
|
|
args = sys.argv[1:]
|
|
separator = args.index('--') if '--' in args else len(args)
|
|
a = p.parse_args(args[:separator])
|
|
try:
|
|
compile_unit(a.sdcc, a.assembler, a.source, a.output,
|
|
args[separator + 1:], debug=not a.plain)
|
|
except subprocess.CalledProcessError as error:
|
|
if error.output:
|
|
output = error.output.decode(errors='replace') if isinstance(error.output, bytes) else error.output
|
|
print(output, file=sys.stderr, end='' if output.endswith('\n') else '\n')
|
|
print(f'sdbg: компиляция {a.source.name} не прошла (код {error.returncode})',
|
|
file=sys.stderr)
|
|
sys.exit(1)
|
|
except (ValueError, OSError) as error:
|
|
print('sdbg: ' + str(error), file=sys.stderr)
|
|
sys.exit(1)
|