siliconcompiler 0.35.1__py3-none-any.whl → 0.35.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.
Files changed (57) hide show
  1. siliconcompiler/_metadata.py +1 -1
  2. siliconcompiler/apps/sc_install.py +1 -1
  3. siliconcompiler/apps/sc_issue.py +8 -16
  4. siliconcompiler/apps/smake.py +106 -100
  5. siliconcompiler/checklist.py +349 -91
  6. siliconcompiler/design.py +8 -1
  7. siliconcompiler/flowgraph.py +419 -130
  8. siliconcompiler/flows/showflow.py +1 -2
  9. siliconcompiler/library.py +6 -5
  10. siliconcompiler/package/https.py +10 -5
  11. siliconcompiler/project.py +87 -37
  12. siliconcompiler/remote/client.py +17 -6
  13. siliconcompiler/scheduler/scheduler.py +284 -59
  14. siliconcompiler/scheduler/schedulernode.py +154 -102
  15. siliconcompiler/schema/__init__.py +3 -2
  16. siliconcompiler/schema/_metadata.py +1 -1
  17. siliconcompiler/schema/baseschema.py +210 -93
  18. siliconcompiler/schema/namedschema.py +21 -13
  19. siliconcompiler/schema/parameter.py +8 -1
  20. siliconcompiler/schema/safeschema.py +18 -7
  21. siliconcompiler/schema_support/dependencyschema.py +23 -3
  22. siliconcompiler/schema_support/filesetschema.py +10 -4
  23. siliconcompiler/schema_support/option.py +37 -34
  24. siliconcompiler/schema_support/pathschema.py +7 -2
  25. siliconcompiler/schema_support/record.py +5 -4
  26. siliconcompiler/targets/asap7_demo.py +4 -1
  27. siliconcompiler/tool.py +100 -8
  28. siliconcompiler/tools/__init__.py +10 -7
  29. siliconcompiler/tools/bambu/convert.py +19 -0
  30. siliconcompiler/tools/builtin/__init__.py +3 -2
  31. siliconcompiler/tools/builtin/filter.py +108 -0
  32. siliconcompiler/tools/builtin/importfiles.py +154 -0
  33. siliconcompiler/tools/execute/exec_input.py +4 -3
  34. siliconcompiler/tools/gtkwave/show.py +6 -2
  35. siliconcompiler/tools/icarus/compile.py +1 -0
  36. siliconcompiler/tools/klayout/scripts/klayout_show.py +1 -1
  37. siliconcompiler/tools/klayout/show.py +17 -5
  38. siliconcompiler/tools/openroad/screenshot.py +0 -1
  39. siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +1 -1
  40. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +2 -0
  41. siliconcompiler/tools/openroad/show.py +10 -0
  42. siliconcompiler/tools/surfer/show.py +7 -2
  43. siliconcompiler/tools/verilator/compile.py +2 -2
  44. siliconcompiler/tools/yosys/prepareLib.py +7 -2
  45. siliconcompiler/tools/yosys/syn_asic.py +20 -2
  46. siliconcompiler/toolscripts/_tools.json +5 -5
  47. siliconcompiler/toolscripts/rhel9/{install-yosys-wildebeest.sh → install-wildebeest.sh} +5 -5
  48. siliconcompiler/toolscripts/ubuntu22/{install-yosys-wildebeest.sh → install-wildebeest.sh} +5 -5
  49. siliconcompiler/toolscripts/ubuntu24/{install-yosys-wildebeest.sh → install-wildebeest.sh} +5 -5
  50. siliconcompiler/utils/__init__.py +1 -2
  51. siliconcompiler/utils/issue.py +38 -45
  52. {siliconcompiler-0.35.1.dist-info → siliconcompiler-0.35.3.dist-info}/METADATA +4 -4
  53. {siliconcompiler-0.35.1.dist-info → siliconcompiler-0.35.3.dist-info}/RECORD +57 -55
  54. {siliconcompiler-0.35.1.dist-info → siliconcompiler-0.35.3.dist-info}/WHEEL +0 -0
  55. {siliconcompiler-0.35.1.dist-info → siliconcompiler-0.35.3.dist-info}/entry_points.txt +0 -0
  56. {siliconcompiler-0.35.1.dist-info → siliconcompiler-0.35.3.dist-info}/licenses/LICENSE +0 -0
  57. {siliconcompiler-0.35.1.dist-info → siliconcompiler-0.35.3.dist-info}/top_level.txt +0 -0
