siliconcompiler 0.34.2__py3-none-any.whl → 0.34.3__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.
- siliconcompiler/__init__.py +12 -5
- siliconcompiler/__main__.py +1 -7
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/apps/_common.py +104 -23
- siliconcompiler/apps/sc.py +4 -8
- siliconcompiler/apps/sc_dashboard.py +6 -4
- siliconcompiler/apps/sc_install.py +10 -6
- siliconcompiler/apps/sc_issue.py +7 -5
- siliconcompiler/apps/sc_remote.py +1 -1
- siliconcompiler/apps/sc_server.py +9 -14
- siliconcompiler/apps/sc_show.py +6 -5
- siliconcompiler/apps/smake.py +130 -94
- siliconcompiler/apps/utils/replay.py +4 -7
- siliconcompiler/apps/utils/summarize.py +3 -5
- siliconcompiler/asic.py +420 -0
- siliconcompiler/checklist.py +25 -2
- siliconcompiler/cmdlineschema.py +534 -0
- siliconcompiler/constraints/asic_component.py +2 -2
- siliconcompiler/constraints/asic_pins.py +2 -2
- siliconcompiler/constraints/asic_timing.py +3 -3
- siliconcompiler/core.py +7 -32
- siliconcompiler/data/templates/tcl/manifest.tcl.j2 +8 -0
- siliconcompiler/dependencyschema.py +89 -31
- siliconcompiler/design.py +176 -207
- siliconcompiler/filesetschema.py +250 -0
- siliconcompiler/flowgraph.py +274 -95
- siliconcompiler/fpga.py +124 -1
- siliconcompiler/library.py +218 -20
- siliconcompiler/metric.py +233 -20
- siliconcompiler/package/__init__.py +271 -50
- siliconcompiler/package/git.py +92 -16
- siliconcompiler/package/github.py +108 -12
- siliconcompiler/package/https.py +79 -16
- siliconcompiler/packageschema.py +88 -7
- siliconcompiler/pathschema.py +31 -2
- siliconcompiler/pdk.py +566 -1
- siliconcompiler/project.py +1095 -94
- siliconcompiler/record.py +38 -1
- siliconcompiler/remote/__init__.py +5 -2
- siliconcompiler/remote/client.py +11 -6
- siliconcompiler/remote/schema.py +5 -23
- siliconcompiler/remote/server.py +41 -54
- siliconcompiler/report/__init__.py +3 -3
- siliconcompiler/report/dashboard/__init__.py +48 -14
- siliconcompiler/report/dashboard/cli/__init__.py +99 -21
- siliconcompiler/report/dashboard/cli/board.py +364 -179
- siliconcompiler/report/dashboard/web/__init__.py +90 -12
- siliconcompiler/report/dashboard/web/components/__init__.py +219 -240
- siliconcompiler/report/dashboard/web/components/flowgraph.py +49 -26
- siliconcompiler/report/dashboard/web/components/graph.py +139 -100
- siliconcompiler/report/dashboard/web/layouts/__init__.py +29 -1
- siliconcompiler/report/dashboard/web/layouts/_common.py +38 -2
- siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph.py +39 -26
- siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph_node_tab.py +50 -50
- siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph_sac_tabs.py +49 -46
- siliconcompiler/report/dashboard/web/state.py +141 -14
- siliconcompiler/report/dashboard/web/utils/__init__.py +79 -16
- siliconcompiler/report/dashboard/web/utils/file_utils.py +74 -11
- siliconcompiler/report/dashboard/web/viewer.py +25 -1
- siliconcompiler/report/report.py +5 -2
- siliconcompiler/report/summary_image.py +29 -11
- siliconcompiler/scheduler/__init__.py +9 -1
- siliconcompiler/scheduler/docker.py +79 -1
- siliconcompiler/scheduler/run_node.py +35 -19
- siliconcompiler/scheduler/scheduler.py +208 -24
- siliconcompiler/scheduler/schedulernode.py +372 -46
- siliconcompiler/scheduler/send_messages.py +77 -29
- siliconcompiler/scheduler/slurm.py +76 -12
- siliconcompiler/scheduler/taskscheduler.py +140 -20
- siliconcompiler/schema/__init__.py +0 -2
- siliconcompiler/schema/baseschema.py +194 -38
- siliconcompiler/schema/journal.py +7 -4
- siliconcompiler/schema/namedschema.py +16 -10
- siliconcompiler/schema/parameter.py +55 -9
- siliconcompiler/schema/parametervalue.py +60 -0
- siliconcompiler/schema/safeschema.py +25 -2
- siliconcompiler/schema/schema_cfg.py +5 -5
- siliconcompiler/schema/utils.py +2 -2
- siliconcompiler/schema_obj.py +20 -3
- siliconcompiler/tool.py +979 -302
- siliconcompiler/tools/bambu/__init__.py +41 -0
- siliconcompiler/tools/builtin/concatenate.py +2 -2
- siliconcompiler/tools/builtin/minimum.py +2 -1
- siliconcompiler/tools/builtin/mux.py +2 -1
- siliconcompiler/tools/builtin/nop.py +2 -1
- siliconcompiler/tools/builtin/verify.py +2 -1
- siliconcompiler/tools/klayout/__init__.py +95 -0
- siliconcompiler/tools/openroad/__init__.py +289 -0
- siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +3 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +7 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +8 -4
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +9 -5
- siliconcompiler/tools/openroad/scripts/common/write_images.tcl +5 -1
- siliconcompiler/tools/slang/__init__.py +1 -1
- siliconcompiler/tools/slang/elaborate.py +2 -1
- siliconcompiler/tools/vivado/scripts/sc_run.tcl +1 -1
- siliconcompiler/tools/vivado/scripts/sc_syn_fpga.tcl +8 -1
- siliconcompiler/tools/vivado/syn_fpga.py +6 -0
- siliconcompiler/tools/vivado/vivado.py +35 -2
- siliconcompiler/tools/vpr/__init__.py +150 -0
- siliconcompiler/tools/yosys/__init__.py +369 -1
- siliconcompiler/tools/yosys/scripts/procs.tcl +0 -1
- siliconcompiler/toolscripts/_tools.json +5 -10
- siliconcompiler/utils/__init__.py +66 -0
- siliconcompiler/utils/flowgraph.py +2 -2
- siliconcompiler/utils/issue.py +2 -1
- siliconcompiler/utils/logging.py +14 -0
- siliconcompiler/utils/multiprocessing.py +256 -0
- siliconcompiler/utils/showtools.py +10 -0
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/METADATA +5 -5
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/RECORD +115 -118
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/entry_points.txt +3 -0
- siliconcompiler/schema/cmdlineschema.py +0 -250
- siliconcompiler/toolscripts/rhel8/install-slang.sh +0 -40
- siliconcompiler/toolscripts/rhel9/install-slang.sh +0 -40
- siliconcompiler/toolscripts/ubuntu20/install-slang.sh +0 -47
- siliconcompiler/toolscripts/ubuntu22/install-slang.sh +0 -37
- siliconcompiler/toolscripts/ubuntu24/install-slang.sh +0 -37
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/WHEEL +0 -0
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/licenses/LICENSE +0 -0
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/top_level.txt +0 -0
siliconcompiler/packageschema.py
CHANGED
|
@@ -11,7 +11,13 @@ from siliconcompiler.package import Resolver
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class PackageSchema(PathSchema):
|
|
14
|
+
"""
|
|
15
|
+
A class for managing package-related schema data.
|
|
16
|
+
"""
|
|
14
17
|
def __init__(self):
|
|
18
|
+
"""
|
|
19
|
+
Initializes a PackageSchema object.
|
|
20
|
+
"""
|
|
15
21
|
super().__init__()
|
|
16
22
|
|
|
17
23
|
schema_package(self)
|
|
@@ -26,11 +32,13 @@ class PackageSchema(PathSchema):
|
|
|
26
32
|
return self.set("package", "description", trim(desc))
|
|
27
33
|
|
|
28
34
|
def get_description(self) -> str:
|
|
29
|
-
"""
|
|
35
|
+
"""
|
|
36
|
+
Get the description of the package.
|
|
30
37
|
|
|
31
38
|
Returns:
|
|
32
39
|
str: The description string.
|
|
33
40
|
"""
|
|
41
|
+
|
|
34
42
|
return self.get("package", "description")
|
|
35
43
|
|
|
36
44
|
def set_version(self, version: str):
|
|
@@ -51,6 +59,24 @@ class PackageSchema(PathSchema):
|
|
|
51
59
|
"""
|
|
52
60
|
return self.get("package", "version")
|
|
53
61
|
|
|
62
|
+
def set_vendor(self, vendor: str):
|
|
63
|
+
"""
|
|
64
|
+
Set the vendor of the package.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
vendor (str): The vendor name.
|
|
68
|
+
"""
|
|
69
|
+
return self.set("package", "vendor", vendor)
|
|
70
|
+
|
|
71
|
+
def get_vendor(self) -> str:
|
|
72
|
+
"""
|
|
73
|
+
Get the vendor of the package.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
str: The vendor name.
|
|
77
|
+
"""
|
|
78
|
+
return self.get("package", "vendor")
|
|
79
|
+
|
|
54
80
|
def add_license(self, name: str):
|
|
55
81
|
"""
|
|
56
82
|
Add a license name to the package.
|
|
@@ -77,12 +103,18 @@ class PackageSchema(PathSchema):
|
|
|
77
103
|
def get_license(self) -> List[str]:
|
|
78
104
|
"""
|
|
79
105
|
Get a list of license names associated with the package.
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
List[str]: A list of license names.
|
|
80
109
|
"""
|
|
81
110
|
return self.get("package", "license")
|
|
82
111
|
|
|
83
112
|
def get_licensefile(self) -> List[str]:
|
|
84
113
|
"""
|
|
85
114
|
Get a list of license file paths associated with the package.
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
List[str]: A list of file paths.
|
|
86
118
|
"""
|
|
87
119
|
return self.find_files("package", "licensefile")
|
|
88
120
|
|
|
@@ -163,11 +195,25 @@ class PackageSchema(PathSchema):
|
|
|
163
195
|
docs[type] = doc_files
|
|
164
196
|
return docs
|
|
165
197
|
|
|
198
|
+
@classmethod
|
|
199
|
+
def _getdict_type(cls) -> str:
|
|
200
|
+
"""
|
|
201
|
+
Returns the meta data for getdict
|
|
202
|
+
"""
|
|
203
|
+
|
|
204
|
+
return PackageSchema.__name__
|
|
205
|
+
|
|
166
206
|
|
|
167
207
|
############################################
|
|
168
208
|
# Package information
|
|
169
209
|
############################################
|
|
170
210
|
def schema_package(schema):
|
|
211
|
+
"""
|
|
212
|
+
Adds package schema parameters to the given schema.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
schema (EditableSchema): The schema to modify.
|
|
216
|
+
"""
|
|
171
217
|
schema = EditableSchema(schema)
|
|
172
218
|
|
|
173
219
|
schema.insert(
|
|
@@ -183,6 +229,18 @@ def schema_package(schema):
|
|
|
183
229
|
help=trim("""Package version. Can be a branch, tag, commit hash,
|
|
184
230
|
or a semver compatible version.""")))
|
|
185
231
|
|
|
232
|
+
schema.insert(
|
|
233
|
+
'package', 'vendor',
|
|
234
|
+
Parameter(
|
|
235
|
+
'str',
|
|
236
|
+
scope=Scope.GLOBAL,
|
|
237
|
+
shorthelp="Package: vendor",
|
|
238
|
+
switch="-package_vendor <str>",
|
|
239
|
+
example=[
|
|
240
|
+
"cli: -package_vendor acme",
|
|
241
|
+
"api: chip.set('package', 'vendor', 'acme')"],
|
|
242
|
+
help=trim("""Package vendor.""")))
|
|
243
|
+
|
|
186
244
|
schema.insert(
|
|
187
245
|
'package', 'description',
|
|
188
246
|
Parameter(
|
|
@@ -262,14 +320,20 @@ def schema_package(schema):
|
|
|
262
320
|
|
|
263
321
|
|
|
264
322
|
class PackageSchemaTmp(BaseSchema):
|
|
323
|
+
"""
|
|
324
|
+
A temporary package schema used for development and testing.
|
|
325
|
+
"""
|
|
265
326
|
def __init__(self):
|
|
327
|
+
"""
|
|
328
|
+
Initializes a temporary PackageSchemaTmp object.
|
|
329
|
+
"""
|
|
266
330
|
super().__init__()
|
|
267
331
|
|
|
268
332
|
schema_package_tmp(self)
|
|
269
333
|
|
|
270
334
|
def register(self, name, path, ref=None, clobber=True):
|
|
271
335
|
"""
|
|
272
|
-
Registers a package by its name with the source path and reference
|
|
336
|
+
Registers a package by its name with the source path and reference.
|
|
273
337
|
|
|
274
338
|
Registered package sources are stored in the package section of the schema.
|
|
275
339
|
|
|
@@ -301,12 +365,12 @@ class PackageSchemaTmp(BaseSchema):
|
|
|
301
365
|
return success
|
|
302
366
|
|
|
303
367
|
def get_resolver(self, package):
|
|
304
|
-
|
|
305
|
-
Returns a specific resolver
|
|
368
|
+
"""
|
|
369
|
+
Returns a specific resolver for a package.
|
|
306
370
|
|
|
307
371
|
Args:
|
|
308
372
|
package (str): name of package
|
|
309
|
-
|
|
373
|
+
"""
|
|
310
374
|
resolver_cls = Resolver.find_resolver(self.get("source", package, "path"))
|
|
311
375
|
resolver = resolver_cls(package, self._parent(root=True),
|
|
312
376
|
self.get("source", package, "path"),
|
|
@@ -314,20 +378,37 @@ class PackageSchemaTmp(BaseSchema):
|
|
|
314
378
|
return resolver
|
|
315
379
|
|
|
316
380
|
def get_resolvers(self):
|
|
317
|
-
|
|
381
|
+
"""
|
|
318
382
|
Returns a dictionary of packages with their resolver method.
|
|
319
|
-
|
|
383
|
+
|
|
384
|
+
Returns:
|
|
385
|
+
Dict[str, callable]: A dictionary of package names mapped to their resolver methods.
|
|
386
|
+
"""
|
|
320
387
|
resolvers = {}
|
|
321
388
|
for package in self.getkeys("source"):
|
|
322
389
|
resolvers[package] = self.get_resolver(package).get_path
|
|
323
390
|
|
|
324
391
|
return resolvers
|
|
325
392
|
|
|
393
|
+
@classmethod
|
|
394
|
+
def _getdict_type(cls) -> str:
|
|
395
|
+
"""
|
|
396
|
+
Returns the meta data for getdict
|
|
397
|
+
"""
|
|
398
|
+
|
|
399
|
+
return PackageSchemaTmp.__name__
|
|
400
|
+
|
|
326
401
|
|
|
327
402
|
############################################
|
|
328
403
|
# Package information
|
|
329
404
|
############################################
|
|
330
405
|
def schema_package_tmp(schema):
|
|
406
|
+
"""
|
|
407
|
+
Adds temporary package schema parameters to the given schema.
|
|
408
|
+
|
|
409
|
+
Args:
|
|
410
|
+
schema (EditableSchema): The schema to modify.
|
|
411
|
+
"""
|
|
331
412
|
schema = EditableSchema(schema)
|
|
332
413
|
|
|
333
414
|
schema.insert(
|
siliconcompiler/pathschema.py
CHANGED
|
@@ -48,7 +48,8 @@ class PathSchemaBase(BaseSchema):
|
|
|
48
48
|
"""
|
|
49
49
|
schema_root = self._parent(root=True)
|
|
50
50
|
cwd = getattr(schema_root, "cwd", os.getcwd())
|
|
51
|
-
collection_dir = getattr(schema_root, "collection_dir",
|
|
51
|
+
collection_dir = getattr(schema_root, "collection_dir",
|
|
52
|
+
getattr(schema_root, "getcollectiondir", None))
|
|
52
53
|
if collection_dir:
|
|
53
54
|
collection_dir = collection_dir()
|
|
54
55
|
|
|
@@ -73,7 +74,9 @@ class PathSchemaBase(BaseSchema):
|
|
|
73
74
|
logger = getattr(schema_root,
|
|
74
75
|
"logger",
|
|
75
76
|
logging.getLogger("siliconcompiler.check_filepaths"))
|
|
76
|
-
collection_dir = getattr(schema_root, "collection_dir",
|
|
77
|
+
collection_dir = getattr(schema_root, "collection_dir",
|
|
78
|
+
getattr(schema_root, "getcollectiondir",
|
|
79
|
+
None))
|
|
77
80
|
if collection_dir:
|
|
78
81
|
collection_dir = collection_dir()
|
|
79
82
|
|
|
@@ -84,6 +87,32 @@ class PathSchemaBase(BaseSchema):
|
|
|
84
87
|
cwd=cwd)
|
|
85
88
|
|
|
86
89
|
|
|
90
|
+
class PathSchemaSimpleBase(PathSchemaBase):
|
|
91
|
+
def find_files(self, *keypath, missing_ok=False):
|
|
92
|
+
"""
|
|
93
|
+
Returns absolute paths to files or directories based on the keypath
|
|
94
|
+
provided.
|
|
95
|
+
The keypath provided must point to a schema parameter of type file, dir,
|
|
96
|
+
or lists of either. Otherwise, it will trigger an error.
|
|
97
|
+
Args:
|
|
98
|
+
keypath (list of str): Variable length schema key list.
|
|
99
|
+
missing_ok (bool): If True, silently return None when files aren't
|
|
100
|
+
found. If False, print an error and set the error flag.
|
|
101
|
+
Returns:
|
|
102
|
+
If keys points to a scalar entry, returns an absolute path to that
|
|
103
|
+
file/directory, or None if not found. It keys points to a list
|
|
104
|
+
entry, returns a list of either the absolute paths or None for each
|
|
105
|
+
entry, depending on whether it is found.
|
|
106
|
+
Examples:
|
|
107
|
+
>>> schema.find_files('input', 'verilog')
|
|
108
|
+
Returns a list of absolute paths to source files, as specified in
|
|
109
|
+
the schema.
|
|
110
|
+
"""
|
|
111
|
+
return super().find_files(*keypath,
|
|
112
|
+
missing_ok=missing_ok,
|
|
113
|
+
step=None, index=None)
|
|
114
|
+
|
|
115
|
+
|
|
87
116
|
class PathSchema(PathSchemaBase):
|
|
88
117
|
'''
|
|
89
118
|
Schema extension to add support for path handling with dataroots
|