dv-flow-mgr 0.0.1.12971126211a1__tar.gz → 0.0.1.12992722023a1__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 (71) hide show
  1. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/PKG-INFO +1 -1
  2. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/docs/Roadmap.md +14 -2
  3. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/pyproject.toml +1 -1
  4. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/package_def.py +19 -9
  5. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/std/fileset.py +7 -0
  6. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/task.py +1 -2
  7. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow_mgr.egg-info/PKG-INFO +1 -1
  8. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/system/test_depends.py +6 -3
  9. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/test_fileset.py +1 -1
  10. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/.github/workflows/ci.yml +0 -0
  11. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/.gitignore +0 -0
  12. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/.vscode/settings.json +0 -0
  13. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/LICENSE +0 -0
  14. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/README.md +0 -0
  15. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/docs/Makefile +0 -0
  16. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/docs/Notes.md +0 -0
  17. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/docs/Stages.md +0 -0
  18. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/docs/TypesAndDefs.md +0 -0
  19. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/docs/conf.py +0 -0
  20. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/docs/index.rst +0 -0
  21. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/docs/intro.rst +0 -0
  22. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/docs/quickstart.rst +0 -0
  23. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/docs/reference.rst +0 -0
  24. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/ivpm.yaml +0 -0
  25. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/setup.cfg +0 -0
  26. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/__init__.py +0 -0
  27. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/__main__.py +0 -0
  28. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/cmds/cmd_run.py +0 -0
  29. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/fileset.py +0 -0
  30. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/fragment_def.py +0 -0
  31. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/package.py +0 -0
  32. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/package_import_spec.py +0 -0
  33. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/pkg_rgy.py +0 -0
  34. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/share/flow.json +0 -0
  35. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/std/flow.dv +0 -0
  36. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/std/message.py +0 -0
  37. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/std/task_null.py +0 -0
  38. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/task_data.py +0 -0
  39. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/task_def.py +0 -0
  40. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/task_graph_builder.py +0 -0
  41. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/task_graph_runner.py +0 -0
  42. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/task_graph_runner_local.py +0 -0
  43. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/task_memento.py +0 -0
  44. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow/mgr/util.py +0 -0
  45. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow_mgr.egg-info/SOURCES.txt +0 -0
  46. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow_mgr.egg-info/dependency_links.txt +0 -0
  47. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow_mgr.egg-info/entry_points.txt +0 -0
  48. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow_mgr.egg-info/requires.txt +0 -0
  49. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/src/dv_flow_mgr.egg-info/top_level.txt +0 -0
  50. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/examples/example1/example1.flow +0 -0
  51. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/system/test_pkg_discovery.py +0 -0
  52. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/system/test_stdlib.py +0 -0
  53. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/__init__.py +0 -0
  54. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/fileset/test1/files1/file1_1.sv +0 -0
  55. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/fileset/test1/files1/file1_2.sv +0 -0
  56. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/fileset/test1/files2/file2_1.sv +0 -0
  57. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/fileset/test1/files2/file2_2.sv +0 -0
  58. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/fileset/test1/flow.dv +0 -0
  59. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/fileset/test1 copy/files1/file1_1.sv +0 -0
  60. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/fileset/test1 copy/files1/file1_2.sv +0 -0
  61. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/fileset/test1 copy/files2/file2_1.sv +0 -0
  62. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/fileset/test1 copy/files2/file2_2.sv +0 -0
  63. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/fileset/test1 copy/test1.dfs +0 -0
  64. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/proj1/proj1.dfs +0 -0
  65. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/proj2/proj2.dfs +0 -0
  66. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/data/proj3/proj3.dfs +0 -0
  67. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/test_data_merge.py +0 -0
  68. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/test_pyclass.py +0 -0
  69. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/test_smoke copy.sav +0 -0
  70. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/tests/unit/test_smoke.py +0 -0
  71. {dv_flow_mgr-0.0.1.12971126211a1 → dv_flow_mgr-0.0.1.12992722023a1}/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.12971126211a1
3
+ Version: 0.0.1.12992722023a1
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
@@ -53,9 +53,10 @@ are evaluated.
53
53
 
54
54
  ## 1.0.0
55
55
  - Std
56
- - Null (combine dependencies, set variables). Implements tasks that do not specify 'uses'
56
+ * Null (combine dependencies, set variables). Implements tasks that do not specify 'uses'
57
57
  - Exec
