dv-flow-mgr 0.0.1.12703462647a1__py3-none-any.whl → 0.0.1.12750690879a1__py3-none-any.whl

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.
@@ -22,14 +22,14 @@
22
22
  import pydantic.dataclasses as dc
23
23
  import json
24
24
  from pydantic import BaseModel
25
- from typing import Any, Dict, List
25
+ from typing import Any, Dict, List, Union
26
26
  from .package import Package
27
27
  from .package_import_spec import PackageImportSpec
28
28
  from .task_def import TaskDef
29
29
 
30
30
  class FragmentDef(BaseModel):
31
31
  tasks : List[TaskDef] = dc.Field(default_factory=list)
32
- imports : List[(str|PackageImportSpec)] = dc.Field(default_factory=list, alias="imports")
32
+ imports : List[Union[str,PackageImportSpec]] = dc.Field(default_factory=list, alias="imports")
33
33
  fragments: List[str] = dc.Field(default_factory=list)
34
34
 
35
35
  basedir : str = None
dv_flow_mgr/session.py CHANGED
@@ -196,7 +196,7 @@ class Session(object):
196
196
  for file in os.listdir(dir):
197
197
  if os.path.isdir(os.path.join(dir, file)):
198
198
  self._load_fragment_dir(pkg, os.path.join(dir, file), file_s)
199
- elif os.path.isfile(os.path.join(dir, file)):
199
+ elif os.path.isfile(os.path.join(dir, file)) and file == "flow.yaml":
200
200
  self._load_fragment_file(pkg, os.path.join(dir, file), file_s)
201
201
 
202
202
  def _load_fragment_file(self, pkg : PackageDef, file : str, file_s : List[str]):
@@ -207,6 +207,7 @@ class Session(object):
207
207
 
208
208
  with open(file, "r") as fp:
209
209
  doc = yaml.load(fp, Loader=yaml.FullLoader)
210
+ print("doc: %s" % str(doc), flush=True)
210
211
  if "fragment" in doc.keys():
211
212
  # Merge the package definition
212
213
  frag = FragmentDef(**(doc["fragment"]))
dv_flow_mgr/task.py CHANGED
@@ -152,15 +152,35 @@ class Task(object):
152
152
  awaitables = [dep.waitOutput() for dep in self.depends]
153
153
  deps_o = await asyncio.gather(*awaitables)
154
154
 
155
+ # Merge filesets. A fileset with the same
155
156
  print("deps_o: %s" % str(deps_o))
156
157
 
158
+ # First, merge the dep maps of all the inputs
159
+ deps_m = self.depends[0].output.deps.copy()
160
+ for deps in map(lambda d: d.deps, self.depends[1:]):
161
+ for k,v in deps.items():
162
+ if k in deps_m:
163
+ deps_m[k].add(v)
164
+ else:
165
+ deps_m[k] = set(v)
166
+
167
+ print("deps_m: %s" % str(deps_m))
168
+
157
169
  # Merge the output of the dependencies into a single input data
158
170
  # if len(self.depends) > 1:
159
171
  # raise Exception("TODO: handle >1 inputs")
160
172
 
173
+ # Now that we have a clean input object, we need
174
+ # to build the dep map
175
+
161
176
  input = self.depends[0].output.copy()
162
177
  else:
163
178
  input = TaskData()
179
+
180
+
181
+
182
+ # Mark the source of this data as being this task
183
+ input.src = self.name
164
184
 
165
185
  if not os.path.isdir(self.rundir):
166
186
  os.makedirs(self.rundir)
@@ -196,7 +216,7 @@ class Task(object):
196
216
 
197
217
  def setOutput(self, output : TaskData):
198
218
  self.output_set = True
199
- output.task_id = self.task_id
219
+ output.src = self.name
200
220
  self.output = output
201
221
  self.output_ev.set()
202
222
 
dv_flow_mgr/task_data.py CHANGED
@@ -19,15 +19,31 @@
19
19
  #* Author:
20
20
  #*
21
21
  #****************************************************************************
22
+ import enum
22
23
  import pydantic.dataclasses as dc
