|
- 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:]))
|