opencos-eda 0.3.8__py3-none-any.whl → 0.3.10__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 (42) hide show
  1. opencos/commands/deps_help.py +40 -21
  2. opencos/commands/sim.py +0 -1
  3. opencos/deps/deps_file.py +82 -79
  4. opencos/eda.py +108 -17
  5. opencos/eda_base.py +8 -4
  6. opencos/eda_config.py +8 -1
  7. opencos/eda_config_defaults.yml +14 -5
  8. opencos/eda_deps_bash_completion.bash +37 -15
  9. opencos/tools/modelsim_ase.py +19 -378
  10. opencos/tools/questa.py +42 -247
  11. opencos/tools/questa_common.py +480 -0
  12. opencos/tools/questa_fe.py +84 -0
  13. opencos/tools/questa_fse.py +7 -8
  14. opencos/tools/riviera.py +27 -10
  15. opencos/tools/verilator.py +1 -0
  16. opencos/utils/str_helpers.py +7 -0
  17. opencos/utils/vsim_helper.py +53 -21
  18. {opencos_eda-0.3.8.dist-info → opencos_eda-0.3.10.dist-info}/METADATA +2 -1
  19. {opencos_eda-0.3.8.dist-info → opencos_eda-0.3.10.dist-info}/RECORD +24 -40
  20. {opencos_eda-0.3.8.dist-info → opencos_eda-0.3.10.dist-info}/entry_points.txt +1 -0
  21. opencos/tests/__init__.py +0 -0
  22. opencos/tests/custom_config.yml +0 -13
  23. opencos/tests/deps_files/command_order/DEPS.yml +0 -44
  24. opencos/tests/deps_files/error_msgs/DEPS.yml +0 -55
  25. opencos/tests/deps_files/iverilog_test/DEPS.yml +0 -4
  26. opencos/tests/deps_files/no_deps_here/DEPS.yml +0 -0
  27. opencos/tests/deps_files/non_sv_reqs/DEPS.yml +0 -50
  28. opencos/tests/deps_files/tags_with_tools/DEPS.yml +0 -54
  29. opencos/tests/deps_files/test_err_fatal/DEPS.yml +0 -4
  30. opencos/tests/helpers.py +0 -354
  31. opencos/tests/test_build.py +0 -12
  32. opencos/tests/test_deps_helpers.py +0 -207
  33. opencos/tests/test_deps_schema.py +0 -30
  34. opencos/tests/test_eda.py +0 -921
  35. opencos/tests/test_eda_elab.py +0 -110
  36. opencos/tests/test_eda_synth.py +0 -150
  37. opencos/tests/test_oc_cli.py +0 -25
  38. opencos/tests/test_tools.py +0 -404
  39. {opencos_eda-0.3.8.dist-info → opencos_eda-0.3.10.dist-info}/WHEEL +0 -0
  40. {opencos_eda-0.3.8.dist-info → opencos_eda-0.3.10.dist-info}/licenses/LICENSE +0 -0
  41. {opencos_eda-0.3.8.dist-info → opencos_eda-0.3.10.dist-info}/licenses/LICENSE.spdx +0 -0
  42. {opencos_eda-0.3.8.dist-info → opencos_eda-0.3.10.dist-info}/top_level.txt +0 -0
@@ -30,6 +30,7 @@ class ToolVerilator(Tool):
30
30
  def get_versions(self) -> str:
31
31
  if self._VERSION:
32
32
  return self._VERSION
33
+ # __init__ would have set self.EXE to full path.
33
34
  path = shutil.which(self._EXE)
34
35
  if not path:
35
36
  self.error(f'"{self._EXE}" not in path or not installed, see {self._URL})')
@@ -203,3 +203,10 @@ def strip_ansi_color(text: str) -> str:
203
203
  '''Strip ANSI color characters from str'''
204
204
  ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])')
205
205
  return ansi_escape.sub('', text)