23
24
  from pydantic import BaseModel
24
25
  from typing import Any, Dict, Set, List, Tuple
25
26
  from .fileset import FileSet
26
27
 
28
+ class TaskDataParamOpE(enum.Enum):
29
+ Set = enum.auto()
30
+ Append = enum.auto()
31
+ Prepend = enum.auto()
32
+ PathAppend = enum.auto()
33
+ PathPrepend = enum.auto()
34
+
35
+ class TaskDataParamOp(BaseModel):
36
+ op : TaskDataParamOpE
37
+ value : Any
38
+
39
+ class TaskDataParam(BaseModel):
40
+ value : Any
41
+ ops : List[TaskDataParamOp] = dc.Field(default_factory=list)
42
+
27
43
  class TaskData(BaseModel):
28
- task_id : int = -1
44
+ src : str = None
29
45
  params : Dict[str,Any] = dc.Field(default_factory=dict)
30
- deps : List['TaskData'] = dc.Field(default_factory=list)
46
+ deps : Dict[str,Set[str]] = dc.Field(default_factory=dict)
31
47
  changed : bool = False
32
48
 
33
49
  def hasParam(self, name: str) -> bool:
@@ -40,11 +56,12 @@ class TaskData(BaseModel):
40
56
  self.params[name] = value
41
57
 
42
58
  def addFileSet(self, fs : FileSet):
59
+ fs.src = self.src
43
60
  if "filesets" not in self.params:
44
61
  self.params["filesets"] = []
45
62
  self.params["filesets"].append(fs)
46
63
 
47
- def getFileSets(self, type : (str|Set[str])=None) -> List[FileSet]:
64
+ def getFileSets(self, type=None) -> List[FileSet]:
48
65
  ret = []
49
66
 
50
67
  if "filesets" in self.params:
@@ -56,7 +73,7 @@ class TaskData(BaseModel):
56
73
 
57
74
  def copy(self) -> 'TaskData':
58
75
  ret = TaskData()
59
- ret.task_id = self.task_id
76
+ ret.src = self.src
60
77
  ret.params = self.params.copy()
61
78
  for d in self.deps:
62
79
  ret.deps.append(d.clone())
dv_flow_mgr/task_def.py CHANGED
@@ -21,7 +21,7 @@
21
21
  #****************************************************************************
22
22
  import pydantic.dataclasses as dc
23
23
  from pydantic import BaseModel
24
- from typing import Any, Dict, List, Tuple
24
+ from typing import Any, Dict, List, Union, Tuple
25
25
  from .task import Task
26
26
 
27
27
  @dc.dataclass
@@ -32,8 +32,8 @@ class TaskSpec(object):
32
32
  class TaskDef(BaseModel):
33
33
  """Holds definition information (ie the YAML view) for a task"""
34
34
  name : str
35
- type : (str|TaskSpec) = dc.Field(default_factory=list)
36
- depends : List[(str|TaskSpec)] = dc.Field(default_factory=list, alias="needs")
35
+ type : Union[str,TaskSpec] = dc.Field(default_factory=list)
36
+ depends : List[Union[str,TaskSpec]] = dc.Field(default_factory=list, alias="needs")
37
37
  params: Dict[str,Any] = dc.Field(default_factory=dict, alias="with")
38
38
 
39
39
  def copy(self) -> 'TaskDef':
@@ -15,7 +15,7 @@ from svdep import FileCollection, TaskCheckUpToDate, TaskBuildFileCollection
15
15
  class TaskVcsSimImage(VlTaskSimImage):
16
16
 
17
17
  def getRefTime(self):
18
- if os.path.isdir(os.path.join(self.rundir, 'simv')):
18
+ if os.path.isfile(os.path.join(self.rundir, 'simv')):
19
19
  return os.path.getmtime(os.path.join(self.rundir, 'simv'))
20
20
  else:
21
21
  raise Exception
@@ -11,7 +11,7 @@ from typing import List, Tuple
11
11
  class TaskVcsSimRun(Task):
12
12
 
13
13
  async def run(self, input : TaskData) -> TaskData:
