import argparse import sys from pathlib import Path from typing import Sequence, NamedTuple import subprocess HERE = Path(__file__).parent.absolute() TOOLS_DIR = HERE PROJECT_ROOT = HERE.parent PREBUILT_DDS = PROJECT_ROOT / '_prebuilt/dds' class CIOptions(NamedTuple): skip_bootstrap: bool cxx: Path toolchain: str def _do_bootstrap(opts: CIOptions) -> None: print('Running bootstrap') subprocess.check_call([ sys.executable, '-u', str(TOOLS_DIR / 'bootstrap.py'), f'--cxx={opts.cxx}', ]) def main(argv: Sequence[str]) -> int: parser = argparse.ArgumentParser() parser.add_argument( '--skip-bootstrap', action='store_true', help= 'Skip the prebuild-bootstrap step. This requires a _prebuilt/dds to exist!', ) parser.add_argument( '--cxx', help='The name/path of the C++ compiler to use.', required=True) parser.add_argument( '--toolchain', '-T', help='The toolchain to use for the CI process', required=True) args = parser.parse_args(argv) opts = CIOptions( skip_bootstrap=args.skip_bootstrap, cxx=Path(args.cxx), toolchain=args.toolchain) if not opts.skip_bootstrap: _do_bootstrap(opts) subprocess.check_call([ str(PREBUILT_DDS), 'deps', 'build', f'-T{opts.toolchain}', f'--repo-dir={PROJECT_ROOT / "external/repo"}', ]) subprocess.check_call([ str(PREBUILT_DDS), 'build', '--full', f'-T{opts.toolchain}', ]) subprocess.check_call([ sys.executable, '-u', str(TOOLS_DIR / 'test.py'), f'--exe={PROJECT_ROOT / "_build/dds"}', f'-T{opts.toolchain}', ]) return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:]))