206
+
207
+ def get_shorter_path_str_rel_vs_abs(rel_path: str) -> str:
208
+ '''Returns the shorter of relative path (input arg) vs abspath (converted)'''
209
+ apath = os.path.abspath(rel_path)
210
+ if len(apath) < len(rel_path):
211
+ return apath
212
+ return rel_path
@@ -5,50 +5,82 @@ Instead, eda.py can call this once, and then query if this tool exists when runn
5
5
  opencos.eda.auto_tool_setup(..)
6
6
  '''
7
7
 
8
+ import os
8
9
  import shutil
9
10
  import subprocess
10
11
 
11
12
  from opencos.util import debug
12
13
 
13
14
  INIT_HAS_RUN = False # pylint: disable=invalid-name
14
- TOOL_IS = {
15
- 'riviera': False,
16
- 'modelsim_ase': False,
17
- 'questa' : False,
18
- 'questa_fse': False
15
+ TOOL_PATH = {
16
+ 'riviera': None,
17
+ 'modelsim_ase': None,
18
+ 'questa' : None,
19
+ 'questa_fe' : None,
20
+ 'questa_fse': None
19
21
  }
20
22
 
23
+ def found() -> str:
24
+ '''Returns the found tool, or blank str'''
25
+ for k,v in TOOL_PATH.items():
26
+ if k and v:
27
+ return k
28
+ return ''
21
29
 
22
- def init() -> None:
23
- '''Sets INIT_HAS_RUN=True (only runs once) and one of TOOL_IS[tool] = True'''
24
- global INIT_HAS_RUN # pylint: disable=global-statement
30
+ def init_get_version(dirpath: str) -> None:
31
+ '''Runs vsim -version using vsim_path, updates TOOL_PATH'''
25
32
 
26
- if INIT_HAS_RUN:
27
- return
28
-
29
- INIT_HAS_RUN = True
30
- vsim_path = shutil.which('vsim')
31
-
32
- if not vsim_path:
33
+ vsim_path = os.path.join(dirpath, 'vsim')
34
+ if not os.access(vsim_path, os.X_OK):
33
35
  return
34
36
 
35
37
  proc = None
36
38
  try:
37
39
  proc = subprocess.run([vsim_path, '-version'], capture_output=True, check=False)
38
40
  except Exception as e:
39
- debug(f'vsim -version: exception {e}')
41
+ debug(f'{vsim_path} -version: exception {e}')
40
42
 
41
43
  if proc is None or proc.returncode != 0:
42
44
  return
43
45
 
44
-
45
46
  stdout_str_lower = proc.stdout.decode('utf-8', errors='replace').lower()
47
+ dirpath = os.path.abspath(dirpath)
48
+ settool = None
46
49
 
47
50
  if all(x in stdout_str_lower for x in ('starter', 'modelsim', 'fpga')):
48
- TOOL_IS['modelsim_ase'] = True
51
+ settool = 'modelsim_ase'
49
52
  elif all(x in stdout_str_lower for x in ('starter', 'questa', 'fpga')):
50
- TOOL_IS['questa_fse'] = True
53
+ settool = 'questa_fse'
54
+ elif all(x in stdout_str_lower for x in ('questa', 'fpga')):
55
+ settool = 'questa_fe'
51
56
  elif all(x in stdout_str_lower for x in ('riviera', 'aldec')):
52
- TOOL_IS['riviera'] = True
57
+ settool = 'riviera'
53
58
  elif 'questa' in stdout_str_lower:
54
- TOOL_IS['questa'] = True
59
+ settool = 'questa'
60
+
61
+ if settool:
62
+ TOOL_PATH[settool] = vsim_path
63
+
64
+
65
+ def init() -> None:
66
+ '''Sets INIT_HAS_RUN=True (only runs once) and updates TOOL_PATH[tool]'''
67
+ global INIT_HAS_RUN # pylint: disable=global-statement
68
+
69
+ if INIT_HAS_RUN:
70
+ return
71
+
72
+ INIT_HAS_RUN = True
73
+ vsim_path = shutil.which('vsim')
74
+
75
+ if not vsim_path:
76
+ return
77
+
78
+ path_env = os.environ.get('PATH', '')
79
+ paths = path_env.split(':')
80
+
81
+ for path in paths:
82
+ if not os.path.isdir(path):
83
+ continue
84
+ files = os.listdir(path)
85
+ if 'vsim' in files:
86
+ init_get_version(dirpath=path)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencos-eda
3
- Version: 0.3.8
3
+ Version: 0.3.10
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
@@ -20,6 +20,7 @@ Requires-Dist: supports_color>=0.2.0
20
20
  Provides-Extra: dev
21
21
  Requires-Dist: pylint>=3.0.0; extra == "dev"
22
22
  Requires-Dist: pytest>=8.3.5; extra == "dev"
23
+ Requires-Dist: twine>=6.1.0; extra == "dev"
23
24
  Provides-Extra: cocotb
24
25
  Requires-Dist: cocotb>=2.0; extra == "cocotb"
25
26
  Requires-Dist: pytest>=8.3.5; extra == "cocotb"
@@ -2,13 +2,13 @@ opencos/__init__.py,sha256=RwJA9oc1uUlvNX7v5zoqwjnSRNq2NZwRlHqtS-ICJkI,122
2
2
  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=fx1_IJhsDYkUciwwCPTXHP6ftFjTsPVjO4xg12twIjw,17384
5
- opencos/eda.py,sha256=tmDF1TZAa_i3CSWdc92GL1iYM86Fz1p_wdsfy88aPco,23933
6
- opencos/eda_base.py,sha256=J_al8-oQS5HCTJyiNSFVaNosESPctLWNpKG7FVGJXks,117815
7
- opencos/eda_config.py,sha256=d7gMx9ZJTcnUwVhqUkQtY4PI3UGD0ZvH8D_GXvc5Erc,14199
8
- opencos/eda_config_defaults.yml,sha256=BbBJqahrec5UmnnpsM9AaQVh3NM0wyGd5V5QKCMmNsA,16780
5
+ opencos/eda.py,sha256=DXMAxHbTvPlCblhBsTwL81FcNIsZSBCs9qjkP63AgSY,28180
6
+ opencos/eda_base.py,sha256=4vKqOSJPdSCKT0nzg8jhFkSa06BXHp74SmU7nT2FHVw,118064
7
+ opencos/eda_config.py,sha256=x0Pvl-a19G9AKbhv1LxG6atn40_yXQ_PG39g-TCLJQo,14677
8
+ opencos/eda_config_defaults.yml,sha256=uLbCDG9m7zEg8DCCL2ZDFgiVO09K1ObQs02__Q4RDhk,17093
9
9
  opencos/eda_config_max_verilator_waivers.yml,sha256=lTAU4IOEbUWVlPzuer1YYhIyxpPINeA4EJqcRIT-Ymk,840
10
10
  opencos/eda_config_reduced.yml,sha256=cQ9jY4J7EvAbeHTiP6bvpDSVJAYiitjLZPSxxLKIEbk,1440
11
- opencos/eda_deps_bash_completion.bash,sha256=jMkQKY82HBgOnQeMdA1hMrXguRFtB52SMBxUemKovL4,1958
11
+ opencos/eda_deps_bash_completion.bash,sha256=o1yZvGUQSbN-AYq95sDTzMFw7gNHCUSlv9tASEHnACA,2763
12
12
  opencos/eda_deps_sanitize.py,sha256=SQjvrte9Hv9JesRY0wljvbdC6pAmLCikI-Wdzzy-D04,1939
13
13
  opencos/eda_extract_targets.py,sha256=POlxZfqf2dNH2nc1CEw5B_53vSHAicSTkpU9_-2_6Zw,2851
14
14
  opencos/eda_tool_helper.py,sha256=Xm6nr9XweCjueWFLkrH5U3nK96JGeeh86f2GCPhwY-o,3108
@@ -21,7 +21,7 @@ opencos/seed.py,sha256=IL9Yg-r9SLSRseMVWaEHmuw2_DNi_eyut11EafoNTsU,942
21
21
  opencos/util.py,sha256=rJnXWOy_5vlb_qC1O5LmeOwJaJZrV46ZM9tYAcQKqAw,44453
22
22
  opencos/commands/__init__.py,sha256=oOOQmn5_jHAMSOfA3swJJ7mdoyHsJA0lJwKPTudlTns,1125
23
23
  opencos/commands/build.py,sha256=mvJYxk5J15k0Cr8R7oIdIIdsEtWV3gE-LnPweVwtSDo,1487
24
- opencos/commands/deps_help.py,sha256=WDrU7H9sypzDAxe_CHqhW5B_scbQMzBEdf-v-Jcfd5Q,10682
24
+ opencos/commands/deps_help.py,sha256=A0KKYdZ7rHlX1zr_J8uGDCrOw8sWnVcw0AtdDzMWr38,12041
25
25
  opencos/commands/elab.py,sha256=m6Gk03wSzX8UkcmReooK7turF7LpqO0IcdOZwJ8XiyI,1596
26
26
  opencos/commands/export.py,sha256=OhqVLVGN9Ch46NmBmZZo0CxIzhf3BsyX_8qA60SPNHw,3556
27
27
  opencos/commands/flist.py,sha256=u66Xy5U5Xgk3LZ-GdCDUcwwA2U2LyZF3FpB9qWiIZMQ,9110
@@ -31,7 +31,7 @@ opencos/commands/multi.py,sha256=kC21JYJU5E-rP0v690YsgR2rV9WikoeUTwGC4gzYK3M,275
31
31
  opencos/commands/open.py,sha256=XckvKUNwvc5KHbYGV-eQ2i0WG4X-yckroDaMC610MB4,804
32
32
  opencos/commands/proj.py,sha256=cExW9ZZkw6nkpVyNfeQzJADzmPtbYgBgWml82tqO6jY,1158
33
33
  opencos/commands/shell.py,sha256=upHpFs8Gdtzi-boVXwsC-QzEsnvtoZNMAu4oN10kdxw,7801
34
- opencos/commands/sim.py,sha256=a8fsf_Yw5igGiLhJGszlsKxTuQndfrFdStexmA4gwgE,24142
34
+ opencos/commands/sim.py,sha256=et6nHpscvDQoU_0JCvZIp9goo_q3pZK2oP18YKaguAY,24074
35
35
  opencos/commands/sweep.py,sha256=ni4XFgnFF8HLXtwPhETyLWfvc2kgtm4bcxFcKzUhkf0,9343
36
36
  opencos/commands/synth.py,sha256=m4ZwqHgOF5We0XP94F7TQli11WCPlkzhamI4fDfFR1o,4573
37
37
  opencos/commands/targets.py,sha256=_jRNhm2Fqj0fmMvTw6Ba39DCsRHf_r_uZCy_R064kpA,1472
@@ -40,58 +40,42 @@ 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=Z6mIVJEV0zQ9rC-HkQFMBFAkixjqKS1TATPSc27wOeA,1502
42
42
  opencos/deps/deps_commands.py,sha256=q4JfSfzRO2nM2zdNT4enCy33FokEytZYQJn1HJ6osJk,16606
43
- opencos/deps/deps_file.py,sha256=YQ5ftYvppRTqUto22r-XDH6-bcMO7cA-WiJ7QzPjljY,17103
43
+ opencos/deps/deps_file.py,sha256=Yw70fkRcpk16MJVG1jnAGPv4ATZG4aZYQz-nWuTO9CQ,17014
44
44
  opencos/deps/deps_processor.py,sha256=WvG7p4wo_gNjkS2pxySgDmkomioooctJTxMlmP42kfk,42827
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
- opencos/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- opencos/tests/custom_config.yml,sha256=TRoVM9ZFKPOA_8JmlpzaMhnGO1txmaD14N_8P1oqzew,257
50
- opencos/tests/helpers.py,sha256=jembDJkhbpz-oK_aby2LO_ivaMkLtlSkM6g2xdydB3Y,14230
51
- opencos/tests/test_build.py,sha256=FQAxOpLVQShAHD_L5rqJctPeSAoqoOCNFI0RXflLuY0,387
52
- opencos/tests/test_deps_helpers.py,sha256=uQZxleh6aKO-mZQhagHh5xLIBbpQ8dav7-5D0eemq_g,8164
53
- opencos/tests/test_deps_schema.py,sha256=T3P9KjaMyKsk8b7snNVvNSsom2hIJcg6Z9apYiXoH9Y,941
54
- opencos/tests/test_eda.py,sha256=n76XUSfaPNnTZeS8u5z6f9MHKPJIls4o-S4ftlGxuNg,37767
55
- opencos/tests/test_eda_elab.py,sha256=AjU4WMYtFoHpNe1Z4yWWpxDKy4V_hAjL5rl3jqphZrk,3179
56
- opencos/tests/test_eda_synth.py,sha256=BtBrNVJ9C-LJt3K0wNNS5ukEVrET16AbRXl2IzxudJ8,5744
57
- opencos/tests/test_oc_cli.py,sha256=w-F-LjSSWVql3D2WG8tcV4_C52i-hL_2WT3oDpKQn9s,734
58
- opencos/tests/test_tools.py,sha256=xzxlHSgqZNN9urxzNfQU4vjexmxRF6bsKvXijU35z78,15046
59
- opencos/tests/deps_files/command_order/DEPS.yml,sha256=jFce1gErT8XJpovYJj7t7X6Lu-Up_4yNRj9L8wOCAbI,1046
60
- opencos/tests/deps_files/error_msgs/DEPS.yml,sha256=fYvHouIscOlr8V28bqx9SoxRBpDBLX4AG-AkVXh8qbo,717
61
- opencos/tests/deps_files/iverilog_test/DEPS.yml,sha256=vDylEuLt642lhRSvOr3F5ziB5lhPSwkaUGN4_mWJw-c,40
62
- opencos/tests/deps_files/no_deps_here/DEPS.yml,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- opencos/tests/deps_files/non_sv_reqs/DEPS.yml,sha256=VZkahO1AKhD9GUV5lK8VwUONEi5NesfNfMYOzKk7keU,1006
64
- opencos/tests/deps_files/tags_with_tools/DEPS.yml,sha256=-5U1qfJElgpVhmkLEu3lYuvDYva8kDlt6JOdB9jidmc,1377
65
- opencos/tests/deps_files/test_err_fatal/DEPS.yml,sha256=GnXIUJvshQWR9PlYxX67T53ejf5KhDbtD8sUJB4Rwd0,95
66
48
  opencos/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
49
  opencos/tools/cocotb.py,sha256=bR97Mb87D0HPdoV82rLT7oszPLmdIPzYU1IEBaGnuXg,20544
68
50
  opencos/tools/invio.py,sha256=S2ChWr8xMZHSOOhX2hGKQhMmtQY2potVQjc-lsMg73o,3299
69
51
  opencos/tools/invio_helpers.py,sha256=86WOGmSf4m_lEqBtK3DLjWqI0jnqAWzBEBRYfBUGiSY,8804
70
52
  opencos/tools/invio_yosys.py,sha256=CszGeTdE1ilnMmWPLW77BrtobbsGb1CKXqot0hGimFU,5996
71
53
  opencos/tools/iverilog.py,sha256=PH_mvFU3LbMAPNskxMi1tD4DsMWRcsy27V_M0La9TNY,6558
72
- opencos/tools/modelsim_ase.py,sha256=Jt-6N3BZZyu25fT1ehFQLRUTVvrcCo4e2Gl7UtsQcuk,17834
54
+ opencos/tools/modelsim_ase.py,sha256=2QYxaHNsDghnimvIJmkpo_M6w2oZyiyvmak0a5jh4cM,2620
73
55
  opencos/tools/quartus.py,sha256=_TfmPSYpbhmDLw7Dur-rRP0iGwv9hhQ6E5G-XLiYPEM,30486
74
- opencos/tools/questa.py,sha256=nHImM0Wydcf4YHGibHmQAwmqKHmMxKZUqY-E-vz1o8M,9827
75
- opencos/tools/questa_fse.py,sha256=hytkeuGg4qImj7rStV1i2kxkz9B0KFheGtcadxmpYAo,2550
76
- opencos/tools/riviera.py,sha256=Llvd7jwOvy8rApqFOTnGpHSAhV3vFUsdjgMUuW4rsOE,15003
56
+ opencos/tools/questa.py,sha256=oPZUM_OeDhIef0x1HicKUwLwxi0t31Jf1fekNh3IM9Y,2423
57
+ opencos/tools/questa_common.py,sha256=-TJ5Q7q5HPMC0IpCG0T89jq1BBQOqY5uajeD_bPk5lI,18886
58
+ opencos/tools/questa_fe.py,sha256=fRyi0-WFzp1RN7TGSZ7VTk4LFmxHkpy8BMKE3CxTmMg,2524
59
+ opencos/tools/questa_fse.py,sha256=cH9vxpwa1pi0A9hVPWc_IqYMByaviYlccxQOTpZBC1A,2486
60
+ opencos/tools/riviera.py,sha256=eidlIkggqOHGyrm4ldzfDCO6D-nVnEa6mT5en-rjSK0,15684
77
61
  opencos/tools/slang.py,sha256=nDB9eK_DNAgewsXP4Sc1wh_bQiOr5q3-3ccpTbdWr1Y,9423
78
62
  opencos/tools/slang_yosys.py,sha256=MKh13eAmLJDkynZiezyT8E2gI4CKnXipzgFCZppaMXo,10230
79
63
  opencos/tools/surelog.py,sha256=uqUOpDq9Vs8Inj4m3nlMbag47LrJB4QHUIRes7dFbQY,6520
80
64
  opencos/tools/tabbycad_yosys.py,sha256=2LePPgYXBVdsy7YcffPIWN-I0B7queLQ_f_pme2SCGw,7803
81
- opencos/tools/verilator.py,sha256=oIZpqiawohf21JZ_ib0NSAbVpVMYCwPswQ315Y6nU7g,24941
65
+ opencos/tools/verilator.py,sha256=DPD3hJy-Q7cW5Bj3E1c4av1rdumswUNjRQK7yXLKb4g,24998
82
66
  opencos/tools/vivado.py,sha256=k_7sc9cv69BIkIxnbQKNFjLubS_O-p7HvTH_SkiZDMQ,41643
83
67
  opencos/tools/yosys.py,sha256=2h88u0NA_vqLgZG9I78gIy6nQuWxyT6mirDlyjTHn9w,28290
84
68
  opencos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
69
  opencos/utils/markup_helpers.py,sha256=A8Ev5UJ4EVKjdcF2g85SQbjdPZR4jGpNqCLaBy_4v7Q,4569
86
70
  opencos/utils/status_constants.py,sha256=na6YsqlsCwIYzTXWE14dPadUYRNTrOS6YTXHCer2NbA,635
87
- opencos/utils/str_helpers.py,sha256=mCByhIyZLwDJuyeT70YShepgkkikY0pf7k6_xS93dGg,6675
71
+ opencos/utils/str_helpers.py,sha256=TsQxLpHyNCPAfy4nd7CX0e3Cch9yZgkOjR9KwMK5tCA,6931
88
72
  opencos/utils/subprocess_helpers.py,sha256=nmRUe5sPyXomzKEvEQU5231U_vilj8TuXNXLipwqLTM,6579
89
73
  opencos/utils/vscode_helper.py,sha256=9nHyMUIL-gzfW-qLH06sgaCnVK-YTOtu6pusitNNhL8,1363
90
- opencos/utils/vsim_helper.py,sha256=1johPOGbjbMgnCDSTpgsQcSuAquiqq1Y2MBxS6WY6b4,1552
91
- opencos_eda-0.3.8.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
92
- opencos_eda-0.3.8.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
93
- opencos_eda-0.3.8.dist-info/METADATA,sha256=d4yZ9dj5zoyO3Rf1nA7G5AOSHmJ6RXrd4vedVuEWQJI,1164
94
- opencos_eda-0.3.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
95
- opencos_eda-0.3.8.dist-info/entry_points.txt,sha256=6n1T5NwVYDhN5l1h5zmyT197G4pE0SySDreB0QJzJR0,218
96
- opencos_eda-0.3.8.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
97
- opencos_eda-0.3.8.dist-info/RECORD,,
74
+ opencos/utils/vsim_helper.py,sha256=hlFnK_YbFRmskV2QtYk9qjA1WUQBX3CVYrc23_GAQNw,2401
75
+ opencos_eda-0.3.10.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
76
+ opencos_eda-0.3.10.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
77
+ opencos_eda-0.3.10.dist-info/METADATA,sha256=OU1rM9JSxRFTDG9aOfXy5ZShhSgWgn_06D2cekDCXEU,1209
78
+ opencos_eda-0.3.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
79
+ opencos_eda-0.3.10.dist-info/entry_points.txt,sha256=QOlMZnQeqqwOzIaeKBcY_WlMR3idmOAEbGFh2dXlqJw,290
80
+ opencos_eda-0.3.10.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
81
+ opencos_eda-0.3.10.dist-info/RECORD,,
@@ -2,5 +2,6 @@
2
2
  eda = opencos.eda:main_cli
3
3
  eda_deps_sanitize = opencos.eda_deps_sanitize:main
4
4
  eda_deps_schema = opencos.deps_schema:main
5
+ eda_show_autocomplete = opencos.eda:main_show_autocomplete_instructions
5
6
  eda_targets = opencos.eda_extract_targets:main
6
7
  oc_cli = opencos.hw.oc_cli:main
opencos/tests/__init__.py DELETED
File without changes
@@ -1,13 +0,0 @@
1
- # called by test_eda.py
2
-
3
- defines: { }
4
-
5
- dep_command_enables:
6
- # Values overriden to false:
7
- shell: false
8
- var_subst_args: false
9
- var_subst_os_env: false
10
-
11
- # Values overriden to false:
12
- deps_legacy_supported: false
13
- deps_subprocess_shell: false
@@ -1,44 +0,0 @@
1
-
2
- target_echo_hi:
3
- # no 'deps', just 'commands'
4
- commands:
5
- - shell: echo "hi"
6
-
7
- target_echo_hi_bye:
8
- # 'commands' in 'deps':
9
- deps:
10
- - target_echo_hi
11
- - foo.sv
12
- - commands:
13
- - shell: echo "bye"
14
- tee: custom_tee_echo_bye.log # In this test, we'll also confirm manual log names.
15
-
16
- # If this was not ordered, we'd get "hi" (first traversed) followed by "bye"
17
-
18
- target_test:
19
- deps: target_echo_hi_bye
20
- top: foo
21
-
22
- target_test_with_post_tool_commands:
23
- deps:
24
- # In this test, we want to put a new command in the front of the ordered "deps" list,
25
- # but with run-after-tool=true, so it should run after any of the normal pre-compile
26
- # shell commands.
27
- - commands:
28
- - shell: echo "final goodbye"
29
- run-after-tool: true
30
- - target_echo_hi_bye
31
- top: foo
32
-
33
-
34
- test_run_from_work_dir:
35
- deps:
36
- - commands:
37
- - shell: echo "pwd=$PWD"
38
- run-from-work-dir: true
39
-
40
- test_run_from_work_dir_false:
41
- deps:
42
- - commands:
43
- - shell: echo "pwd=$PWD"
44
- run-from-work-dir: false
@@ -1,55 +0,0 @@
1
- # We will run elab targets on this file
2
-
3
- # Good targets
4
- foo: |
5
- foo.sv
6
-
7
- foo2:
8
- - foo2.sv
9
-
10
- target_good2:
11
- top: foo
12
- deps: foo.sv
13
-
14
- target_good3:
15
- top: foo2
16
- deps:
17
- - foo2.sv
18
-
19
- # Bad targets - missing filename in DEPS.yml (we also have to cover missing filename from command-line)
20
- target_bad0: |
21
- target_bad0.sv
22
- missing0.sv
23
-
24
- target_bad1:
25
- - target_bad1.sv
26
- - missing1.sv
27
-
28
- target_bad2:
29
- deps: |
30
- foo.sv
31
- missing2.sv
32
-
33
- target_bad3:
34
- deps:
35
- - foo.sv
36
- - missing3.sv
37
-
38
- # Bad targets - missing target.
39
- target_bad4: |
40
- foo.sv
41
- missing_target4
42
-
43
- target_bad5:
44
- - foo.sv
45
- - missing_target5
46
-
47
- target_bad6:
48
- deps: |
49
- foo.sv
50
- missing_target6
51
-
52
- target_bad7:
53
- deps:
54
- - foo.sv
55
- - missing_target7
@@ -1,4 +0,0 @@
1
-
2
- target_test:
3
- deps: foo.sv
4
- top: foo
File without changes
@@ -1,50 +0,0 @@
1
-
2
- # Non .sv, .v, .vhd, .cpp files can go directly in the
3
- # 'deps', for example .mem, .pcap files:
4
- foo_test:
5
- deps:
6
- - foo.sv
7
- - some_mem.mem
8
- top: foo
9
-
10
- # These can also go in 'reqs':
11
- foo_test2:
12
- deps:
13
- - foo.sv
14
- reqs:
15
- - some_mem.mem
16
- top: foo
17
-
18
- # Included files can also go this route. For example,
19
- # +incdir+. is always present, so you can call included files with reqs and not incdirs
20
- foo_test3:
21
- deps:
22
- - foo_with_include.sv
23
- reqs:
24
- - foo_include.svh # checked for file existence, no incdirs, defaulting to incdir=.
25
- - some_mem.mem
26
- top: foo_with_include
27
-
28
- # You can still include files without reqs
29
- foo_test4:
30
- deps:
31
- - foo_with_include.sv
32
- incdirs: . # pick up foo_include.svh this way, omit from reqs.
33
- reqs:
34
- - some_mem.mem
35
- top: foo_with_include
36
-
37
-
38
-
39
- should_fail_foo_test5:
40
- deps:
41
- - foo.sv
42
- reqs:
43
- - some_mem.mem2 # This file doesn't exist
44
- top: foo
45
-
46
- should_fail_foo_test6:
47
- deps:
48
- - foo.sv
49
- - some_mem.mem2 # This file doesn't exist
50
- top: foo
@@ -1,54 +0,0 @@
1
-
2
- target_for_foo_sv:
3
- deps: foo.sv
4
- tags:
5
- some-made-up-tag-name:
6
- # We'll test this with Verilator, and it should stop before simulation (only compile)
7
- # We'll also test with Vivado, which shouldn't hit this 'with-tools' list, and the
8
- # entire simulation should run. We'll confirm in the eda stdout/stderr outputs
9
- with-tools: verilator
10
- args: --lint-only
11
-
12
- target_test:
13
- deps: target_for_foo_sv
14
- top: foo
15
-
16
-
17
- target_with_replace_config_tools_test:
18
- deps: foo.sv
19
- top: foo
20
- tags:
21
- verilator_replace_waviers: # default uses replacement strategy on lists
22
- with-tools: verilator
23
- replace-config-tools:
24
- verilator:
25
- compile-waivers: [ ] # pytest to confirm all waivers removed.
26
-
27
- target_with_additive_config_tools_test:
28
- deps: foo.sv
29
- top: foo
30
- tags:
31
- verilator_append_waviers:
32
- with-tools: verilator
33
- additive-config-tools: # Uses additive strategy for lists
34
- verilator:
35
- compile-waivers: # pytest to confirm these waivers were added, others not removed.
36
- - style
37
- - fatal
38
-
39
- target_foo_sv_add_incdirs:
40
- deps: foo.sv
41
- top: foo
42
- tags:
43
- made-up-tagname-incdirs:
44
- with-tools: verilator
45
- incdirs: .
46
-
47
- target_foo_sv_add_defines:
48
- deps: foo.sv
49
- top: foo
50
- tags:
51
- made-up-tagname-defines:
52
- with-tools: verilator
53
- defines:
54
- FOO_SV: 3000
@@ -1,4 +0,0 @@
1
-
2
- tb_no_errs: tb_no_errs.sv
3
- tb_dollar_err: tb_dollar_err.sv
4
- tb_dollar_fatal: tb_dollar_fatal.sv