dv-flow-mgr 0.0.1.13824531439a1__tar.gz → 0.0.1.13862522550a1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/PKG-INFO +1 -1
  2. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/pyproject.toml +1 -1
  3. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/pkg_rgy.py +7 -0
  4. dv_flow_mgr-0.0.1.13862522550a1/src/dv_flow/mgr/std/create_file.py +61 -0
  5. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/std/flow.dv +16 -0
  6. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_graph_builder.py +28 -1
  7. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_node.py +33 -25
  8. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_runner.py +5 -1
  9. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow_mgr.egg-info/PKG-INFO +1 -1
  10. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow_mgr.egg-info/SOURCES.txt +1 -0
  11. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/.github/workflows/ci.yml +0 -0
  12. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/.gitignore +0 -0
  13. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/.vscode/settings.json +0 -0
  14. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/LICENSE +0 -0
  15. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/README.md +0 -0
  16. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/KeyArchitecture.md +0 -0
  17. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/Makefile +0 -0
  18. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/Notes.md +0 -0
  19. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/Roadmap.md +0 -0
  20. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/RundirLayout.md +0 -0
  21. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/Stages.md +0 -0
  22. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/Steps.md +0 -0
  23. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/Tasks.md +0 -0
  24. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/TypesAndDefs.md +0 -0
  25. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/Usecases.md +0 -0
  26. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/conf.py +0 -0
  27. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/index.rst +0 -0
  28. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/intro.rst +0 -0
  29. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/quickstart.rst +0 -0
  30. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/docs/reference.rst +0 -0
  31. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/fwperiph_dma.pss +0 -0
  32. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/ivpm.yaml +0 -0
  33. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/setup.cfg +0 -0
  34. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/__init__.py +0 -0
  35. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/__main__.py +0 -0
  36. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/cmds/cmd_run.py +0 -0
  37. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/eval_jq.py +0 -0
  38. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/expr_eval.py +0 -0
  39. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/expr_parser.py +0 -0
  40. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/fileset.py +0 -0
  41. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/fragment_def.py +0 -0
  42. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/out +0 -0
  43. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/package.py +0 -0
  44. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/package_def.py +0 -0
  45. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/package_import_spec.py +0 -0
  46. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/param.py +0 -0
  47. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/param_def.py +0 -0
  48. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/param_ref_eval.py +0 -0
  49. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/parsetab.py +0 -0
  50. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/share/flow.json +0 -0
  51. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/std/exec.py +0 -0
  52. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/std/fileset.py +0 -0
  53. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/std/message.py +0 -0
  54. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/std/task_null.py +0 -0
  55. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task.py +0 -0
  56. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_ctor.py +0 -0
  57. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_data.py +0 -0
  58. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_def.py +0 -0
  59. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_exec_data.py +0 -0
  60. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_graph_runner.py +0 -0
  61. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_graph_runner_local.py +0 -0
  62. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_impl_data.py +0 -0
  63. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_listener_log.py +0 -0
  64. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_memento.py +0 -0
  65. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_output.py +0 -0
  66. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/task_params_ctor.py +0 -0
  67. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/type.py +0 -0
  68. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/type_def.py +0 -0
  69. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow/mgr/util.py +0 -0
  70. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow_mgr.egg-info/dependency_links.txt +0 -0
  71. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow_mgr.egg-info/entry_points.txt +0 -0
  72. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow_mgr.egg-info/requires.txt +0 -0
  73. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/src/dv_flow_mgr.egg-info/top_level.txt +0 -0
  74. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/examples/example1/example1.flow +0 -0
  75. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/system/test_depends.py +0 -0
  76. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/system/test_pkg_discovery.py +0 -0
  77. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/system/test_stdlib.py +0 -0
  78. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/__init__.py +0 -0
  79. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/fileset/test1/files1/file1_1.sv +0 -0
  80. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/fileset/test1/files1/file1_2.sv +0 -0
  81. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/fileset/test1/files2/file2_1.sv +0 -0
  82. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/fileset/test1/files2/file2_2.sv +0 -0
  83. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/fileset/test1/flow.dv +0 -0
  84. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/fileset/test1 copy/files1/file1_1.sv +0 -0
  85. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/fileset/test1 copy/files1/file1_2.sv +0 -0
  86. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/fileset/test1 copy/files2/file2_1.sv +0 -0
  87. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/fileset/test1 copy/files2/file2_2.sv +0 -0
  88. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/fileset/test1 copy/test1.dfs +0 -0
  89. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/proj1/proj1.dfs +0 -0
  90. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/proj2/proj2.dfs +0 -0
  91. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/data/proj3/proj3.dfs +0 -0
  92. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_data_merge.py +0 -0
  93. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_expr_eval.py +0 -0
  94. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_expr_parser.py +0 -0
  95. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_fileset.py +0 -0
  96. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_imports.py +0 -0
  97. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_markers.py +0 -0
  98. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_parse.py +0 -0
  99. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_pyclass.py +0 -0
  100. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_pytask_smoke.py +0 -0
  101. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_smoke copy.sav +0 -0
  102. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_smoke.py +0 -0
  103. {dv_flow_mgr-0.0.1.13824531439a1 → dv_flow_mgr-0.0.1.13862522550a1}/tests/unit/test_stdlib.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13824531439a1
