aboutsummaryrefslogtreecommitdiff
path: root/src_doit
diff options
context:
space:
mode:
Diffstat (limited to 'src_doit')
-rw-r--r--src_doit/__init__.py12
-rw-r--r--src_doit/c.py40
-rw-r--r--src_doit/dist/__init__.py45
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']}