opencos-eda 0.3.16__py3-none-any.whl → 0.3.17__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 (35) hide show
  1. opencos/commands/flist.py +143 -88
  2. opencos/commands/shell.py +1 -1
  3. opencos/commands/sim.py +21 -8
  4. opencos/commands/waves.py +3 -1
  5. opencos/deps/defaults.py +2 -2
  6. opencos/deps/deps_file.py +20 -7
  7. opencos/deps/deps_processor.py +3 -3
  8. opencos/eda.py +29 -5
  9. opencos/eda_base.py +21 -9
  10. opencos/eda_config.py +2 -1
  11. opencos/eda_config_defaults.yml +9 -1
  12. opencos/eda_tool_helper.py +84 -9
  13. opencos/files.py +41 -0
  14. opencos/tools/cocotb.py +1 -1
  15. opencos/tools/invio.py +1 -1
  16. opencos/tools/invio_yosys.py +1 -1
  17. opencos/tools/iverilog.py +1 -1
  18. opencos/tools/quartus.py +1 -1
  19. opencos/tools/questa_common.py +6 -3
  20. opencos/tools/riviera.py +1 -1
  21. opencos/tools/slang.py +1 -1
  22. opencos/tools/slang_yosys.py +36 -8
  23. opencos/tools/surelog.py +1 -1
  24. opencos/tools/verilator.py +209 -20
  25. opencos/tools/vivado.py +1 -1
  26. opencos/tools/yosys.py +155 -30
  27. opencos/utils/docker_checks.py +224 -0
  28. opencos/utils/subprocess_helpers.py +3 -1
  29. {opencos_eda-0.3.16.dist-info → opencos_eda-0.3.17.dist-info}/METADATA +1 -1
  30. {opencos_eda-0.3.16.dist-info → opencos_eda-0.3.17.dist-info}/RECORD +35 -34
  31. {opencos_eda-0.3.16.dist-info → opencos_eda-0.3.17.dist-info}/WHEEL +0 -0
  32. {opencos_eda-0.3.16.dist-info → opencos_eda-0.3.17.dist-info}/entry_points.txt +0 -0
  33. {opencos_eda-0.3.16.dist-info → opencos_eda-0.3.17.dist-info}/licenses/LICENSE +0 -0
  34. {opencos_eda-0.3.16.dist-info → opencos_eda-0.3.17.dist-info}/licenses/LICENSE.spdx +0 -0
  35. {opencos_eda-0.3.16.dist-info → opencos_eda-0.3.17.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,224 @@
1
+ '''Various checks for making sure a user can or can't run docker
2
+
3
+ Uses:
4
+ from opencos.utils.docker_checks import docker_ok
5
+
6
+ if docker_ok():
7
+ # do docker stuff
8
+ else
9
+ # print messages saying can't do docker stuff, fail
10
+ '''
11
+
12
+ from importlib import import_module
13
+ import os
14
+ from pathlib import Path
15
+ import shutil
16
+ import subprocess
17
+ import sys
18
+
19
+ from opencos import __version__ as opencos_version
20
+ from opencos.util import debug, warning
21
+ from opencos.utils.str_helpers import strip_outer_quotes
22
+ from opencos.utils.subprocess_helpers import IS_LINUX, IS_MACOS, IS_WINDOWS
23
+
24
+ DOCKER_EXE = shutil.which('docker')
25
+ DOCKER_GROUP = 'docker'
26
+
27
+ _DOCKER_VERSION = ''
28
+ _DOCKER_OK = None
29
+ _CAN_RUN_DOCKER_WITHOUT_SUDO = None
30
+
31
+
32
+ grp = None # pylint: disable=invalid-name
33
+ if IS_LINUX:
34
+ grp = import_module('grp') # pylint: disable=invalid-name
35
+
36
+
37
+ def get_error_str_cant_run_docker() -> str:
38
+ '''Returns a somewhat O/S specific messsage about you couldn't run docker'''
39
+
40
+ is_installed = bool(DOCKER_EXE)
41
+ if not is_installed:
42
+ return (
43
+ 'Current user cannot run docker, it does not appear to be installed or is not in PATH'
44
+ )
45
+ if not not_in_docker_already():
46
+ return (
47
+ 'Current user cannot run docker, it appears we are already in a docker ENV'
48
+ ' (./dockerenv exists). Docker-in-docker is not yet supported within opencos-eda.'
49
+ )
50
+ if IS_LINUX:
51
+ return (
52
+ 'Current user cannot run docker! (user is not a member of',
53
+ ' docker group, or requires sudo to run docker).'
54
+ )
55
+ if IS_MACOS:
56
+ return (
57
+ 'Current macos user cannot run docker! (user may not have Docker Desktop'
58
+ ' running, it needs to be. Also check if user can run docker without sudo.)'
59
+ )
60
+ if IS_WINDOWS:
61
+ return (
62
+ 'Current windows user cannot run docker! (This may not be correctly implemented'
63
+ f' for windows in opencos-eda version: {opencos_version})'
64
+ )
65
+ return (
66
+ 'Current user cannot run docker! (unknown operating system, not supported in'
67
+ f' opencos-eda version: {opencos_version} -- platform: {sys.platform})'
68
+ )
69
+
70
+
71
+ def is_docker_installed() -> bool:
72
+ '''Checks if DOCKER_EXE is non-blank'''
73
+ return bool(DOCKER_EXE)
74
+
75
+ def not_in_docker_already() -> bool:
76
+ '''Returns True if we're not in docker (False if we are in docker).
77
+
78
+ We do not yet support DinD situations, so if we are already in docker,
79
+ make sure docker_ok() returns overall False.
80
+ '''
81
+ return not Path('/.dockerenv').exists()
82
+
83
+
84
+ def get_docker_version() -> str:
85
+ '''Returns docker version (or blank str if not installed) and sets global _DOCKER_VERSION'''
86
+ global _DOCKER_VERSION # pylint: disable=global-statement
87
+ if _DOCKER_VERSION:
88
+ return _DOCKER_VERSION
89
+ if not is_docker_installed():
90
+ return ''
91
+
92
+ version_ret = subprocess.run(
93
+ [DOCKER_EXE, '--version'],
94
+ capture_output=True,
95
+ check=False
96
+ )
97
+ # Docker version 29.2.0, build 0b9d198
98
+ stdout = version_ret.stdout.decode('utf-8', errors='replace')
99
+ debug(f'{DOCKER_EXE=} {version_ret=}')
100
+ words = stdout.split()
101
+ if len(words) < 1:
102
+ warning(
103
+ f'{DOCKER_EXE} --version: returned unexpected string {version_ret=}'
104
+ )
105
+ _DOCKER_VERSION = words[2].rstrip(',')
106
+ return _DOCKER_VERSION
107
+
108
+
109
+ def can_run_docker_without_sudo() -> bool:
110
+ '''Checks if the user can run 'docker' with sudo
111
+
112
+ Note this command is slow until it has been run and cached.
113
+ '''
114
+ global _CAN_RUN_DOCKER_WITHOUT_SUDO # pylint: disable=global-statement
115
+ if _CAN_RUN_DOCKER_WITHOUT_SUDO is not None:
116
+ return _CAN_RUN_DOCKER_WITHOUT_SUDO
117
+ if not is_docker_installed():
118
+ _CAN_RUN_DOCKER_WITHOUT_SUDO = False
119
+
120
+ else:
121
+ try:
122
+ # 'docker info' requires connection to the daemon
123
+ # Using check_call ensures we catch non-zero exit codes
124
+ subprocess.check_call([DOCKER_EXE, 'info'],
125
+ stdout=subprocess.DEVNULL,
126
+ stderr=subprocess.DEVNULL)
127
+ _CAN_RUN_DOCKER_WITHOUT_SUDO = True
128
+ except (subprocess.CalledProcessError, FileNotFoundError):
129
+ _CAN_RUN_DOCKER_WITHOUT_SUDO = False
130
+
131
+ return _CAN_RUN_DOCKER_WITHOUT_SUDO
132
+
133
+
134
+ def is_in_docker_group_or_non_linux() -> bool:
135
+ '''Checks if the user is in a group named 'docker'.
136
+
137
+ Note this applies to Linux-only. Macos supports groups but they don't need
138
+ docker group for Docker Desktop'''
139
+ if not IS_LINUX:
140
+ return True
141
+ if not grp:
142
+ return False
143
+ try:
144
+ docker_gid = grp.getgrnam(DOCKER_GROUP).gr_gid
145
+ return docker_gid in os.getgroups()
146
+ except KeyError:
147
+ # Group 'docker' doesn't even exist on this system
148
+ return False
149
+
150
+
151
+ def is_docker_ok_windows() -> bool:
152
+ '''Checks for docker support in Windows'''
153
+ if not IS_WINDOWS:
154
+ return True
155
+
156
+ return False
157
+
158
+
159
+ def docker_ok() -> bool:
160
+ '''Sets DOCKER_OK to True/False if unset, returns _DOCKER_OK'''
161
+ global _DOCKER_OK # pylint: disable=global-statement
162
+ if _DOCKER_OK is None:
163
+ _DOCKER_OK = all(
164
+ (
165
+ is_docker_installed(),
166
+ not_in_docker_already(),
167
+ get_docker_version(),
168
+ can_run_docker_without_sudo(),
169
+ is_in_docker_group_or_non_linux(),
170
+ is_docker_ok_windows(),
171
+ )
172
+ )
173
+ return _DOCKER_OK
174
+
175
+
176
+ def get_docker_run_command( # pylint: disable=dangerous-default-value
177
+ image: str,
178
+ docker_command: str = 'run', # or 'exec'
179
+ user: str = '$(id -u):$(id -g)',
180
+ env_dict: dict = {},
181
+ ro_volumes: list = [],
182
+ rw_volumes: list = [],
183
+ entrypoint: str = '/bin/bash',
184
+ commands: list = []
185
+ ) -> list:
186
+ '''Returns list (suitable for subprocess) of: docker run ... or docker exec ...'''
187
+
188
+ # TODO(drew): this likely needs tweaks to 'user' str for Windows
189
+ ret = [
190
+ 'docker', docker_command, '--rm'
191
+ ]
192
+ if user:
193
+ ret.extend([
194
+ '--user', user
195
+ ])
196
+ for k,v in env_dict.items():
197
+ ret.extend(['-e', f'"{strip_outer_quotes(k)}={strip_outer_quotes(v)}"'])
198
+ for v in ro_volumes:
199
+ assert isinstance(v, (str, Path, tuple)), f'{type(v)=} {v=} must be Path|str|tuple'
200
+ if isinstance(v, tuple):
201
+ assert len(v) == 2, f'Need src, dst in ro_volumes entry {v}'
202
+ ret.extend(['-v', f'{v[0]}:{v[1]}:ro'])
203
+ else:
204
+ ret.extend(['-v', f'{v}:{v}:ro'])
205
+ for v in rw_volumes:
206
+ assert isinstance(v, (str, Path, tuple)), f'{type(v)=} {v=} must be Path|str|tuple'
207
+ if isinstance(v, tuple):
208
+ assert len(v) == 2, f'Need src, dst in rw_volumes entry {v}'
209
+ ret.extend(['-v', f'{v[0]}:{v[1]}:rw'])
210
+ else:
211
+ ret.extend(['-v', f'{v}:{v}:rw'])
212
+
213
+ if entrypoint:
214
+ ret.extend([
215
+ '--entrypoint', entrypoint
216
+ ])
217
+
218
+ assert image, f'docker {image=} is missing, must set'
219
+ ret.append(image)
220
+
221
+ if commands:
222
+ ret.extend(commands)
223
+
224
+ return ret
@@ -10,7 +10,9 @@ from opencos.files import safe_shutil_which
10
10
  from opencos.util import debug, error, info, warning, progname, global_log
11
11
  from opencos.utils.str_helpers import strip_ansi_color
12
12
 
13
- IS_WINDOWS = sys.platform.startswith('win')
13
+ IS_WINDOWS: bool = sys.platform.startswith('win')
14
+ IS_MACOS: bool = sys.platform.startswith('darwin')
15
+ IS_LINUX: bool = sys.platform.startswith('linux')
14
16
 
15
17
  # For non-Windows, we track the background parent PIDs, because some tools (vivado XSim,
16
18
  # most Modelsim/Questa variants) tend to spawn children PIDs that don't always respond
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencos-eda
3
- Version: 0.3.16
3
+ Version: 0.3.17
4
4
  Summary: A simple Python package for wrapping RTL simuliatons and synthesis
5
5
  Author-email: Simon Sabato <simon@cognichip.ai>, Drew Ranck <drew@cognichip.ai>
6
6
  Project-URL: Homepage, https://github.com/cognichip/opencos
@@ -2,18 +2,18 @@ opencos/__init__.py,sha256=RwJA9oc1uUlvNX7v5zoqwjnSRNq2NZwRlHqtS-ICJkI,122
2
2
  opencos/_version.py,sha256=FLlmTepF7P0hC-506fgEvv3NSxGxtWgeR7g2UkNK7PI,618
3
3
  opencos/_waves_pkg.sv,sha256=yWojzRYVIqV2H5xa5e0v34LgK4oLMu3k9_N8EYXy2f0,2852
4
4
  opencos/deps_schema.py,sha256=1pLF4HLs3f3Hh7SstGolxnG-ODVfvE3DIsfLzmMABqo,17746
5
- opencos/eda.py,sha256=yNoLrSNh0115vN-6kLMQcu-ZH2TYKoVJ72eLorRvidM,37425
6
- opencos/eda_base.py,sha256=-nguHrrYVb8a853HEMfFrOoXlsEEeRnDdFR66nTwX0s,124332
7
- opencos/eda_config.py,sha256=EPW0rhnbrpfV9h0OtKrp7By19FcEyDXT2-ud7y4jbRU,17266
8
- opencos/eda_config_defaults.yml,sha256=0rq6DNw2U0OjuoZPmYVDgPwu_WoaGUQmaNE3l7sP4wA,21601
5
+ opencos/eda.py,sha256=H-sE4UbFFqcUneQI8M_ic0IzJ4VQKU-On0k8EM8oDfg,38727
6
+ opencos/eda_base.py,sha256=wZMaU4BJXKDA42Wr5fYmTf1jRd0iKECviaSLKkcxrH0,125056
7
+ opencos/eda_config.py,sha256=RGIlyym4h8oeddViLsipx4_w59R-DAoEuN97K6qg5DE,17312
8
+ opencos/eda_config_defaults.yml,sha256=odH5IFoOii9ndChX5VEREy6ah3zqyG6lKjDUepeckMM,21895
9
9
  opencos/eda_config_reduced.yml,sha256=BOKGfe-OmVIF0SKhTTglPIzfAoGuCZ8n-f2KpoLF8dk,883
10
10
  opencos/eda_deps_bash_completion.bash,sha256=o1yZvGUQSbN-AYq95sDTzMFw7gNHCUSlv9tASEHnACA,2763
11
11
  opencos/eda_deps_sanitize.py,sha256=SQjvrte9Hv9JesRY0wljvbdC6pAmLCikI-Wdzzy-D04,1939
12
12
  opencos/eda_extract_targets.py,sha256=POlxZfqf2dNH2nc1CEw5B_53vSHAicSTkpU9_-2_6Zw,2851
13
- opencos/eda_tool_helper.py,sha256=7KY-E7wnWCNRHXeekDg1tFivcZw86-MsrmXiw7Fc6h0,8578
13
+ opencos/eda_tool_helper.py,sha256=wpZWqGMcnv-3reMPvoLSIITE9LZjvu-yQiTfq3y5O5Q,11951
14
14
  opencos/export_helper.py,sha256=zDkvsUS6FVrpXl1UTy53QG3CuhYp5FFplI9rRzAE2g8,25395
15
15
  opencos/export_json_convert.py,sha256=tSIMbLFtc_Fo66EhFovMii1v_qJYyFZJrPNnoPdW7L0,4182
16
- opencos/files.py,sha256=-vHrddbFrwxEHU47VzeyLOU93q8XSXAmPiopClfV-bs,2296
16
+ opencos/files.py,sha256=VJX74EG4ZtxJmIa2aTsB9OTg_lhMQ-xSMz6-7vi822M,3960
17
17
  opencos/names.py,sha256=Y2aJ5wgpbNIJ-_P5xUXnHMv_h-zMOX2Rt6iLuduqC1Q,1213
18
18
  opencos/peakrdl_cleanup.py,sha256=vHNGtalTrIVP335PhRjPt9RhoccgpK1HJAi-E4M8Kc8,736
19
19
  opencos/seed.py,sha256=IL9Yg-r9SLSRseMVWaEHmuw2_DNi_eyut11EafoNTsU,942
@@ -23,24 +23,24 @@ opencos/commands/build.py,sha256=mvJYxk5J15k0Cr8R7oIdIIdsEtWV3gE-LnPweVwtSDo,148
23
23
  opencos/commands/deps_help.py,sha256=rWRro9UZCy8FjNgjDdCt5MMrC5KV7Pj6KDsV2xa5fSI,8178
24
24
  opencos/commands/elab.py,sha256=m6Gk03wSzX8UkcmReooK7turF7LpqO0IcdOZwJ8XiyI,1596
25
25
  opencos/commands/export.py,sha256=bV4JCuihccbbnE_3qWVvlGtrdKWNVjo1hwOq4ax2dxA,3773
26
- opencos/commands/flist.py,sha256=YlcQFuTo-jpmSfDYdVtNDqK_2VYMM_Ox1_5_0Os-I7o,16329
26
+ opencos/commands/flist.py,sha256=h6O9yxUeRXHRlPadBEiXSLiFsDnAIad4Pg2JLfyPuRY,18488
27
27
  opencos/commands/lec.py,sha256=7uziNSeGhZrDEbfS4dt3qVp-z2122hx2kqPH15PqIgQ,4091
28
28
  opencos/commands/lint.py,sha256=piPb0l0zE3sAtNJkFQ-oNpuHxnaV_RNXkXtEj_9mwGs,1594
29
29
  opencos/commands/multi.py,sha256=urm-IDllnMZWScH7e6Pg4ukHGHILBd4NbPlPmHU3vsw,27624
30
30
  opencos/commands/open.py,sha256=XckvKUNwvc5KHbYGV-eQ2i0WG4X-yckroDaMC610MB4,804
31
31
  opencos/commands/proj.py,sha256=cExW9ZZkw6nkpVyNfeQzJADzmPtbYgBgWml82tqO6jY,1158
32
- opencos/commands/shell.py,sha256=WPKS27fTr0MG4Gqz_RzSwv4n8AINuQ_ntSmJtHeat_I,7771
33
- opencos/commands/sim.py,sha256=-dBxyHWMlUeLllsyhHa82jYKcLWxZA9qntS_vbeV3V0,31569
32
+ opencos/commands/shell.py,sha256=gXHy71_G3MrD5p9hoPzsL4Z5u4aVeaogYhamTWCyONs,7773
33
+ opencos/commands/sim.py,sha256=1chwfLjsM7cFlmPJF_P6n44uGqFjdtBloXTHlsvnHzI,32272
34
34
  opencos/commands/sweep.py,sha256=62XmDHT-prdxJNy-6MbK6wEGJm1YC9caOaJapoekQ8s,9325
35
35
  opencos/commands/synth.py,sha256=Qs6FP9Ge_gp9TH3EFzVXKFlrrqrMwIbr38VYVlZvmeA,4557
36
36
  opencos/commands/targets.py,sha256=_jRNhm2Fqj0fmMvTw6Ba39DCsRHf_r_uZCy_R064kpA,1472
37
37
  opencos/commands/upload.py,sha256=OGMI4By0942jL9LK7xBy5_WjvVzRbAr_RB3rS5fNobI,7917
38
- opencos/commands/waves.py,sha256=LYF1UcxkHFYYtYoebnh9iE_on80PbbmzIpaSk-XtZcI,9232
38
+ opencos/commands/waves.py,sha256=T52z4vd2Kw_afLxXpwCfgB8Sfu6M_FLOFxF1wsm_eQo,9294
39
39
  opencos/deps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- opencos/deps/defaults.py,sha256=lbzFPlxbGljDkJ3v97QUVJq4dfwRDM_3S0VQxlttamQ,1709
40
+ opencos/deps/defaults.py,sha256=qgEkDL88pqL5eFG4UaOU8Vr4G6osvTEceoCz7zQb9Q8,1704
41
41
  opencos/deps/deps_commands.py,sha256=p6jgZXQFu8kJ5M3YqqKZwrdnRC0EAMm-8oqhKvm_gBE,16665
42
- opencos/deps/deps_file.py,sha256=1hMMj_jz4t2r3X5VXqU2RWxE82IROvbUR213jlmXPPs,17453
43
- opencos/deps/deps_processor.py,sha256=ynfYbjn5itmDJCboZHqEtZBuWWgRGDAjboNt-JLZb88,48272
42
+ opencos/deps/deps_file.py,sha256=YYyxEhexaubM0qOrH-2lUeqVb8gKOchWRyVcsXB08KQ,17960
43
+ opencos/deps/deps_processor.py,sha256=bJckWI1NLAgMBFwMAY_lU-h0jefGkyjB6IxmGHrAqhk,48339
44
44
  opencos/docs/Architecture.md,sha256=8zLj19-gzwyHe2ahO7fw6It1pYkpnOtfSD8ciocN_hM,4072
45
45
  opencos/docs/ConnectingApps.md,sha256=xfAJoSa7rx6-aZ8edTugRxKLwZwapR36xjds9CZBYDw,2698
46
46
  opencos/docs/DEPS.md,sha256=6wzBr8RUNXPRbqiJCt_JZreC0S5epGVOzuSrg_lDZp8,8006
@@ -57,37 +57,38 @@ opencos/hw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
57
  opencos/hw/oc_cli.py,sha256=U1JGlshLZhtd0LgndZFBZVltAj_HemdhbjO_Zo8ZuVM,132252
58
58
  opencos/hw/pcie.py,sha256=VUJljaZJYgScAAx5yn7F6GoA8K9eTcw24otYZbkMpYs,3035
59
59
  opencos/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- opencos/tools/cocotb.py,sha256=mkhdbBbkOcPPct1TZcKH6wPPT7pjzRH_6wCNH2qgXOM,19660
61
- opencos/tools/invio.py,sha256=pxrS5oaNTcEv-ToXdhFBJZF5XhTmZnJz9CQ8NnLoty8,3155
60
+ opencos/tools/cocotb.py,sha256=rI3yIdT7N_K16VfvNzEF-WTfmy9oVQZjTAoVodujI7c,19670
61
+ opencos/tools/invio.py,sha256=ecBjiocHMMs73OWa2a16dsHfGjA6YuZRaNDo1BPLsWY,3165
62
62
  opencos/tools/invio_helpers.py,sha256=86WOGmSf4m_lEqBtK3DLjWqI0jnqAWzBEBRYfBUGiSY,8804
63
- opencos/tools/invio_yosys.py,sha256=zPVX5Bv-mR4zaUZiH0QqGF4Vbm_LXAf75mDW6ywse5c,6026
64
- opencos/tools/iverilog.py,sha256=aehXQV22U7MIaH8XuEI9ApWztsez0NaW960_Z01oZWc,6789
63
+ opencos/tools/invio_yosys.py,sha256=bM100oNS8TZZRS20xqmupA_vLuPUAUTrMNYiks-VDmg,6036
64
+ opencos/tools/iverilog.py,sha256=RGepWE6_V0v9guCcWt1ffdp-am5WoWYMLPWVglHZ5ks,6799
65
65
  opencos/tools/modelsim_ase.py,sha256=NEzAXJtiVWkKb3N-O3PYxSnnFmrq8LNrqjxFNBwzfKI,2254
66
- opencos/tools/quartus.py,sha256=gtswIhpnHjUTmw5g1BRxhjB6tofXEsx-I6IySjwyF94,32303
66
+ opencos/tools/quartus.py,sha256=ztDwyLWxDbnvgLq1JiHpQjuz3wvIaAHjqUZlq_oL3Gw,32313
67
67
  opencos/tools/questa.py,sha256=QP0JCt8rWf0-snncNP0_Pi6oRY6_Z9Hwix1IYlRdGEc,2057
68
- opencos/tools/questa_common.py,sha256=JYF4MrAcELurcA-t3Hzjb9KKtzHBEEYmXWKWAt8Gi0c,21931
68
+ opencos/tools/questa_common.py,sha256=z0T27aMUG5suGDAdxVlxmuGHBe2D71_N7KZT1TDoUg8,21976
69
69
  opencos/tools/questa_fe.py,sha256=yYNlUnA2pQ8-gELLajnvJgqg6ZXb6F26YRmyvrlNFOA,2155
70
70
  opencos/tools/questa_fse.py,sha256=CjOAn1Ik-3Hd-vyUH_WyTTJxH2yPfhNEfXbedCir7J4,2116
71
- opencos/tools/riviera.py,sha256=IKmVD0hvTTo2JHvvz7r4SN7uQ_UpWpVIF0toZbSqNe8,19736
72
- opencos/tools/slang.py,sha256=MxRwu4laSbv7oa3lO-BKg4McL7KAckSA003sL-9sY3U,9682
73
- opencos/tools/slang_yosys.py,sha256=z8gUcNSGDl5S6Ufxdx54WWe5v73w0UydErBKFWBR6ZI,10154
74
- opencos/tools/surelog.py,sha256=QaXS1EWI2b1TqBoekpXndoHxS6t2e8SD-I2Ryi-gHGs,6666
71
+ opencos/tools/riviera.py,sha256=Q5CrO-dRbc9EqUEG0K0z38-SIdeFvE4IuW7ga9W2n5I,19746
72
+ opencos/tools/slang.py,sha256=RiUIPzjDPsFAXbLqHZFPPbXpCQbudfQlL1AjCoAfkvc,9692
73
+ opencos/tools/slang_yosys.py,sha256=moIRUYpSEr3lf6KtAOwd7Z3zirixFDVup3CAzyeJqws,11127
74
+ opencos/tools/surelog.py,sha256=-WDgRq8SIhtifp8FOxW-b3l2SHSmakBKjo--CBjYy5c,6676
75
75
  opencos/tools/tabbycad_yosys.py,sha256=J4RgfuzYLiBK1U8odXiovXZhgkcDFPlbxt73SppksVA,7657
76
- opencos/tools/verilator.py,sha256=uxJs5VpE6pHIR3c5bJbQbjSoymIqNOG861ix2IR_c3Y,25363
77
- opencos/tools/vivado.py,sha256=BHnfJ-TqUYwdKFC1zHJ3x6xkLOgn2xdQbxySbBEWFYk,50149
78
- opencos/tools/yosys.py,sha256=8r3pxNod-ntWAHrDDL0HCT9mCkZ6qcNnOtLnIpOTi9g,28807
76
+ opencos/tools/verilator.py,sha256=Q0kTehLWFss6IDPdMa7eiei7eJZlCjISuFmSgJLYGgo,32958
77
+ opencos/tools/vivado.py,sha256=XNURtPZVIO7J9nZeFQh1xrZibe97P7o-kcVaf3NmukQ,50159
78
+ opencos/tools/yosys.py,sha256=WeGt13cr6E3D5WwU8pPVn4sdTgSdbxEtb0hTEFvw0M8,33455
79
79
  opencos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  opencos/utils/dict_helpers.py,sha256=xCdfE8SE-D6hNu5dG_d46A2g6au6h1h7SFpzYmeyRtA,810
81
+ opencos/utils/docker_checks.py,sha256=uvTZqoYBpPkuEtUXWXwN60k0NFeBXntHfMYsU-6-wuw,7162
81
82
  opencos/utils/markup_helpers.py,sha256=F_Emh2kT2gETYf7C-Jy5yJjsiHiPUtBpQzONsCka6Eo,4604
82
83
  opencos/utils/status_constants.py,sha256=na6YsqlsCwIYzTXWE14dPadUYRNTrOS6YTXHCer2NbA,635
83
84
  opencos/utils/str_helpers.py,sha256=ctl0Zh0h0JW7OlReeSdGxB9wODQYzmMO-9-h55rSRv0,8419
84
- opencos/utils/subprocess_helpers.py,sha256=Wqqs8FKm3XIjmD9GUYM-HWVJH7TxWJJA37A07J4fQ4w,6619
85
+ opencos/utils/subprocess_helpers.py,sha256=--HvaCbLVMCYAZZdIyPqze1sk0BjL6WQrwXAkhwpl8s,6726
85
86
  opencos/utils/vscode_helper.py,sha256=8epyEeYfXONwiSoc5KZjUfKc8vgLryct8yckJYie88U,1398
86
87
  opencos/utils/vsim_helper.py,sha256=-TJK4Dh8LZ4DCM8GrS9Wka4HE_WMGG_aKwTZtKBrEOE,2994
87
- opencos_eda-0.3.16.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
88
- opencos_eda-0.3.16.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
89
- opencos_eda-0.3.16.dist-info/METADATA,sha256=bpoV7isF82UmnbNteKPaV_UU0nryqDcX34ZoXG5u2Mc,1165
90
- opencos_eda-0.3.16.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
91
- opencos_eda-0.3.16.dist-info/entry_points.txt,sha256=QOlMZnQeqqwOzIaeKBcY_WlMR3idmOAEbGFh2dXlqJw,290
92
- opencos_eda-0.3.16.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
93
- opencos_eda-0.3.16.dist-info/RECORD,,
88
+ opencos_eda-0.3.17.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
89
+ opencos_eda-0.3.17.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
90
+ opencos_eda-0.3.17.dist-info/METADATA,sha256=hGN78dXH88mPldkSCE4nSPizdP0UR0ceWKFp1Lus_Uo,1165
91
+ opencos_eda-0.3.17.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
92
+ opencos_eda-0.3.17.dist-info/entry_points.txt,sha256=QOlMZnQeqqwOzIaeKBcY_WlMR3idmOAEbGFh2dXlqJw,290
93
+ opencos_eda-0.3.17.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
94
+ opencos_eda-0.3.17.dist-info/RECORD,,