diff options
Diffstat (limited to 'src_doit')
| -rw-r--r-- | src_doit/__init__.py | 12 | ||||
| -rw-r--r-- | src_doit/c.py | 40 | ||||
| -rw-r--r-- | src_doit/dist/__init__.py | 45 |
3 files changed, 71 insertions, 26 deletions
diff --git a/src_doit/__init__.py b/src_doit/__init__.py index 89ba32c..524fa53 100644 --- a/src_doit/__init__.py +++ b/src_doit/__init__.py @@ -10,18 +10,21 @@ from hat.doit.py import (build_wheel, run_flake8) from hat.doit.js import run_eslint +from .c import * # NOQA from .dist import * # NOQA +from . import c from . import dist __all__ = ['task_clean_all', - 'task_build', + 'task_wheel', 'task_check', 'task_test', 'task_ui', 'task_deps', 'task_format', 'task_json_schema_repo', + *c.__all__, *dist.__all__] @@ -34,6 +37,7 @@ docs_dir = Path('docs') schemas_dir = Path('schemas') node_modules_dir = Path('node_modules') +build_py_dir = build_dir / 'py' ui_dir = src_py_dir / 'opcut/ui' json_schema_repo_path = src_py_dir / 'opcut/json_schema_repo.json' @@ -45,13 +49,13 @@ def task_clean_all(): json_schema_repo_path])]} -def task_build(): - """Build""" +def task_wheel(): + """Build wheel""" def build(): build_wheel( src_dir=src_py_dir, - dst_dir=build_dir, + dst_dir=build_py_dir, name='opcut', description='Cutting stock problem optimizer', url='https://github.com/bozokopic/opcut', diff --git a/src_doit/c.py b/src_doit/c.py new file mode 100644 index 0000000..618dd8d --- /dev/null +++ b/src_doit/c.py @@ -0,0 +1,40 @@ +from pathlib import Path + +from hat.doit.c import (exe_suffix, + CBuild) + + +__all__ = ['task_c', + 'task_c_obj', + 'task_c_dep'] + + +build_dir = Path('build') +src_c_dir = Path('src_c') +deps_dir = Path('deps') + +build_c_dir = build_dir / 'c' +exe_path = build_c_dir / f'opcut-calculate{exe_suffix}' + + +def task_c(): + """Build native app""" + return _build.get_task_exe(exe_path) + + +def task_c_obj(): + """Build .o files""" + yield from _build.get_task_objs() + + +def task_c_dep(): + """Build .d files""" + yield from _build.get_task_deps() + + +_build = CBuild( + src_paths=[*src_c_dir.rglob('*.c')], + src_dir=src_c_dir, + build_dir=build_c_dir, + cc_flags=['-fPIC', '-O2', f'-I{deps_dir / "jsmn"}'], + task_dep=['deps']) diff --git a/src_doit/dist/__init__.py b/src_doit/dist/__init__.py index de8d98c..6c490fa 100644 --- a/src_doit/dist/__init__.py +++ b/src_doit/dist/__init__.py @@ -1,7 +1,6 @@ from pathlib import Path import subprocess import zipfile -import sys from hat.doit import common @@ -16,8 +15,10 @@ package_path = Path(__file__).parent build_dir = Path('build') cache_dir = Path('cache') -build_windows_dir = build_dir / f'opcut-{common.get_version()}-windows' -build_container_dir = build_dir / f'opcut-{common.get_version()}-container' +wheel_dir = build_dir / 'py/dist' +dist_dir = build_dir / 'dist' +dist_windows_dir = dist_dir / f'opcut-{common.get_version()}-windows' +dist_container_dir = dist_dir / f'opcut-{common.get_version()}-container' win_python_url = 'https://www.python.org/ftp/python/3.9.7/python-3.9.7-embed-amd64.zip' # NOQA cache_win_python_path = cache_dir / win_python_url.split('/')[-1] @@ -35,9 +36,9 @@ def task_dist_windows(): """Build windows distribution""" def build(): - common.rm_rf(build_windows_dir) - common.mkdir_p(build_windows_dir.parent) - common.cp_r(package_path / 'windows', build_windows_dir) + common.rm_rf(dist_windows_dir) + common.mkdir_p(dist_windows_dir.parent) + common.cp_r(package_path / 'windows', dist_windows_dir) common.mkdir_p(cache_dir) if not cache_win_python_path.exists(): @@ -46,14 +47,14 @@ def task_dist_windows(): '-L', win_python_url], check=True) - python_dir = build_windows_dir / 'python' + python_dir = dist_windows_dir / 'python' common.mkdir_p(python_dir) with zipfile.ZipFile(str(cache_win_python_path)) as f: f.extractall(str(python_dir)) python_lib_path = python_dir / 'python39.zip' python_lib_dir = python_dir / 'lib' - common.mkdir_p(build_windows_dir / 'python/lib') + common.mkdir_p(dist_windows_dir / 'python/lib') with zipfile.ZipFile(str(python_lib_path)) as f: f.extractall(str(python_lib_dir)) common.rm_rf(python_lib_path) @@ -65,10 +66,10 @@ def task_dist_windows(): 'import site\n' ) - packages_dir = build_windows_dir / 'packages' + packages_dir = dist_windows_dir / 'packages' common.mkdir_p(packages_dir) - packages = [*(str(i) for i in (build_dir / 'dist').glob('*.whl'))] + packages = [*(str(i) for i in wheel_dir.glob('*.whl'))] subprocess.run(['pip', 'install', '-q', '-t', str(packages_dir), '--only-binary=:all:', @@ -76,38 +77,38 @@ def task_dist_windows(): *packages], check=True) - zip_path = build_dir / f'{build_windows_dir.name}.zip' + zip_path = dist_dir / f'{dist_windows_dir.name}.zip' common.rm_rf(zip_path) with zipfile.ZipFile(str(zip_path), 'w', zipfile.ZIP_DEFLATED) as f: - for i in build_windows_dir.rglob('*'): + for i in dist_windows_dir.rglob('*'): if i.is_dir(): continue - f.write(str(i), str(i.relative_to(build_windows_dir))) + f.write(str(i), str(i.relative_to(dist_windows_dir))) return {'actions': [build], - 'task_dep': ['build']} + 'task_dep': ['wheel']} def task_dist_container(): """Build container distribution""" def build(): - common.rm_rf(build_container_dir) - common.mkdir_p(build_container_dir.parent) - common.cp_r(package_path / 'container', build_container_dir) + common.rm_rf(dist_container_dir) + common.mkdir_p(dist_container_dir.parent) + common.cp_r(package_path / 'container', dist_container_dir) - for i in (build_dir / 'dist').glob('*.whl'): - common.cp_r(i, build_container_dir / i.name) + for i in wheel_dir.glob('*.whl'): + common.cp_r(i, dist_container_dir / i.name) name = f'opcut:{common.get_version()}' - img_path = build_dir / f'{build_container_dir.name}.tar' + img_path = dist_dir / f'{dist_container_dir.name}.tar' subprocess.run(['podman', 'build', '-q', '-t', name, '.'], - cwd=str(build_container_dir), + cwd=str(dist_container_dir), check=True) subprocess.run(['podman', 'save', '-q', '-o', str(img_path), name], check=True) return {'actions': [build], - 'task_dep': ['build']} + 'task_dep': ['wheel']} |