@@ -188,6 +188,7 @@ proc sc_image_estimated_routing_congestion { } {
188
188
  sc_image_setup_default
189
189
 
190
190
  suppress_message GRT 10
191
+ suppress_message GRT 42
191
192
  catch {
192
193
  sc_image_heatmap "Estimated Congestion (RUDY)" \
193
194
  "RUDY" \
@@ -197,6 +198,7 @@ proc sc_image_estimated_routing_congestion { } {
197
198
  0
198
199
  } err
199
200
  unsuppress_message GRT 10
201
+ unsuppress_message GRT 42
200
202
  }
201
203
 
202
204
  proc sc_image_power_density { } {
@@ -22,6 +22,16 @@ class ShowTask(ShowTask, APRTask, OpenROADSTAParameter):
22
22
  self.unset("input")
23
23
  self.unset("output")
24
24
 
25
+ # Add input file requirements
26
+ if f"{self.design_topmodule}.odb" in self.get_files_from_input_nodes():
27
+ self.add_input_file(ext="odb")
28
+ elif f"{self.design_topmodule}.def" in self.get_files_from_input_nodes():
29
+ self.add_input_file(ext="def")
30
+ else:
31
+ self.add_required_key("var", "showfilepath")
32
+ if f"{self.design_topmodule}.sdc" in self.get_files_from_input_nodes():
33
+ self.add_input_file(ext="sdc")
34
+
25
35
  self.set_script("sc_show.tcl")
26
36
 
27
37
  self.set("var", "showexit", False, clobber=False)
@@ -12,7 +12,7 @@ class ShowTask(ShowTask):
12
12
  return stdout.strip().split()[1]
13
13
 
14
14
  def get_supported_show_extentions(self):
15
- return ["vcd"]
15
+ return ["vcd", "fst"]
16
16
 
17
17
  def setup(self):
18
18
  super().setup()
@@ -22,15 +22,20 @@ class ShowTask(ShowTask):
22
22
 
23
23
  if f"{self.design_topmodule}.vcd" in self.get_files_from_input_nodes():
24
24
  self.add_input_file(ext="vcd")
25
+ elif f"{self.design_topmodule}.fst" in self.get_files_from_input_nodes():
26
+ self.add_input_file(ext="fst")
25
27
  else:
26
28
  self.add_required_key("var", "showfilepath")
27
29
 
28
30
  def runtime_options(self):
29
31
  options = super().runtime_options()
30
32
 
31
- # Get VCD file
32
33
  if os.path.exists(f'inputs/{self.design_topmodule}.vcd'):
34
+ # Get VCD file
33
35
  dump = f'inputs/{self.design_topmodule}.vcd'
36
+ elif os.path.exists(f'inputs/{self.design_topmodule}.fst'):
37
+ # Get FST file
38
+ dump = f'inputs/{self.design_topmodule}.fst'
34
39
  else:
35
40
  dump = self.find_files('var', 'showfilepath')
36
41
  options.append(dump)
@@ -110,9 +110,9 @@ class CompileTask(VerilatorTask):
110
110
  options.append(trace_opt)
111
111
 
112
112
  # add siliconcompiler specific defines
113
- c_flags.append("-DSILICONCOMPILER_TRACE_DIR=\\\"reports\\\"")
113
+ c_flags.append("-DSILICONCOMPILER_TRACE_DIR=\"reports\"")
114
114
  c_flags.append(
115
- f"-DSILICONCOMPILER_TRACE_FILE=\\\"reports/{self.design_topmodule}.{ext}\\\"")
115
+ f"-DSILICONCOMPILER_TRACE_FILE=\"reports/{self.design_topmodule}.{ext}\"")
116
116
 
117
117
  if c_includes:
118
118
  c_flags.extend([f'-I{include}' for include in c_includes])
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # Based on https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/blob/84545863573a90bca3612298361adb35bf39e692/flow/util/markDontUse.py # noqa E501
3
3
 
4
+ import bz2
4
5
  import re
5
6
  import gzip
6
7
  import argparse # argument parsing
@@ -12,10 +13,14 @@ def process_liberty_file(input_file, logger=None):
12
13
  logger.info(f"Opening file for replace: {input_file}")
13
14
  if input_file.endswith(".gz") or input_file.endswith(".GZ"):
14
15
  f = gzip.open(input_file, 'rt', encoding="utf-8")
16
+ elif input_file.endswith(".bz2") or input_file.endswith(".BZ2"):
17
+ f = bz2.open(input_file, 'rt', encoding="utf-8")
15
18
  else:
16
19
  f = open(input_file, encoding="utf-8")
17
- content = f.read().encode("ascii", "ignore").decode("ascii")
18
- f.close()
20
+ try:
21
+ content = f.read().encode("ascii", "ignore").decode("ascii")
22
+ finally:
23
+ f.close()
19
24
 
20
25
  # Yosys-abc throws an error if original_pin is found within the liberty file.
21
26
  # removing
@@ -32,6 +32,18 @@ class _ASICTask(ASICTask, YosysTask):
32
32
  self.add_required_key("var", "synthesis_corner")
33
33
  self._determine_synthesis_corner()
34
34
 
35
+ self.add_required_key("asic", "delaymodel")
36
+ self.add_required_key("asic", "asiclib")
37
+
38
+ delaymodel = self.project.get("asic", "delaymodel")
39
+ for lib in self.project.get("asic", "asiclib"):
40
+ lib_obj = self.project.get("library", lib, field="schema")
41
+ for corner in self.get("var", "synthesis_corner"):
42
+ if lib_obj.get("asic", "libcornerfileset", corner, delaymodel):
43
+ self.add_required_key(lib_obj, "asic", "libcornerfileset", corner, delaymodel)
44
+ for fileset in lib_obj.get("asic", "libcornerfileset", corner, delaymodel):
45
+ self.add_required_key(lib_obj, "fileset", fileset, "file", "liberty")
46
+
35
47
  def _determine_synthesis_corner(self):
36
48
  if self.get("var", "synthesis_corner"):
37
49
  return
@@ -294,8 +306,6 @@ class ASICSynthesis(_ASICTask, YosysTask):
294
306
  self.set_script("sc_synth_asic.tcl")
295
307
 
296
308
  self.add_required_key("asic", "mainlib")
297
- self.add_required_key("asic", "asiclib")
298
- self.add_required_key("asic", "delaymodel")
299
309
 
300
310
  design = self.project.design
301
311
  fileset = self.project.get("option", "fileset")[0]
@@ -330,6 +340,14 @@ class ASICSynthesis(_ASICTask, YosysTask):
330
340
  self.add_required_key(mainlib, "tool", "yosys", "driver_cell")
331
341
  self.add_required_key("var", "abc_constraint_driver")
332
342
  self.set("var", "abc_constraint_driver", lib_driver)
343
+ if self.get("var", "abc_clock_period"):
344
+ self.add_required_key("var", "abc_clock_period")
345
+ else:
346
+ self.add_required_key(mainlib, "tool", "yosys", "abc_clock_multiplier")
347
+ self.add_required_key("var", "abc_clock_derating")
348
+ for lib, fileset in self.project.get_filesets():
349
+ if lib.has_file(fileset=fileset, filetype="sdc"):
350
+ self.add_required_key(lib, "fileset", fileset, "file", "sdc")
333
351
 
334
352
  if mainlib.get("tool", "yosys", "tristatebuffermap"):
335
353
  self.add_required_key(mainlib, "tool", "yosys", "tristatebuffermap")
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "openroad": {
3
3
  "git-url": "https://github.com/The-OpenROAD-Project/OpenROAD.git",
4
- "git-commit": "dee927a657e719812a07799b87934328d1e31657",
4
+ "git-commit": "f22f811d9d338b1dbc6fe854d35b53757596449d",
5
5
  "docker-cmds": [
6
6
  "# Remove OR-Tools files",
7
7
  "RUN rm -f $SC_PREFIX/Makefile $SC_PREFIX/README.md",
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "opensta": {
19
19
  "git-url": "https://github.com/parallaxsw/OpenSTA.git",
20
- "git-commit": "8f8f397610cebc9e647531914a6c071bcccd2757",
20
+ "git-commit": "cf903f4db688e6f89d732ef28cce7b8185587201",
21
21
  "auto-update": true
22
22
  },
23
23
  "netgen": {
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "sv2v": {
57
57
  "git-url": "https://github.com/zachjs/sv2v.git",
58
- "git-commit": "80a2f0cf685f6d873b4ee37b76e6c18dc60e2555",
58
+ "git-commit": "c1ce7d067b0a7edf8d1589dcb5731265c854c490",
59
59
  "auto-update": true
60
60
  },
61
61
  "verilator": {
@@ -145,7 +145,7 @@
145
145
  },
146
146
  "yosys-slang": {
147
147
  "git-url": "https://github.com/povik/yosys-slang.git",
148
- "git-commit": "ccc13eabc333a59d3a78bdb1d4a002928050e92d",
148
+ "git-commit": "f44908907726e684965ba71959cc147df50c0357",
149
149
  "docker-depends": "yosys",
150
150
  "auto-update": true
151
151
  },
@@ -155,7 +155,7 @@
155
155
  "docker-depends": "yosys",
156
156
  "auto-update": true
157
157
  },
158
- "yosys-wildebeest": {
158
+ "wildebeest": {
159
159
  "git-url": "https://github.com/zeroasiccorp/wildebeest.git",
160
160
  "git-commit": "d79f06403b500b95b4cb33288f520e4e24fb9c47",
161
161
  "docker-depends": "yosys",
@@ -10,13 +10,13 @@ sudo yum install -y git
10
10
  mkdir -p deps
11
11
  cd deps
12
12
 
13
- python3 -m venv .yosys-wildebeest --clear
14
- . .yosys-wildebeest/bin/activate
13
+ python3 -m venv .wildebeest --clear
14
+ . .wildebeest/bin/activate
15
15
  python3 -m pip install cmake==3.31.6
16
16
 
17
- git clone $(python3 ${src_path}/_tools.py --tool yosys-wildebeest --field git-url) yosys-wildebeest
18
- cd yosys-wildebeest
19
- git checkout $(python3 ${src_path}/_tools.py --tool yosys-wildebeest --field git-commit)
17
+ git clone $(python3 ${src_path}/_tools.py --tool wildebeest --field git-url) wildebeest
18
+ cd wildebeest
19
+ git checkout $(python3 ${src_path}/_tools.py --tool wildebeest --field git-commit)
20
20
 
21
21
  cmake -S . -B build
22
22
  cmake --build build
@@ -11,13 +11,13 @@ sudo apt-get install -y git
11
11
  mkdir -p deps
12
12
  cd deps
13
13
 
14
- python3 -m venv .yosys-wildebeest --clear
15
- . .yosys-wildebeest/bin/activate
14
+ python3 -m venv .wildebeest --clear
15
+ . .wildebeest/bin/activate
16
16
  python3 -m pip install cmake==3.31.6
17
17
 
18
- git clone $(python3 ${src_path}/_tools.py --tool yosys-wildebeest --field git-url) yosys-wildebeest
19
- cd yosys-wildebeest
20
- git checkout $(python3 ${src_path}/_tools.py --tool yosys-wildebeest --field git-commit)
18
+ git clone $(python3 ${src_path}/_tools.py --tool wildebeest --field git-url) wildebeest
19
+ cd wildebeest
20
+ git checkout $(python3 ${src_path}/_tools.py --tool wildebeest --field git-commit)
21
21
 
22
22
  cmake -S . -B build
23
23
  cmake --build build
@@ -11,13 +11,13 @@ sudo apt-get install -y git
11
11
  mkdir -p deps
12
12
  cd deps
13
13
 
14
- python3 -m venv .yosys-wildebeest --clear
15
- . .yosys-wildebeest/bin/activate
14
+ python3 -m venv .wildebeest --clear
15
+ . .wildebeest/bin/activate
16
16
  python3 -m pip install cmake==3.31.6
17
17
 
18
- git clone $(python3 ${src_path}/_tools.py --tool yosys-wildebeest --field git-url) yosys-wildebeest
19
- cd yosys-wildebeest
20
- git checkout $(python3 ${src_path}/_tools.py --tool yosys-wildebeest --field git-commit)
18
+ git clone $(python3 ${src_path}/_tools.py --tool wildebeest --field git-url) wildebeest
19
+ cd wildebeest
20
+ git checkout $(python3 ${src_path}/_tools.py --tool wildebeest --field git-commit)
21
21
 
22
22
  cmake -S . -B build
23
23
  cmake --build build
@@ -40,8 +40,7 @@ def link_symlink_copy(srcfile, dstfile):
40
40
 
41
41
 
42
42
  def link_copy(srcfile, dstfile):
43
- # first try hard linking, then symbolic linking,
44
- # and finally just copy the file
43
+ # first try hard linking or just copy the file
45
44
  for method in [os.link, shutil.copy2]:
46
45
  try:
47
46
  # create link
@@ -9,7 +9,12 @@ import tempfile
9
9
 
10
10
  import os.path
11
11
 
12
+ from typing import Optional, List, TYPE_CHECKING
13
+
12
14
  from datetime import datetime, timezone
15
+
16
+ import siliconcompiler
17
+
13
18
  from siliconcompiler.utils import get_file_template
14
19
  from siliconcompiler.utils.curation import collect
15
20
  from siliconcompiler.schema_support.record import RecordSchema
@@ -18,24 +23,26 @@ from siliconcompiler.schema import __version__ as schema_version
18
23
  from siliconcompiler import __version__ as sc_version
19
24
  from siliconcompiler.utils.paths import workdir, jobdir, collectiondir
20
25
 
26
+ if TYPE_CHECKING:
27
+ from siliconcompiler.project import Project
28
+ from siliconcompiler import Task
21
29
 
22
- def generate_testcase(project,
23
- step,
24
- index,
25
- archive_name=None,
26
- archive_directory=None,
27
- include_pdks=True,
28
- include_specific_pdks=None,
29
- include_libraries=True,
30
- include_specific_libraries=None,
31
- hash_files=False,
32
- verbose_collect=True):
30
+
31
+ def generate_testcase(project: "Project",
32
+ step: str,
33
+ index: str,
34
+ archive_name: Optional[str] = None,
35
+ archive_directory: Optional[str] = None,
36
+ include_libraries: bool = True,
37
+ include_specific_libraries: Optional[List[str]] = None,
38
+ hash_files: bool = False,
39
+ verbose_collect: bool = True):
33
40
  # Save original schema since it will be modified
34
41
  project = project.copy()
35
42
 
36
43
  issue_dir = tempfile.TemporaryDirectory(prefix='sc_issue_')
37
44
 
38
- project.set('option', 'continue', True)
45
+ project.option.set_continue(True)
39
46
  if hash_files:
40
47
  for key in project.allkeys():
41
48
  if key[0] == 'history':
@@ -45,29 +52,28 @@ def generate_testcase(project,
45
52
  continue
46
53
  if key[-2] == 'option' and key[-1] == 'cachedir':
47
54
  continue
48
- sc_type = project.get(*key, field='type')
55
+ sc_type: str = project.get(*key, field='type')
49
56
  if 'file' not in sc_type and 'dir' not in sc_type:
50
57
  continue
51
58
  for _, key_step, key_index in project.get(*key, field=None).getvalues():
52
59
  project.hash_files(
53
60
  *key,
54
61
  check=False,
55
- allow_cache=True,
56
62
  verbose=False,
57
- skip_missing=True,
63
+ missing_ok=True,
58
64
  step=key_step, index=key_index)
59
65
 
60
66
  manifest_path = os.path.join(issue_dir.name, 'orig_manifest.json')
61
67
  project.write_manifest(manifest_path)
62
68
 
63
- flow = project.get('option', 'flow')
64
- tool = project.get('flowgraph', flow, step, index, 'tool')
65
- task = project.get('flowgraph', flow, step, index, 'task')
69
+ flow = project.option.get_flow()
70
+ tool: str = project.get('flowgraph', flow, step, index, 'tool')
71
+ task: str = project.get('flowgraph', flow, step, index, 'task')
66
72
 
67
- task_requires = project.get('tool', tool, 'task', task, 'require',
68
- step=step, index=index)
73
+ task_requires: List[str] = project.get('tool', tool, 'task', task, 'require',
74
+ step=step, index=index)
69
75
 
70
- def determine_copy(*keypath, in_require):
76
+ def determine_copy(*keypath: str, in_require: bool):
71
77
  copy = in_require
72
78
 
73
79
  if keypath[0] == 'library':
@@ -78,18 +84,9 @@ def generate_testcase(project,
78
84
  copy = include_libraries
79
85
 
80
86
  copy = copy and determine_copy(*keypath[2:], in_require=in_require)
81
- elif keypath[0] == 'pdk':
82
- # only copy pdks if selected
83
- if include_specific_pdks and keypath[1] in include_specific_pdks:
84
- copy = True
85
- else:
86
- copy = include_pdks
87
87
  elif keypath[0] == 'history':
88
88
  # Skip history
89
89
  copy = False
90
- elif keypath[0] == 'package':
91
- # Skip packages
92
- copy = False
93
90
  elif keypath[0] == 'tool':
94
91
  # Only grab tool / tasks
95
92
  copy = False
@@ -107,9 +104,6 @@ def generate_testcase(project,
107
104
  elif keypath[1] == 'cachedir':
108
105
  # Avoid cache directory
109
106
  copy = False
110
- elif keypath[1] == 'cfg':
111
- # Avoid all of cfg, since we are getting the manifest separately
112
- copy = False
113
107
  elif keypath[1] == 'credentials':
114
108
  # Exclude credentials file
115
109
  copy = False
@@ -120,7 +114,7 @@ def generate_testcase(project,
120
114
  if 'default' in keypath:
121
115
  continue
122
116
 
123
- sctype = project.get(*keypath, field='type')
117
+ sctype: str = project.get(*keypath, field='type')
124
118
  if 'file' not in sctype and 'dir' not in sctype:
125
119
  continue
126
120
 
@@ -133,10 +127,10 @@ def generate_testcase(project,
133
127
  # Collect files
134
128
  work_dir = workdir(project, step=step, index=index)
135
129
 
136
- builddir = project.get('option', 'builddir')
130
+ builddir = project.option.get_builddir()
137
131
  if os.path.isabs(builddir):
138
132
  # If build is an abs path, grab last directory
139
- project.set('option', 'builddir', os.path.basename(builddir))
133
+ project.option.set_builddir(os.path.basename(builddir))
140
134
 
141
135
  # Temporarily change current directory to appear to be issue_dir
142
136
  original_cwd = project._Project__cwd
@@ -161,20 +155,20 @@ def generate_testcase(project,
161
155
  current_work_dir = os.getcwd()
162
156
  os.chdir(new_work_dir)
163
157
 
164
- flow = project.get('option', 'flow')
158
+ flow = project.option.get_flow()
165
159
 
166
- task_class = project.get("tool", tool, "task", task, field="schema")
160
+ task_class: "Task" = project.get("tool", tool, "task", task, field="schema")
167
161
 
168
162
  with task_class.runtime(SchedulerNode(project, step, index), relpath=new_work_dir) as task_obj:
169
163
  # Rewrite replay.sh
170
- prev_quiet = project.get('option', 'quiet', step=step, index=index)
171
- project.set('option', 'quiet', True, step=step, index=index)
164
+ prev_quiet = project.option.get_quiet(step=step, index=index)
165
+ project.option.set_quiet(True, step=step, index=index)
172
166
  try:
173
167
  # Rerun pre_process
174
168
  task_obj.pre_process()
175
169
  except Exception:
176
170
  pass
177
- project.set('option', 'quiet', prev_quiet, step=step, index=index)
171
+ project.option.set_quiet(prev_quiet, step=step, index=index)
178
172
 
179
173
  is_python_tool = task_obj.get_exe() is None
180
174
  if not is_python_tool:
@@ -193,7 +187,7 @@ def generate_testcase(project,
193
187
  git_data = {}
194
188
  try:
195
189
  # Check git information
196
- repo = git.Repo(path=os.path.join(project.scroot, '..'))
190
+ repo = git.Repo(path=os.path.join(os.path.dirname(siliconcompiler.__file__), '..'))
197
191
  commit = repo.head.commit
198
192
  git_data['commit'] = commit.hexsha
199
193
  git_data['date'] = time.strftime('%Y-%m-%d %H:%M:%S',
@@ -201,7 +195,7 @@ def generate_testcase(project,
201
195
  git_data['author'] = f'{commit.author.name} <{commit.author.email}>'
202
196
  git_data['msg'] = commit.message
203
197
  # Count number of commits ahead of version
204
- version_tag = repo.tag(f'v{project.scversion}')
198
+ version_tag = repo.tag(f'v{siliconcompiler.__version__}')
205
199
  count = 0
206
200
  for c in commit.iter_parents():
207
201
  count += 1
@@ -224,7 +218,6 @@ def generate_testcase(project,
224
218
  issue_information['run'] = {'step': step,
225
219
  'index': index,
226
220
  'libraries_included': include_libraries,
227
- 'pdks_included': include_pdks,
228
221
  'tool': tool,
229
222
  'toolversion': project.get('record', 'toolversion',
230
223
  step=step, index=index),
@@ -276,7 +269,7 @@ def generate_testcase(project,
276
269
  add_files = [manifest_path,
277
270
  issue_path,
278
271
  readme_path]
279
- if not is_python_tool:
272
+ if not is_python_tool and run_path:
280
273
  add_files.append(run_path)
281
274
  for path in add_files:
282
275
  tar.add(os.path.abspath(path),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: siliconcompiler
3
- Version: 0.35.1
3
+ Version: 0.35.3
4
4
  Summary: A compiler framework that automates translation from source code to silicon.
5
5
  Author: Zero ASIC
6
6
  License: Apache License 2.0
@@ -37,7 +37,7 @@ Requires-Dist: PyYAML<7.0.0,>=6.0.0
37
37
  Requires-Dist: GitPython<3.2,>=3.1.44
38
38
  Requires-Dist: PyGithub<2.9.0,>=2.8.0
39
39
  Requires-Dist: urllib3>=1.26.0
40
- Requires-Dist: lambdapdk>=0.2.1
40
+ Requires-Dist: lambdapdk>=0.2.4
41
41
  Requires-Dist: fasteners>=0.20
42
42
  Requires-Dist: pandas>=1.1.5
43
43
  Requires-Dist: psutil>=5.8.0
@@ -63,8 +63,8 @@ Requires-Dist: flake8==7.3.0; extra == "lint"
63
63
  Requires-Dist: tclint==0.6.1; extra == "lint"
64
64
  Requires-Dist: codespell==2.4.1; extra == "lint"
65
65
  Provides-Extra: docs
66
- Requires-Dist: Sphinx==8.2.3; extra == "docs"
67
- Requires-Dist: pip-licenses==5.0.0; extra == "docs"
66
+ Requires-Dist: Sphinx<8.3,>=7.4; extra == "docs"
67
+ Requires-Dist: pip-licenses==5.5.0; extra == "docs"
68
68
  Requires-Dist: pydata-sphinx-theme==0.16.1; extra == "docs"
69
69
  Requires-Dist: sc-leflib>=0.2.0; extra == "docs"
70
70
  Provides-Extra: optimizer