58
- - FileSet
58
+ - Make
59
+ * FileSet
59
60
  - PyClass - implement a task as a Python class (load from a module)
60
61
 
61
62
  - HdlSim
@@ -112,3 +113,14 @@ are evaluated.
112
113
  - Extensible -- by users and organizations
113
114
  - Implementation independent (not tied to a specific implementation language)
114
115
 
116
+
117
+ # TODO
118
+ - Need some way to signal rough core consumption. Challenge is to complete
119
+ build as quickly as possible via coarse and fine-grained parallelism
120
+ - Parallelism tends to follow exponential curve. High parallelism early ; Low later
121
+ - Reasoning about curves may guide resource over-subscription
122
+ - Each task needs memory hints / requirements as well
123
+ - Dependency strategy for Exec/Make
124
+ - Specify dependency file created by task
125
+ - When the timestamp is updated, task is known to have been rebuilt
126
+ -
@@ -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.12971126211a1"
8
+ version = "0.0.1.12992722023a1"
9
9
  dependencies = [
10
10
  'pydantic',
11
11
  'pyyaml',
@@ -119,6 +119,7 @@ class PackageDef(BaseModel):
119
119
  return ctor_t
120
120
 
121
121
  def handleParams(self, task, ctor_t):
122
+ self._log.debug("--> handleParams %s params=%s" % (task.name, str(task.params)))
122
123
 
123
124
  if task.params is not None and len(task.params) > 0:
124
125
  decl_params = False
@@ -131,18 +132,21 @@ class PackageDef(BaseModel):
131
132
  # ctor_t.params.update(task.params)
132
133
 
133
134
  for value in task.params.values():
134
- if "type" in value:
135
+ self._log.debug("value: %s" % str(value))
136
+ if type(value) == dict and "type" in value.keys():
135
137
  decl_params = True
136
138
  break
137
139
 
140
+ field_m = {}
141
+ # First, add parameters from the base class
142
+ base_o = ctor_t.mkParams()
143
+ for fname,info in base_o.model_fields.items():
144
+ self._log.debug("Field: %s (%s)" % (fname, info.default))
145
+ field_m[fname] = (info.annotation, info.default)
146
+
138
147
  if decl_params:
148
+ self._log.debug("Type declares new parameters")
139
149
  # We need to combine base parameters with new parameters
140
- field_m = {}
141
- # First, add parameters from the base class
142
- base_o = ctor_t.mkParams()
143
- for fname,info in base_o.model_fields.items():
144
- self._log.debug("Field: %s (%s)" % (fname, info.default))
145
- field_m[fname] = (info.annotation, info.default)
146
150
  ptype_m = {
147
151
  "str" : str,
148
152
  "int" : int,
@@ -159,6 +163,7 @@ class PackageDef(BaseModel):
159
163
  }
160
164
  for p in task.params.keys():
161
165
  param = task.params[p]
166
+ self._log.debug("param: %s" % str(param))
162
167
  if type(param) == dict and "type" in param.keys():
163
168
  ptype_s = param["type"]
164
169
  if ptype_s not in ptype_m.keys():
@@ -190,6 +195,7 @@ class PackageDef(BaseModel):
190
195
  uses=ctor_t,
191
196
  params_ctor=param_t)
192
197
  else: # no new parameters declared
198
+ self._log.debug("Type only overrides existing parameters")
193
199
  for p in task.params.keys():
194
200
  param = task.params[p]
195
201
  if p not in field_m.keys():
@@ -202,12 +208,15 @@ class PackageDef(BaseModel):
202
208
  raise Exception("No value specified for param %s: %s" % (
203
209
  p, str(param)))
204
210
  field_m[p] = (field_m[p][0], value)
205
- ctor_t.params[p] = value
211
+ self._log.debug("Set param=%s to %s" % (p, str(value)))
212
+ ctor_t.params[p] = value
213
+
214
+ self._log.debug("<-- handleParams %s" % task.name)
206
215
 
207
216
  return ctor_t
208
217
 
209
218
  def mkTaskCtor(self, session, task, srcdir, tasks_m) -> TaskCtor:
