openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.5 KiB

2 months ago
#!/usr/bin/env python3
2 months ago
import importlib
import shutil
2 months ago
import sys
2 months ago
import tempfile
2 months ago
import zipapp
from argparse import ArgumentParser
2 months ago
from pathlib import Path
2 months ago
from openpilot.common.basedir import BASEDIR
2 months ago
2 months ago
EXTS = ['.png', '.py']
2 months ago
INTERPRETER = '/usr/bin/env python3'
2 months ago
2 months ago
def copy(src, dest, follow_symlinks=False):
if any(src.endswith(ext) for ext in EXTS):
shutil.copy2(src, dest, follow_symlinks=follow_symlinks)
2 months ago
if __name__ == '__main__':
2 months ago
parser = ArgumentParser(prog='pack.py', description="package openpilot's raylib code into a portable executable", epilog='comma.ai')
2 months ago
parser.add_argument('-e', '--entrypoint', help="function to call in module, default is 'main'", default='main')
2 months ago
parser.add_argument('-o', '--output', help='output file')
2 months ago
parser.add_argument('module', help="the module to target, e.g. 'openpilot.system.ui.spinner'")
2 months ago
args = parser.parse_args()
2 months ago
2 months ago
if not args.output:
args.output = args.module
2 months ago
try:
mod = importlib.import_module(args.module)
except ModuleNotFoundError:
print(f'{args.module} not found, typo?')
sys.exit(1)
2 months ago
if not hasattr(mod, args.entrypoint):
print(f'{args.module} does not have a {args.entrypoint}() function, typo?')
2 months ago
sys.exit(1)
with tempfile.TemporaryDirectory() as tmp:
2 months ago
shutil.copytree(BASEDIR + '/openpilot', tmp, symlinks=False, dirs_exist_ok=True, copy_function=copy)
2 months ago
entry = f'{args.module}:{args.entrypoint}'
zipapp.create_archive(tmp, target=args.output, interpreter=INTERPRETER, main=entry)
2 months ago
print(f'created executable {Path(args.output).resolve()}')