opencos-eda 0.3.1__py3-none-any.whl → 0.3.2__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.
- opencos/deps/deps_file.py +42 -21
- opencos/eda_base.py +37 -17
- opencos/tests/helpers.py +15 -5
- opencos/tests/test_eda.py +3 -13
- opencos/tests/test_tools.py +6 -8
- {opencos_eda-0.3.1.dist-info → opencos_eda-0.3.2.dist-info}/METADATA +1 -1
- {opencos_eda-0.3.1.dist-info → opencos_eda-0.3.2.dist-info}/RECORD +12 -12
- {opencos_eda-0.3.1.dist-info → opencos_eda-0.3.2.dist-info}/WHEEL +0 -0
- {opencos_eda-0.3.1.dist-info → opencos_eda-0.3.2.dist-info}/entry_points.txt +0 -0
- {opencos_eda-0.3.1.dist-info → opencos_eda-0.3.2.dist-info}/licenses/LICENSE +0 -0
- {opencos_eda-0.3.1.dist-info → opencos_eda-0.3.2.dist-info}/licenses/LICENSE.spdx +0 -0
- {opencos_eda-0.3.1.dist-info → opencos_eda-0.3.2.dist-info}/top_level.txt +0 -0
opencos/deps/deps_file.py
CHANGED
|
@@ -249,8 +249,11 @@ class DepsFile:
|
|
|
249
249
|
self.rel_deps_file = os.path.join(os.path.relpath(deps_path), deps_leaf)
|
|
250
250
|
|
|
251
251
|
self.error = getattr(command_design_ref, 'error', None)
|
|
252
|
+
self.error_ifarg = getattr(command_design_ref, 'error_ifarg', None)
|
|
252
253
|
if not self.error:
|
|
253
254
|
self.error = util.error
|
|
255
|
+
if not self.error_ifarg:
|
|
256
|
+
self.error_ifarg = util.error
|
|
254
257
|
|
|
255
258
|
|
|
256
259
|
def found(self) -> bool:
|
|
@@ -320,19 +323,28 @@ class DepsFile:
|
|
|
320
323
|
# If we don't have caller_info, likely came from command line (or DEPS JSON data):
|
|
321
324
|
if '.' in target_node:
|
|
322
325
|
# Likely a filename (target_node does not include path)
|
|
323
|
-
self.
|
|
324
|
-
|
|
325
|
-
|
|
326
|
+
self.error_ifarg(
|
|
327
|
+
f'Trying to resolve command-line target={t_full} (file?):',
|
|
328
|
+
f'File={t_node} not found in directory={t_path}',
|
|
329
|
+
arg='error-unknown-args',
|
|
330
|
+
error_code=EDA_DEPS_FILE_NOT_FOUND
|
|
331
|
+
)
|
|
326
332
|
elif not self.rel_deps_file:
|
|
327
333
|
# target, but there's no DEPS file
|
|
328
|
-
self.
|
|
329
|
-
|
|
330
|
-
|
|
334
|
+
self.error_ifarg(
|
|
335
|
+
f'Trying to resolve command-line target={t_full}:',
|
|
336
|
+
f'but path {t_path} has no DEPS markup file (DEPS.yml)',
|
|
337
|
+
arg='error-unknown-args',
|
|
338
|
+
error_code=EDA_DEPS_FILE_NOT_FOUND
|
|
339
|
+
)
|
|
331
340
|
else:
|
|
332
341
|
self.warning_show_available_targets()
|
|
333
|
-
self.
|
|
334
|
-
|
|
335
|
-
|
|
342
|
+
self.error_ifarg(
|
|
343
|
+
f'Trying to resolve command-line target={t_full}:',
|
|
344
|
+
f'was not found in deps_file={self.rel_deps_file}',
|
|
345
|
+
arg='error-unknown-args',
|
|
346
|
+
error_code=EDA_DEPS_TARGET_NOT_FOUND
|
|
347
|
+
)
|
|
336
348
|
|
|
337
349
|
else:
|
|
338
350
|
# If we have caller_info, then this was a recursive call from another
|
|
@@ -340,22 +352,31 @@ class DepsFile:
|
|
|
340
352
|
|
|
341
353
|
if '.' in target_node:
|
|
342
354
|
# Likely a filename (target_node does not include path)
|
|
343
|
-
self.
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
355
|
+
self.error_ifarg(
|
|
356
|
+
f'Trying to resolve target={t_full} (file?):',
|
|
357
|
+
f'called from {caller_info},',
|
|
358
|
+
f'File={t_node} not found in directory={t_path}',
|
|
359
|
+
arg='error-unknown-args',
|
|
360
|
+
error_code=EDA_DEPS_FILE_NOT_FOUND
|
|
361
|
+
)
|
|
347
362
|
elif not self.rel_deps_file:
|
|
348
363
|
# target, but there's no DEPS file
|
|
349
|
-
self.
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
364
|
+
self.error_ifarg(
|
|
365
|
+
f'Trying to resolve target={t_full}:',
|
|
366
|
+
f'called from {caller_info},',
|
|
367
|
+
f'but {t_path} has no DEPS markup file (DEPS.yml)',
|
|
368
|
+
arg='error-unknown-args',
|
|
369
|
+
error_code=EDA_DEPS_FILE_NOT_FOUND
|
|
370
|
+
)
|
|
353
371
|
else:
|
|
354
372
|
self.warning_show_available_targets()
|
|
355
|
-
self.
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
373
|
+
self.error_ifarg(
|
|
374
|
+
f'Trying to resolve target={t_full}:',
|
|
375
|
+
f'called from {caller_info},',
|
|
376
|
+
f'Target not found in deps_file={self.rel_deps_file}',
|
|
377
|
+
arg='error-unknown-args',
|
|
378
|
+
error_code=EDA_DEPS_TARGET_NOT_FOUND
|
|
379
|
+
)
|
|
359
380
|
else:
|
|
360
381
|
debug(f'Found {target_node=} in deps_file={self.rel_deps_file}')
|
|
361
382
|
found_target = True
|
opencos/eda_base.py
CHANGED
|
@@ -250,7 +250,9 @@ class Command: # pylint: disable=too-many-public-methods
|
|
|
250
250
|
' --disable-tags has higher precedence than --enable-tags.'),
|
|
251
251
|
'test-mode': ('command and tool dependent, usually stops the command early without'
|
|
252
252
|
' executing.'),
|
|
253
|
-
'error-unknown-args':
|
|
253
|
+
'error-unknown-args': (
|
|
254
|
+
'Enable errors on unknown/unparsable args, or unknown/nonexistent files, or targets'
|
|
255
|
+
),
|
|
254
256
|
})
|
|
255
257
|
self.modified_args = {}
|
|
256
258
|
self.config = copy.deepcopy(config) # avoid external modifications.
|
|
@@ -497,9 +499,11 @@ class Command: # pylint: disable=too-many-public-methods
|
|
|
497
499
|
|
|
498
500
|
# Do some minimal type handling, preserving the type(self.args[key])
|
|
499
501
|
if key not in self.args:
|
|
500
|
-
self.
|
|
502
|
+
self.error_ifarg(
|
|
501
503
|
f'set_arg, {key=} not in self.args {value=}',
|
|
502
|
-
f'({self.command_name=}, {self.__class__.__name__=})'
|
|
504
|
+
f'({self.command_name=}, {self.__class__.__name__=})',
|
|
505
|
+
arg='error-unknown-args',
|
|
506
|
+
error_code=status_constants.EDA_COMMAND_OR_ARGS_ERROR
|
|
503
507
|
)
|
|
504
508
|
|
|
505
509
|
cur_value = self.args[key]
|
|
@@ -695,9 +699,11 @@ class Command: # pylint: disable=too-many-public-methods
|
|
|
695
699
|
_, unparsed = self.run_argparser_on_list(tokens)
|
|
696
700
|
if process_all and unparsed:
|
|
697
701
|
self.warning_show_known_args()
|
|
698
|
-
self.
|
|
702
|
+
self.error_ifarg(
|
|
699
703
|
f"Didn't understand argument: '{unparsed=}' in",
|
|
700
|
-
f"{self.command_name=} context, {pwd=}"
|
|
704
|
+
f"{self.command_name=} context, {pwd=}",
|
|
705
|
+
arg='error-unknown-args',
|
|
706
|
+
error_code=status_constants.EDA_COMMAND_OR_ARGS_ERROR
|
|
701
707
|
)
|
|
702
708
|
|
|
703
709
|
return unparsed
|
|
@@ -914,13 +920,17 @@ class Command: # pylint: disable=too-many-public-methods
|
|
|
914
920
|
lines.append(self.pretty_str_known_args(command=commands[-1])) # use last command if > 1
|
|
915
921
|
util.warning("\n".join(lines))
|
|
916
922
|
|
|
917
|
-
def
|
|
923
|
+
def error_ifarg(
|
|
924
|
+
self, *msg, arg: str, error_code: int = status_constants.EDA_COMMAND_OR_ARGS_ERROR
|
|
925
|
+
) -> None:
|
|
918
926
|
'''For errors involving an unknown --arg, they can be optionally disabled
|
|
919
927
|
|
|
920
|
-
using --no-error-unknown-args
|
|
928
|
+
using CLI: --no-error-unknown-args, and this method arg='error-uknown-arg'
|
|
929
|
+
|
|
930
|
+
Note if arg is not present in self.args, the error is enabled.
|
|
921
931
|
'''
|
|
922
|
-
if self.args
|
|
923
|
-
self.error(*msg, error_code=
|
|
932
|
+
if self.args.get(arg, True):
|
|
933
|
+
self.error(*msg, error_code=error_code)
|
|
924
934
|
else:
|
|
925
935
|
util.warning(*msg)
|
|
926
936
|
|
|
@@ -1497,8 +1507,12 @@ class CommandDesign(Command): # pylint: disable=too-many-instance-attributes
|
|
|
1497
1507
|
found_target = True
|
|
1498
1508
|
break # move on to the next target
|
|
1499
1509
|
if not found_target and error_on_not_found: # if STILL not found_this_target...
|
|
1500
|
-
|
|
1501
|
-
|
|
1510
|
+
# allow this if --no-error-unknown-args:
|
|
1511
|
+
self.error_ifarg(
|
|
1512
|
+
f"Unable to resolve {target=}",
|
|
1513
|
+
arg='error-unknown-args',
|
|
1514
|
+
error_code=status_constants.EDA_DEPS_TARGET_NOT_FOUND
|
|
1515
|
+
)
|
|
1502
1516
|
|
|
1503
1517
|
# if we've found any target since being called, it means we found the one we were called for
|
|
1504
1518
|
return found_target
|
|
@@ -1660,9 +1674,11 @@ class CommandDesign(Command): # pylint: disable=too-many-instance-attributes
|
|
|
1660
1674
|
if process_all and possible_unparsed_args:
|
|
1661
1675
|
_tool = self.safe_which_tool()
|
|
1662
1676
|
self.warning_show_known_args()
|
|
1663
|
-
self.
|
|
1677
|
+
self.error_ifarg(
|
|
1664
1678
|
f"Didn't understand unparsed args: {possible_unparsed_args}, for command",
|
|
1665
|
-
f"'{self.command_name}', tool '{_tool}'"
|
|
1679
|
+
f"'{self.command_name}', tool '{_tool}'",
|
|
1680
|
+
arg='error-unknown-args',
|
|
1681
|
+
error_code=status_constants.EDA_COMMAND_OR_ARGS_ERROR
|
|
1666
1682
|
)
|
|
1667
1683
|
|
|
1668
1684
|
remove_list = []
|
|
@@ -1721,9 +1737,11 @@ class CommandDesign(Command): # pylint: disable=too-many-instance-attributes
|
|
|
1721
1737
|
# we were unable to figure out what this command line token is for...
|
|
1722
1738
|
if process_all and unparsed:
|
|
1723
1739
|
self.warning_show_known_args()
|
|
1724
|
-
self.
|
|
1740
|
+
self.error_ifarg(
|
|
1725
1741
|
f"Didn't understand remaining args or targets {unparsed=} for command",
|
|
1726
|
-
f"'{self.command_name}'"
|
|
1742
|
+
f"'{self.command_name}'",
|
|
1743
|
+
arg='error-unknown-args',
|
|
1744
|
+
error_code=status_constants.EDA_COMMAND_OR_ARGS_ERROR
|
|
1727
1745
|
)
|
|
1728
1746
|
|
|
1729
1747
|
# handle a missing self.args['top'] with last filepath or last target:
|
|
@@ -2269,9 +2287,11 @@ class CommandParallel(Command):
|
|
|
2269
2287
|
bad_remaining_args = [x for x in single_cmd_unparsed if x.startswith('-')]
|
|
2270
2288
|
if bad_remaining_args:
|
|
2271
2289
|
self.warning_show_known_args(command=f'{self.command_name} {command}')
|
|
2272
|
-
self.
|
|
2290
|
+
self.error_ifarg(
|
|
2273
2291
|
f'for {self.command_name} {command=} the following args are unknown',
|
|
2274
|
-
f'{bad_remaining_args}'
|
|
2292
|
+
f'{bad_remaining_args}',
|
|
2293
|
+
arg='error-unknown-args',
|
|
2294
|
+
error_code=status_constants.EDA_COMMAND_OR_ARGS_ERROR
|
|
2275
2295
|
)
|
|
2276
2296
|
|
|
2277
2297
|
# Remove unparsed args starting with '+', since those are commonly sent downstream to
|
opencos/tests/helpers.py
CHANGED
|
@@ -9,12 +9,14 @@ from pathlib import Path
|
|
|
9
9
|
|
|
10
10
|
from contextlib import redirect_stdout, redirect_stderr
|
|
11
11
|
|
|
12
|
-
from opencos import eda
|
|
13
|
-
from opencos import deps_schema
|
|
12
|
+
from opencos import eda, eda_tool_helper, deps_schema
|
|
14
13
|
from opencos.utils.markup_helpers import yaml_safe_load
|
|
15
14
|
from opencos.utils import status_constants
|
|
16
15
|
from opencos.utils.subprocess_helpers import subprocess_run_background
|
|
17
16
|
|
|
17
|
+
# Figure out what tools the system has available, without calling eda.main(..)
|
|
18
|
+
config, tools_loaded = eda_tool_helper.get_config_and_tools_loaded()
|
|
19
|
+
|
|
18
20
|
|
|
19
21
|
def eda_wrap_is_sim_fail(rc: int, quiet: bool = False) -> bool:
|
|
20
22
|
'''Because eda_wrap calls eda_main(..) and will continue running
|
|
@@ -30,11 +32,11 @@ def eda_wrap_is_sim_fail(rc: int, quiet: bool = False) -> bool:
|
|
|
30
32
|
status_constants.EDA_DEFAULT_ERROR
|
|
31
33
|
)
|
|
32
34
|
|
|
33
|
-
def can_run_eda_command(*commands,
|
|
35
|
+
def can_run_eda_command(*commands, cfg: dict = config) -> bool:
|
|
34
36
|
'''Returns True if we have any installed tool that can run: eda <command>'''
|
|
35
37
|
runnable = []
|
|
36
38
|
for command in list(commands):
|
|
37
|
-
handler =
|
|
39
|
+
handler = cfg['command_handler'].get(command, None)
|
|
38
40
|
if not handler:
|
|
39
41
|
return False
|
|
40
42
|
if handler and getattr(handler, 'CHECK_REQUIRES', []):
|
|
@@ -44,7 +46,7 @@ def can_run_eda_command(*commands, config: dict) -> bool:
|
|
|
44
46
|
# We cannot run tools that have disable-auto set:
|
|
45
47
|
tool = getattr(handler, '_TOOL', '')
|
|
46
48
|
if handler and tool:
|
|
47
|
-
entry =
|
|
49
|
+
entry = cfg['auto_tools_order'][0].get(tool, {})
|
|
48
50
|
if entry and entry.get('disable-auto', False):
|
|
49
51
|
# This tool cannot automatically run our command.
|
|
50
52
|
return False
|
|
@@ -52,6 +54,14 @@ def can_run_eda_command(*commands, config: dict) -> bool:
|
|
|
52
54
|
runnable.append(True)
|
|
53
55
|
return runnable and all(runnable)
|
|
54
56
|
|
|
57
|
+
def can_run_eda_sim(cfg: dict = config) -> bool:
|
|
58
|
+
'''Returns True if we have any installed tool that can run: eda sim'''
|
|
59
|
+
return can_run_eda_command('sim', cfg=cfg)
|
|
60
|
+
|
|
61
|
+
def can_run_eda_elab(cfg: dict = config) -> bool:
|
|
62
|
+
'''Returns True if we have any installed tool that can run: eda elab'''
|
|
63
|
+
return can_run_eda_command('elab', cfg=cfg)
|
|
64
|
+
|
|
55
65
|
def chdir_remove_work_dir(startpath, relpath):
|
|
56
66
|
'''Changes dir to startpath/relpath, removes the work directories (eda.work, eda.export*)'''
|
|
57
67
|
os.chdir(os.path.join(str(Path(startpath)), str(Path(relpath))))
|
opencos/tests/test_eda.py
CHANGED
|
@@ -23,11 +23,12 @@ import subprocess
|
|
|
23
23
|
|
|
24
24
|
import pytest
|
|
25
25
|
|
|
26
|
-
from opencos import eda
|
|
26
|
+
from opencos import eda
|
|
27
27
|
from opencos.utils.markup_helpers import yaml_safe_load
|
|
28
28
|
from opencos.tests import helpers
|
|
29
29
|
from opencos.tests.helpers import eda_wrap, eda_sim_wrap, eda_elab_wrap, \
|
|
30
|
-
Helpers
|
|
30
|
+
Helpers, tools_loaded, can_run_eda_sim
|
|
31
|
+
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
THISPATH = os.path.dirname(__file__)
|
|
@@ -36,17 +37,6 @@ def chdir_remove_work_dir(relpath):
|
|
|
36
37
|
'''Changes dir to relpath, removes the work directories (eda.work, eda.export*)'''
|
|
37
38
|
return helpers.chdir_remove_work_dir(THISPATH, relpath)
|
|
38
39
|
|
|
39
|
-
# Figure out what tools the system has available, without calling eda.main(..)
|
|
40
|
-
config, tools_loaded = eda_tool_helper.get_config_and_tools_loaded()
|
|
41
|
-
|
|
42
|
-
def can_run_eda_sim() -> bool:
|
|
43
|
-
'''Returns True if we have any installed tool that can run: eda sim'''
|
|
44
|
-
return helpers.can_run_eda_command('sim', config=config)
|
|
45
|
-
|
|
46
|
-
def can_run_eda_elab() -> bool:
|
|
47
|
-
'''Returns True if we have any installed tool that can run: eda elab'''
|
|
48
|
-
return helpers.can_run_eda_command('elab', config=config)
|
|
49
|
-
|
|
50
40
|
@pytest.mark.skipif(
|
|
51
41
|
'verilator' not in tools_loaded and 'vivado' not in tools_loaded,
|
|
52
42
|
reason="requires verilator OR vivado"
|
opencos/tests/test_tools.py
CHANGED
|
@@ -6,25 +6,23 @@ import os
|
|
|
6
6
|
import sys
|
|
7
7
|
import pytest
|
|
8
8
|
|
|
9
|
-
from opencos import eda,
|
|
9
|
+
from opencos import eda, eda_base
|
|
10
10
|
|
|
11
11
|
from opencos.tools.verilator import ToolVerilator
|
|
12
12
|
from opencos.tools.vivado import ToolVivado
|
|
13
13
|
from opencos.tools.cocotb import ToolCocotb
|
|
14
14
|
from opencos.tests import helpers
|
|
15
|
-
from opencos.tests.helpers import eda_wrap, eda_wrap_is_sim_fail
|
|
15
|
+
from opencos.tests.helpers import eda_wrap, eda_wrap_is_sim_fail, config, tools_loaded
|
|
16
16
|
from opencos.utils.markup_helpers import yaml_safe_load
|
|
17
17
|
from opencos.utils import status_constants
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
THISPATH = os.path.dirname(__file__)
|
|
21
21
|
|
|
22
22
|
def chdir_remove_work_dir(relpath):
|
|
23
23
|
'''Changes dir to relpath, removes the work directories (eda.work, eda.export*)'''
|
|
24
|
-
return helpers.chdir_remove_work_dir(
|
|
24
|
+
return helpers.chdir_remove_work_dir(THISPATH, relpath)
|
|
25
25
|
|
|
26
|
-
# Figure out what tools the system has available, without calling eda.main(..)
|
|
27
|
-
config, tools_loaded = eda_tool_helper.get_config_and_tools_loaded()
|
|
28
26
|
|
|
29
27
|
def test_tools_loaded():
|
|
30
28
|
'''Does not directly call 'eda.main' instead create a few Tool
|
|
@@ -37,7 +35,7 @@ def test_tools_loaded():
|
|
|
37
35
|
# It's possible we're running in some container or install that has no tools, for example,
|
|
38
36
|
# Windows.
|
|
39
37
|
if sys.platform.startswith('win') and \
|
|
40
|
-
not helpers.can_run_eda_command('elab', 'sim',
|
|
38
|
+
not helpers.can_run_eda_command('elab', 'sim', cfg=config):
|
|
41
39
|
# Windows, not handlers for elab or sim:
|
|
42
40
|
pass
|
|
43
41
|
else:
|
|
@@ -129,7 +127,7 @@ def test_sim_elab_tools_pass_or_fail(command, tool, target, sim_expect_pass, add
|
|
|
129
127
|
added_args = added_sim_args_str.split()
|
|
130
128
|
|
|
131
129
|
relative_dir = "deps_files/test_err_fatal"
|
|
132
|
-
os.chdir(os.path.join(
|
|
130
|
+
os.chdir(os.path.join(THISPATH, relative_dir))
|
|
133
131
|
rc = eda.main(command, '--tool', tool, *(added_args), target)
|
|
134
132
|
print(f'{rc=}')
|
|
135
133
|
if command != 'sim' or sim_expect_pass:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opencos-eda
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
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
|
|
@@ -3,7 +3,7 @@ opencos/_version.py,sha256=KaWIjS0c08g-C0fgYY1kXwSPqhOFxaq5pYEeoZhOR_I,617
|
|
|
3
3
|
opencos/_waves_pkg.sv,sha256=TL5YT9lT-fn2FD54MbVVZROmZ7vtW3ScA_rM2eRzKmU,2068
|
|
4
4
|
opencos/deps_schema.py,sha256=VUdXuq43mKfM-U4x7DSA28-MH1Xqxre6V7Ttw2DeOqI,16762
|
|
5
5
|
opencos/eda.py,sha256=91E-EsyZS-uRadApP-h2onW6rpvLBnrpJoT_9tRtsS8,23322
|
|
6
|
-
opencos/eda_base.py,sha256=
|
|
6
|
+
opencos/eda_base.py,sha256=jf4t11UPj39swL41z-EJiGTOnHvRScaQc-SAjpZ5XI4,109651
|
|
7
7
|
opencos/eda_config.py,sha256=z3yQOPGBX7-yKp6BdQYfJ9eOJf-Jctl-mwCDj3vj2BI,12712
|
|
8
8
|
opencos/eda_config_defaults.yml,sha256=LF0yAncYeaPtZIoAfEeo2aiDXT4cjYa99soGks0WRzM,16063
|
|
9
9
|
opencos/eda_config_max_verilator_waivers.yml,sha256=lTAU4IOEbUWVlPzuer1YYhIyxpPINeA4EJqcRIT-Ymk,840
|
|
@@ -40,22 +40,22 @@ opencos/commands/waves.py,sha256=nrp3ALwfJujZns44tgCgia_dEedQyKe0T3fuws8h39U,769
|
|
|
40
40
|
opencos/deps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
41
|
opencos/deps/defaults.py,sha256=NXh3V4oInrBVlDw64B2OCI77wzdn1NtaD64srhBnmZU,1486
|
|
42
42
|
opencos/deps/deps_commands.py,sha256=q4JfSfzRO2nM2zdNT4enCy33FokEytZYQJn1HJ6osJk,16606
|
|
43
|
-
opencos/deps/deps_file.py,sha256=
|
|
43
|
+
opencos/deps/deps_file.py,sha256=YQ5ftYvppRTqUto22r-XDH6-bcMO7cA-WiJ7QzPjljY,17103
|
|
44
44
|
opencos/deps/deps_processor.py,sha256=DBaMUEnpoIL4xaNPs2f2AFGcWLST5pP_Qgup9r-8D7M,41403
|
|
45
45
|
opencos/hw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
46
|
opencos/hw/oc_cli.py,sha256=U1JGlshLZhtd0LgndZFBZVltAj_HemdhbjO_Zo8ZuVM,132252
|
|
47
47
|
opencos/hw/pcie.py,sha256=VUJljaZJYgScAAx5yn7F6GoA8K9eTcw24otYZbkMpYs,3035
|
|
48
48
|
opencos/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
49
|
opencos/tests/custom_config.yml,sha256=TRoVM9ZFKPOA_8JmlpzaMhnGO1txmaD14N_8P1oqzew,257
|
|
50
|
-
opencos/tests/helpers.py,sha256=
|
|
50
|
+
opencos/tests/helpers.py,sha256=wkEzYRt78B4b7Qni2GoWcncrhWjZ3nLhDMHtPYvvW8w,11725
|
|
51
51
|
opencos/tests/test_build.py,sha256=FQAxOpLVQShAHD_L5rqJctPeSAoqoOCNFI0RXflLuY0,387
|
|
52
52
|
opencos/tests/test_deps_helpers.py,sha256=uQZxleh6aKO-mZQhagHh5xLIBbpQ8dav7-5D0eemq_g,8164
|
|
53
53
|
opencos/tests/test_deps_schema.py,sha256=T3P9KjaMyKsk8b7snNVvNSsom2hIJcg6Z9apYiXoH9Y,941
|
|
54
|
-
opencos/tests/test_eda.py,sha256=
|
|
54
|
+
opencos/tests/test_eda.py,sha256=PhAFCqoZxUhjuSvNeHpTHdwt8UhHjRdVppesgcWBX64,37407
|
|
55
55
|
opencos/tests/test_eda_elab.py,sha256=AjU4WMYtFoHpNe1Z4yWWpxDKy4V_hAjL5rl3jqphZrk,3179
|
|
56
56
|
opencos/tests/test_eda_synth.py,sha256=BtBrNVJ9C-LJt3K0wNNS5ukEVrET16AbRXl2IzxudJ8,5744
|
|
57
57
|
opencos/tests/test_oc_cli.py,sha256=w-F-LjSSWVql3D2WG8tcV4_C52i-hL_2WT3oDpKQn9s,734
|
|
58
|
-
opencos/tests/test_tools.py,sha256
|
|
58
|
+
opencos/tests/test_tools.py,sha256=JFjwq8YJPxaALbIEZUA-1VR8O_N-zmmM4ueboFEYA4Y,13589
|
|
59
59
|
opencos/tests/deps_files/command_order/DEPS.yml,sha256=PSzBBJDSU8ccCy3Ls5j_ws_vepmUkTIgWjaMjBhNbSg,806
|
|
60
60
|
opencos/tests/deps_files/error_msgs/DEPS.yml,sha256=fYvHouIscOlr8V28bqx9SoxRBpDBLX4AG-AkVXh8qbo,717
|
|
61
61
|
opencos/tests/deps_files/iverilog_test/DEPS.yml,sha256=vDylEuLt642lhRSvOr3F5ziB5lhPSwkaUGN4_mWJw-c,40
|
|
@@ -88,10 +88,10 @@ opencos/utils/str_helpers.py,sha256=726ScK5-v7QkBi-zqESKZLsOl2_ya4vVJ5ZhxJqmBFo,
|
|
|
88
88
|
opencos/utils/subprocess_helpers.py,sha256=xemAGPey6M0sWY_FElvr-Z0phCfdjaC-znP8FKihPaE,3535
|
|
89
89
|
opencos/utils/vscode_helper.py,sha256=9nHyMUIL-gzfW-qLH06sgaCnVK-YTOtu6pusitNNhL8,1363
|
|
90
90
|
opencos/utils/vsim_helper.py,sha256=1johPOGbjbMgnCDSTpgsQcSuAquiqq1Y2MBxS6WY6b4,1552
|
|
91
|
-
opencos_eda-0.3.
|
|
92
|
-
opencos_eda-0.3.
|
|
93
|
-
opencos_eda-0.3.
|
|
94
|
-
opencos_eda-0.3.
|
|
95
|
-
opencos_eda-0.3.
|
|
96
|
-
opencos_eda-0.3.
|
|
97
|
-
opencos_eda-0.3.
|
|
91
|
+
opencos_eda-0.3.2.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
|
92
|
+
opencos_eda-0.3.2.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
|
|
93
|
+
opencos_eda-0.3.2.dist-info/METADATA,sha256=0PgS7CqBIdwYkBXPQ_6PaCFCNFKEsRz5G_owk48zkJI,666
|
|
94
|
+
opencos_eda-0.3.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
95
|
+
opencos_eda-0.3.2.dist-info/entry_points.txt,sha256=6n1T5NwVYDhN5l1h5zmyT197G4pE0SySDreB0QJzJR0,218
|
|
96
|
+
opencos_eda-0.3.2.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
|
|
97
|
+
opencos_eda-0.3.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|