210
- self._log.debug("--> %s::mkTaskCtor %s" % (self.name, task.name))
219
+ self._log.debug("--> %s::mkTaskCtor %s (srcdir: %s)" % (self.name, task.name, srcdir))
211
220
  ctor_t : TaskCtor = None
212
221
 
213
222
  # Determine the implementation constructor first
@@ -260,6 +269,7 @@ class PackageDef(BaseModel):
260
269
  srcdir=srcdir)
261
270
 
262
271
  ctor_t = self.handleParams(task, ctor_t)
272
+ ctor_t.depends.extend(task.depends)
263
273
 
264
274
  self._log.debug("<-- %s::mkTaskCtor %s" % (self.name, task.name))
265
275
  return ctor_t
@@ -26,6 +26,9 @@ class FileSet(Task):
26
26
  ex_memento = self.getMemento(TaskFileSetMemento)
27
27
  memento = TaskFileSetMemento()
28
28
 
29
+ self._log.debug("ex_memento: %s" % str(ex_memento))
30
+ self._log.debug("params: %s" % str(self.params))
31
+
29
32
  if self.params is not None:
30
33
  glob_root = os.path.join(self.srcdir, self.params.base)
31
34
  glob_root = glob_root.strip()
@@ -33,6 +36,8 @@ class FileSet(Task):
33
36
  if glob_root[-1] == '/' or glob_root == '\\':
34
37
  glob_root = glob_root[:-1]
35
38
 
39
+ self._log.debug("glob_root: %s" % glob_root)
40
+
36
41
  fs = _FileSet(
37
42
  src=self.name,
38
43
  type=self.params.type,
@@ -45,6 +50,8 @@ class FileSet(Task):
45
50
  for pattern in self.params.include:
46
51
  included_files.extend(glob.glob(os.path.join(glob_root, pattern), recursive=False))
47
52
 
53
+ self._log.debug("included_files: %s" % str(included_files))
54
+
48
55
  for file in included_files:
49
56
  if not any(glob.fnmatch.fnmatch(file, os.path.join(glob_root, pattern)) for pattern in self.params.exclude):
50
57
  memento.files.append((file, os.path.getmtime(os.path.join(glob_root, file))))
@@ -123,7 +123,7 @@ class TaskCtorCls(TaskCtor):
123
123
  _log : ClassVar = logging.getLogger("TaskCtorCls")
124
124
 
125
125
  def mkTask(self, name : str, depends, rundir, srcdir=None, params=None):
126
- self._log.debug("--> %s::mkTask (%s)" % (self.name, str(self.task_ctor)))
126
+ self._log.debug("--> %s::mkTask (%s) srcdir=%s" % (self.name, str(self.task_ctor), srcdir))
127
127
 
128
128
  if srcdir is None:
129
129
  srcdir = self.srcdir
@@ -137,7 +137,6 @@ class TaskCtorCls(TaskCtor):
137
137
  rundir=rundir,
138
138
  srcdir=srcdir,
139
139
  params=params)
140
- ret.srcdir = self.srcdir
141
140
 
142
141
  # Update parameters on the way back
143
142
  self.applyParams(ret.params)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.12971126211a1
3
+ Version: 0.0.1.12992722023a1
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
@@ -12,13 +12,13 @@ package:
12
12
 
13
13
  tasks:
14
14
  - name: files
15
- uses: std.FileSet
15
+ uses: std.Message
16
16
  with:
17
- type: textFiles
18
- include: "*.txt"
17
+ msg: "Running Files"
19
18
 
20
19
  - name: print
21
20
  uses: std.Message
21
+ needs: [files]
22
22
  with:
23
23
  msg: "Running Print"
24
24
  """
@@ -44,6 +44,9 @@ package:
44
44
 
45
45
  output = output.decode()
46
46
 
47
+ print("output: %s" % output)
48
+
49
+ assert output.find("Running Files") != -1
47
50
  assert output.find("Running Print") != -1
48
51
 
49
52
  def test_seq_2(tmpdir):
@@ -39,7 +39,7 @@ def test_fileset_1(tmpdir):
39
39
  out = asyncio.run(runner.run(task))
40
40
  assert out.changed == False
41
41
 
42
- # Now, add a files
42
+ # Now, add a file
43
43
  with open(os.path.join(tmpdir, "test1", "files1", "file1_3.sv"), "w") as f:
44
44
  f.write("// file1_3.sv\n")
45
45