3
+ Version: 0.0.1.13862522550a1
4
4
  Summary: DV Flow Manager is a build system for silicon design
5
5
  Author-email: Matthew Ballance <matt.ballance@gmail.com>
6
6
  License: Apache License
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "dv-flow-mgr"
8
- version = "0.0.1.13824531439a1"
8
+ version = "0.0.1.13862522550a1"
9
9
  dependencies = [
10
10
  'jq',
11
11
  'pydantic',
@@ -32,6 +32,13 @@ class PkgRgy(object):
32
32
  self._pkgpath = []
33
33
  self._pkg_m : Dict[str, Tuple[str,PackageDef]] = {}
34
34
  self._log = logging.getLogger(type(self).__name__)
35
+ self._override_m : Dict[str,str] = {}
36
+
37
+ def addOverride(self, key, value):
38
+ self._override_m[key] = value
39
+
40
+ def getOverrides(self):
41
+ return self._override_m
35
42
 
36
43
  def hasPackage(self, name, search_path=True):
37
44
  if name in self._pkg_m.keys():
@@ -0,0 +1,61 @@
1
+ import os
2
+ import hashlib
3
+ import logging
4
+ import pydantic.dataclasses as dc
5
+ from pydantic import BaseModel
6
+ from typing import ClassVar, List, Tuple
7
+ from dv_flow.mgr import TaskDataResult
8
+ from dv_flow.mgr import FileSet as _FileSet
9
+
10
+ class TaskCreateFileMemento(BaseModel):
11
+ name : str = ""
12
+ hash : str = ""
13
+
14
+ _log = logging.getLogger("CreateFile")
15
+
16
+ async def CreateFile(runner, input) -> TaskDataResult:
17
+ _log.debug("CreateFile run: %s: rundir=%s, type=%s filename=%s content=%s" % (
18
+ input.name,
19
+ input.rundir,
20
+ input.params.type, input.params.filename, input.params.content))
21
+
22
+ #
23
+ try:
24
+ ex_memento = TaskCreateFileMemento(**input.memento) if input.memento is not None else None
25
+ except Exception as e:
26
+ _log.error("Failed to load memento: %s" % str(e))
27
+ ex_memento = None
28
+ memento = TaskCreateFileMemento()
29
+
30
+ _log.debug("ex_memento: %s" % str(ex_memento))
31
+ _log.debug("params: %s" % str(input.params))
32
+
33
+ changed = (input.changed or ex_memento is None)
34
+
35
+ if not changed and ex_memento is not None:
36
+ if ex_memento.name != input.params.filename:
37
+ changed = True
38
+ else:
39
+ new_hash = hashlib.md5(input.params.content.encode()).hexdigest()
40
+ changed = ex_memento.hash != new_hash
41
+
42
+ if changed:
43
+ filename = os.path.join(input.rundir, input.params.filename)
44
+ os.makedirs(os.path.dirname(filename), exist_ok=True)
45
+
46
+ with open(filename, "w") as fp:
47
+ fp.write(input.params.content)
48
+
49
+ fs = _FileSet(
50
+ filetype=input.params.type,
51
+ src=input.name,
52
+ basedir=input.rundir,
53
+ files=[input.params.filename])
54
+
55
+ _log.debug("<-- FileSet(%s) changed=%s" % (input.name, changed))
56
+
57
+ return TaskDataResult(
58
+ memento=memento,
59
+ changed=changed,
60
+ output=[fs]
61
+ )
@@ -29,6 +29,22 @@ package:
29
29
  exclude:
30
30
  type: str
31
31
  value: ""
32
+ - name: CreateFile
33
+ pytask: dv_flow.mgr.std.create_file.CreateFile
34
+ passthrough: true
35
+ doc: |
36
+ Creates one or more files in the run directory from
37
+ literal content in the .dv file. Outputs a fileset
38
+ referencing all the created files.
39
+ with:
40
+ type:
41
+ desc: Content-type to use for the fileset
42
+ type: str
43
+ value: ""
44
+ filename:
45
+ type: str
46
+ content:
47
+ type: str
32
48
  - name: Exec
33
49
  pytask: dv_flow.mgr.std.exec.Exec
34
50
  with:
@@ -39,16 +39,20 @@ class TaskGraphBuilder(object):
39
39
  _pkg_m : Dict[PackageSpec,Package] = dc.field(default_factory=dict)
40
40
  _pkg_spec_s : List[PackageDef] = dc.field(default_factory=list)
41
41
  _task_m : Dict['TaskSpec',Task] = dc.field(default_factory=dict)
42
+ _override_m : Dict[str,str] = dc.field(default_factory=dict)
42
43
  _logger : logging.Logger = None
43
44
 
44
45
  def __post_init__(self):
45
46
  if self.pkg_rgy is None:
46
47
  self.pkg_rgy = PkgRgy.inst().copy()
47
48
 
49
+ # Initialize the overrides from the global registry
50
+ self._override_m.update(self.pkg_rgy.getOverrides())
51
+
48
52
  self._logger = logging.getLogger(type(self).__name__)
49
- self._logger.debug("TaskGraphBuilder: root_pkg: %s" % str(self.root_pkg))
50
53
 
51
54
  if self.root_pkg is not None:
55
+ self._logger.debug("TaskGraphBuilder: root_pkg: %s" % str(self.root_pkg))
52
56
 
53
57
  # Register package definitions found during loading
54
58
  visited = set()
@@ -61,6 +65,14 @@ class TaskGraphBuilder(object):
61
65
  # Allows us to find ourselves
62
66
  self._pkg_m[PackageSpec(self.root_pkg.name)] = pkg
63
67
 
68
+ def loadPkg(self, pkgfile : str):
69
+ pkg = PackageDef.load(pkgfile)
70
+ visited = set()
71
+ self._registerPackages(pkg, visited)
72
+
73
+ def addOverride(self, key : str, val : str):
74
+ self._override_m[key] = val
75
+
64
76
  def _registerPackages(self, pkg : PackageDef, visited):
65
77
  self._logger.debug("Packages: %s" % str(pkg))
66
78
  if pkg.name not in visited:
@@ -210,6 +222,21 @@ class TaskGraphBuilder(object):
210
222
 
211
223
  def mkTaskNode(self, task_t, name=None, srcdir=None, needs=None, **kwargs):
212
224
  self._logger.debug("--> mkTaskNode: %s" % task_t)
225
+
226
+ if task_t in self._override_m.keys():
227
+ self._logger.debug("Overriding task %s with %s" % (task_t, self._override_m[task_t]))
228
+ task_t = self._override_m[task_t]
229
+ else:
230
+ dot_idx = task_t.rfind(".")
231
+ if dot_idx != -1:
232
+ pkg = task_t[0:dot_idx]
233
+ tname = task_t[dot_idx+1:]
234
+
235
+ if pkg in self._override_m.keys():
236
+ self._logger.debug("Overriding package %s with %s" % (pkg, self._override_m[pkg]))
237
+ task_t = self._override_m[pkg] + "." + tname
238
+
239
+
213
240
  ctor = self.getTaskCtor(task_t)
214
241
  self._logger.debug("ctor: %s" % ctor.name)
215
242
  params = ctor.mkTaskParams(kwargs)
@@ -58,8 +58,8 @@ class TaskNode(object):
58
58
  if subdep not in dep_m.keys():
59
59
  dep_m[subdep] = []
60
60
  dep_m[subdep].extend(need.output.dep_m[subdep])
61
+ self._log.debug("input dep_m: %s %s" % (self.name, str(dep_m)))
61
62
 
62
- self._log.debug("input dep_m: %s" % str(dep_m))
63
63
  sorted = toposort.toposort(dep_m)
64
64
 
65
65
  in_params_m = {}
@@ -127,10 +127,12 @@ class TaskNode(object):
127
127
 
128
128
  self._log.debug("output[1]: %s" % str(output))
129
129
 
130
+ # Pass-through all dependencies
131
+ # Add an entry for ourselves
132
+ dep_m[self.name] = list(need.name for need in self.needs)
133
+
130
134
  if self.passthrough:
131
135
  self._log.debug("passthrough: %s" % self.name)
132
- # Add an entry for ourselves
133
- dep_m[self.name] = list(need.name for need in self.needs)
134
136
 
135
137
  if self.consumes is None and len(self.consumes):
136
138
  self._log.debug("Propagating all input parameters to output")
@@ -167,11 +169,11 @@ class TaskNode(object):
167
169
  else:
168
170
  self._log.debug("non-passthrough: %s (only local outputs propagated)" % self.name)
169
171
  # empty dependency map
170
- dep_m = {
171
- self.name : []
172
- }
172
+ # dep_m = {
173
+ # self.name : []
174
+ # }
173
175
 
174
- self._log.debug("output dep_m: %s" % str(dep_m))
176
+ self._log.debug("output dep_m: %s %s" % (self.name, str(dep_m)))
175
177
  self._log.debug("output[2]: %s" % str(output))
176
178
 
177
179
  # Store the result
@@ -187,6 +189,30 @@ class TaskNode(object):
187
189
 
188
190
  def __hash__(self):
189
191
  return id(self)
192
+
193
+ def _matches(self, params, consumes):
194
+ """Determines if a parameter set matches a set of consumed parameters"""
195
+ self._log.debug("--> _matches: %s params=%s consumes=%s" % (
196
+ self.name, str(params), str(consumes)))
197
+ consumed = False
198
+ for c in consumes:
199
+ # All matching attribute keys must have same value
200
+ match = False
201
+ for k,v in c.items():
202
+ self._log.debug("k,v: %s,%s - hasattr=%s" % (k,v, hasattr(params, k)))
203
+ if hasattr(params, k):
204
+ self._log.debug("getattr=%s v=%s" % (getattr(params, k), v))
205
+ if getattr(params, k) == v:
206
+ match = True
207
+ else:
208
+ match = False
209
+ break
210
+ if match:
211
+ consumed = True
212
+ break
213
+ self._log.debug("<-- _matches: %s %s" % (self.name, consumed))
214
+ return consumed
215
+
190
216
 
191
217
 
192
218
  @dc.dataclass
@@ -353,24 +379,6 @@ class TaskNodeCtorWrapper(TaskNodeCtor):
353
379
  setattr(obj, key, value)
354
380
  return obj
355
381
 
356
- def _matches(self, params, consumes):
357
- """Determines if a parameter set matches a set of consumed parameters"""
358
- consumed = False
359
- for c in consumes:
360
- # All matching attribute keys must have same value
361
- match = False
362
- for k,v in c.items():
363
- if hasattr(params, k):
364
- if getattr(params, k) != v:
365
- match = True
366
- else:
367
- match = False
368
- break
369
- if match:
370
- consumed = True
371
- break
372
- return consumed
373
-
374
382
  def task(paramT,passthrough=False,consumes=None):
375
383
  """Decorator to wrap a task method as a TaskNodeCtor"""
376
384
  def wrapper(T):
@@ -38,13 +38,17 @@ class TaskRunner(object):
38
38
 
39
39
  @dc.dataclass
40
40
  class TaskSetRunner(TaskRunner):
41
- nproc : int = 8
41
+ nproc : int = -1
42
42
  status : int = 0
43
43
 
44
44
  _anon_tid : int = 1
45
45
 
46
46
  _log : ClassVar = logging.getLogger("TaskSetRunner")
47
47
 
48
+ def __post_init__(self):
49
+ if self.nproc == -1:
50
+ self.nproc = os.cpu_count()
51
+
48
52
  async def run(self, task : Union[TaskNode,List[TaskNode]]):
49
53
  # Ensure that the rundir exists or can be created
50
54
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13824531439a1
3
+ Version: 0.0.1.13862522550a1
4
4
  Summary: DV Flow Manager is a build system for silicon design
5
5
  Author-email: Matthew Ballance <matt.ballance@gmail.com>
6
6
  License: Apache License
@@ -57,6 +57,7 @@ src/dv_flow/mgr/type_def.py
57
57
  src/dv_flow/mgr/util.py
58
58
  src/dv_flow/mgr/cmds/cmd_run.py
59
59
  src/dv_flow/mgr/share/flow.json
60
+ src/dv_flow/mgr/std/create_file.py
60
61
  src/dv_flow/mgr/std/exec.py
61
62
  src/dv_flow/mgr/std/fileset.py
62
63
  src/dv_flow/mgr/std/flow.dv