14
- vl_fileset = input.getFileSets("simBinary")
14
+ vl_fileset = input.getFileSets("simDir")
15
15
 
16
16
  build_dir = vl_fileset[0].basedir
17
17
 
@@ -3,6 +3,7 @@ import fnmatch
3
3
  import dataclasses
4
4
  import shutil
5
5
  import pydantic.dataclasses as dc
6
+ from toposort import toposort
6
7
  from ....fileset import FileSet
7
8
  from ....package import TaskCtor
8
9
  from ....task import Task, TaskParams, TaskCtorT
@@ -31,9 +32,8 @@ class VlTaskSimImage(Task):
31
32
  incdirs = []
32
33
  memento = ex_memento
33
34
 
34
- vl_filesets = input.getFileSets(("verilogSource", "systemVerilogSource"))
35
- for file in vl_filesets[0].files:
36
- files.append(os.path.join(vl_filesets[0].basedir, file))
35
+
36
+ self._gatherSvSources(files, incdirs, input)
37
37
 
38
38
  if not in_changed:
39
39
  try:
@@ -61,6 +61,30 @@ class VlTaskSimImage(Task):
61
61
 
62
62
  self.setMemento(memento)
63
63
  return output
64
+
65
+ def _gatherSvSources(self, files, incdirs, input):
66
+ # input must represent dependencies for all tasks related to filesets
67
+ # references must support transitivity
68
+
69
+ vl_filesets = input.getFileSets(("verilogSource", "systemVerilogSource"))
70
+ fs_tasks = [fs.src for fs in vl_filesets]
71
+
72
+ # Want dependencies just for the filesets
73
+ # - key is the task associated with a filelist
74
+ # - deps is the dep-set of the on the incoming
75
+ #
76
+ # -> Send output set of dependencies
77
+ # - Task -> deps map
78
+ # "task" : ["dep1", "dep2", ...],
79
+ # "task2" :
80
+ # - All tasks are represented in the map
81
+ # -> Assume projects will often flatten before exporting
82
+
83
+ # Sort the deps
84
+ order = list(toposort(input.deps))
85
+
86
+ print("order: %s" % str(order))
87
+
64
88
 
65
89
 
66
90
  class VlTaskSimImageParams(TaskParams):
@@ -11,7 +11,7 @@ from typing import List, Tuple
11
11
  class TaskVltSimRun(Task):
12
12
 
13
13
  async def run(self, input : TaskData) -> TaskData:
14
- vl_fileset = input.getFileSets("simBinary")
14
+ vl_fileset = input.getFileSets("simDir")
15
15
 
16
16
  build_dir = vl_fileset[0].basedir
17
17
 
@@ -12,8 +12,9 @@ from typing import List, Tuple
12
12
  class TaskFileSet(Task):
13
13
 
14
14
  async def run(self, input : TaskData) -> TaskData:
15
- print("run: %s: base=%s type=%s include=%s" % (
15
+ print("TaskFileSet run: %s: basedir=%s, base=%s type=%s include=%s" % (
16
16
  self.name,
17
+ self.basedir,
17
18
  self.params.base, self.params.type, str(self.params.include)
18
19
  ))
19
20
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.12703462647a1
3
+ Version: 0.0.1.12750690879a1
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
@@ -2,15 +2,15 @@ dv_flow_mgr/__init__.py,sha256=GLfYxZONxJNNUplfmlsXrcycJ2VhTc8gvXN6qdlH7kg,97
2
2
  dv_flow_mgr/__main__.py,sha256=4xXA4XCqLELlIak6bs-H6rRHp2URucipHPvCiVdR01c,513
3
3
  dv_flow_mgr/fileset.py,sha256=89knoTNsDF85QJwrctLiM6ryqHS1oxW25Gd5jgpX-IQ,1123
4
4
  dv_flow_mgr/flow.py,sha256=UdgJOIqBS2wTRpO-sNWCCqO9oQFxDfGPGVD0r42aTrA,1562
5
- dv_flow_mgr/fragment_def.py,sha256=_c-mmfNjdKctSK6Omnm-3otx9-fIX8hw8yh06vSlozE,1540
5
+ dv_flow_mgr/fragment_def.py,sha256=p5i6ONtBWlDHTBFsduu3Z36_76Bn8PCIylp_xoZ7jfQ,1552
6
6
  dv_flow_mgr/package.py,sha256=jFhXgKDEYSRfs_VRUjKY4C7KScQfmrNLEXQgtWKaBfI,2767
7
7
  dv_flow_mgr/package_def.py,sha256=Js8bZj8bSmJQ6Wk9xAhIBJScNGJOHNbXNhw_zkDVU5w,3834
8
8
  dv_flow_mgr/package_import_spec.py,sha256=bStPa727wAKMcixydVY1Ht6ylzXsSMy2K31HWPXhc9k,921
9
9
  dv_flow_mgr/parameters.py,sha256=kUjRss5VtMMz5eL3-Z_M6BS-wFs7MhQu3ANXO54UPo0,896
10
- dv_flow_mgr/session.py,sha256=M13VGMMrB9Eko0T4dEpqBuTHxsVpaKTNw5JhGRc2rTA,10726
11
- dv_flow_mgr/task.py,sha256=Lx5eXIlP-m1yseVLh_1_p7Gy1dj36zU3dSH7LyE6JaY,7316
12
- dv_flow_mgr/task_data.py,sha256=tIerZoe8yt1ig1m6IPQ6N64SI2rQlUoVY5oOjFYICws,2590
13
- dv_flow_mgr/task_def.py,sha256=qFB_koWGgziH_Uh96dqFjRI38dY6s2OTDpn-uEwYtUo,1515
10
+ dv_flow_mgr/session.py,sha256=sYRyTojsfPFZOGu4mz9yNTX6ESNye0i5szgj5QVE-Pk,10802
11
+ dv_flow_mgr/task.py,sha256=ZTuSulc6lBLcTByD6gQjmbaJqqL1c1mlVtP84iLrLbE,7973
12
+ dv_flow_mgr/task_data.py,sha256=32rgwPxSthIjNbzbXK2sZoPo6Jedio_L54Qibu65fYk,2962
13
+ dv_flow_mgr/task_def.py,sha256=Yjw1Q-bnbi7Ct5X1PriMMNJ6i4TBVFWrO8BTnipz9hg,1532
14
14
  dv_flow_mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
15
15
  dv_flow_mgr/cmds/cmd_run.py,sha256=ii48_jdxCxh4MOJCeKKX66Cui4IvQQy_RrJEIixsph8,733
16
16
  dv_flow_mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
@@ -20,20 +20,20 @@ dv_flow_mgr/tasklib/hdl/sim/mti_task_sim_run.py,sha256=QkKYOs0OhQ42F5bUbfCsezE4L
20
20
  dv_flow_mgr/tasklib/hdl/sim/pkg_hdl_sim.py,sha256=hPk5w7dN3Uq3mLRBNCEtE7jkLavi2MAczJlle_xGoQ8,166
21
21
  dv_flow_mgr/tasklib/hdl/sim/task_sim_image.py,sha256=DOSxzH-0EZQZlm-EwSq1q7_nz_yru6al36Ji1Q6z5F4,375
22
22
  dv_flow_mgr/tasklib/hdl/sim/vcs_pkg.py,sha256=65W8NP54_EdtHo6lsmCejT8diPvizT9e3AjjTXJC_u0,413
23
- dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_image.py,sha256=HlUMT185VQ_j70C6WTV1GXTXIGgIFb7xelU23jrTVj4,1492
24
- dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_run.py,sha256=DDwq_iiv8TYpXMf59pZuttG75lI71CjbNKwAXbCAlBA,1194
25
- dv_flow_mgr/tasklib/hdl/sim/vl_task_sim_image.py,sha256=2UD2IXSP9Kf-g4J7bMTSR2cgx761DtXzMVIkIPQpLdg,2268
23
+ dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_image.py,sha256=SAZYYCZ_ZO80Vfxx7sGcGeKBz00XsoaAjsUwRnCd7eo,1493
24
+ dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_run.py,sha256=LYjf--RZH2Jh4-c_4hZOo2uLO3Tu_waGQRXmlDggmZs,1191
25
+ dv_flow_mgr/tasklib/hdl/sim/vl_task_sim_image.py,sha256=QJP1gjclUSYfq-B9NIA46C1E1zTfOiqsmGjXtsu4BY8,3017
26
26
  dv_flow_mgr/tasklib/hdl/sim/vlt_pkg.py,sha256=Pu9mWAR93kiTNT8GZJrX-VDjMOfr9P5ddcSPt1BElQQ,413
27
27
  dv_flow_mgr/tasklib/hdl/sim/vlt_task_sim_image.py,sha256=9RDJ3r37C4tA4PIa7tDUYYgRpIh19up-Y9HTOwKxr0I,1564
28
- dv_flow_mgr/tasklib/hdl/sim/vlt_task_sim_run.py,sha256=Qhufu0NjzPLev-4BjWBftfgA0sogeXpTmygapRrk9VM,1202
28
+ dv_flow_mgr/tasklib/hdl/sim/vlt_task_sim_run.py,sha256=RxPaE1RSRi2QdadrZp2J3lZqTt6EnLjCnk__uPAV6_o,1199
29
29
  dv_flow_mgr/tasklib/std/fileset.py,sha256=u88qjKQpIip_eETk0k6J1AGxk9blKlqAqYinHGKwco8,61
30
30
  dv_flow_mgr/tasklib/std/pkg_std.py,sha256=ERDd515qtetQaldk9opUH19MyNwo8nP4-GLz-ke-5gE,370
31
31
  dv_flow_mgr/tasklib/std/std.dfs,sha256=An2NUvvWaR9xI4U-kRQ4NN6U-GhX6GQmd3mNyRkW4NQ,68
32
- dv_flow_mgr/tasklib/std/task_fileset.py,sha256=ISsI-g8v8bKYYQiGd1Ju2VlyEOxEziNgXtssEEmnu6s,3095
32
+ dv_flow_mgr/tasklib/std/task_fileset.py,sha256=ZBG4e2gsTsRMsr_FhhzIoE3J7YwYQZ9HigpxpGePd74,3145
33
33
  dv_flow_mgr/tasklib/std/task_null.py,sha256=bQH1HN4r-TtdUaJxfnmvoqKZSY4MWO48eK7z_yngdNU,599
34
- dv_flow_mgr-0.0.1.12703462647a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
35
- dv_flow_mgr-0.0.1.12703462647a1.dist-info/METADATA,sha256=inlwQMpO8cBPHqz-NZoEYrmDDp2Sd57rkkz2hIBz68c,13252
36
- dv_flow_mgr-0.0.1.12703462647a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
37
- dv_flow_mgr-0.0.1.12703462647a1.dist-info/entry_points.txt,sha256=VHxIon5AeHCtK73fYb1veDImAGwv76hrtBiuZePmzhI,51
38
- dv_flow_mgr-0.0.1.12703462647a1.dist-info/top_level.txt,sha256=FGuhGIxN1FgD_YBkPcDq05fTxZcwaX9G_O8FFBvrTk4,12
39
- dv_flow_mgr-0.0.1.12703462647a1.dist-info/RECORD,,
34
+ dv_flow_mgr-0.0.1.12750690879a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
35
+ dv_flow_mgr-0.0.1.12750690879a1.dist-info/METADATA,sha256=UUW3UD8jLxZaP3Ou2R5gJXdH5muYOCaJMch8gYCnWgk,13252
36
+ dv_flow_mgr-0.0.1.12750690879a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
37
+ dv_flow_mgr-0.0.1.12750690879a1.dist-info/entry_points.txt,sha256=VHxIon5AeHCtK73fYb1veDImAGwv76hrtBiuZePmzhI,51
38
+ dv_flow_mgr-0.0.1.12750690879a1.dist-info/top_level.txt,sha256=FGuhGIxN1FgD_YBkPcDq05fTxZcwaX9G_O8FFBvrTk4,12
39
+ dv_flow_mgr-0.0.1.12750690879a1.dist-info/RECORD,,