opencos-eda 0.2.57__py3-none-any.whl → 0.3.1__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 (36) hide show
  1. opencos/_version.py +6 -3
  2. opencos/_waves_pkg.sv +34 -2
  3. opencos/commands/build.py +1 -0
  4. opencos/commands/export.py +1 -0
  5. opencos/commands/flist.py +1 -0
  6. opencos/commands/lec.py +1 -0
  7. opencos/commands/proj.py +1 -0
  8. opencos/commands/shell.py +4 -0
  9. opencos/commands/sim.py +47 -1
  10. opencos/commands/synth.py +4 -0
  11. opencos/deps/defaults.py +15 -7
  12. opencos/deps/deps_commands.py +84 -74
  13. opencos/deps/deps_file.py +11 -5
  14. opencos/deps/deps_processor.py +79 -3
  15. opencos/deps_schema.py +3 -0
  16. opencos/eda.py +2 -1
  17. opencos/eda_base.py +105 -34
  18. opencos/eda_config_defaults.yml +5 -1
  19. opencos/files.py +1 -0
  20. opencos/tests/deps_files/command_order/DEPS.yml +11 -0
  21. opencos/tests/helpers.py +50 -20
  22. opencos/tests/test_deps_helpers.py +37 -25
  23. opencos/tests/test_eda.py +26 -60
  24. opencos/tools/modelsim_ase.py +17 -9
  25. opencos/tools/riviera.py +31 -6
  26. opencos/tools/verilator.py +28 -38
  27. opencos/util.py +111 -16
  28. opencos/utils/vscode_helper.py +1 -1
  29. opencos/utils/vsim_helper.py +1 -1
  30. {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/METADATA +2 -1
  31. {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/RECORD +36 -36
  32. {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/WHEEL +0 -0
  33. {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/entry_points.txt +0 -0
  34. {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/licenses/LICENSE +0 -0
  35. {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/licenses/LICENSE.spdx +0 -0
  36. {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/top_level.txt +0 -0
opencos/util.py CHANGED
@@ -17,6 +17,7 @@ import traceback
17
17
  from enum import Enum
18
18
  from pathlib import Path
19
19
  from importlib import import_module
20
+ from dotenv import load_dotenv
20
21
 
21
22
  from opencos.utils import status_constants
22
23
 
@@ -24,6 +25,8 @@ global_exit_allowed = False # pylint: disable=invalid-name
24
25
  progname = "UNKNOWN" # pylint: disable=invalid-name
25
26
  progname_in_message = True # pylint: disable=invalid-name
26
27
  debug_level = 0 # pylint: disable=invalid-name
28
+ dot_f_files_expanded = set() # pylint: disable=invalid-name
29
+ env_files_loaded = set() # pylint: disable=invalid-name
27
30
 
28
31
  args = { # pylint: disable=invalid-name
29
32
  'color' : False,
@@ -213,6 +216,7 @@ class Artifacts:
213
216
  for key in remove_keys:
214
217
  del self.data[key]
215
218
 
219
+ safe_mkdir_for_file(self.artifacts_json_filepath)
216
220
  with open(self.artifacts_json_filepath, 'w', encoding='utf-8') as f:
217
221
  json.dump(self.data, f, indent=4)
218
222
  info(f'Wrote artifacts JSON: {self.artifacts_json_filepath}')
@@ -376,6 +380,9 @@ def get_argparser() -> argparse.ArgumentParser:
376
380
  help=(
377
381
  'Input .f file to be expanded as eda'
378
382
  ' args/defines/incdirs/files/targets'))
383
+ parser.add_argument('--env-file', default=[], action='append',
384
+ help='dotenv file(s) to pass ENV vars, (default: .env, loaded last)'
385
+ )
379
386
  return parser
380
387
 
381
388
 
@@ -420,19 +427,78 @@ def process_token(arg: list) -> bool:
420
427
  return False
421
428
 
422
429
 
423
- def read_tokens_from_dot_f(filepath: str) -> list:
424
- '''Returns list of tokens from a .f file'''
425
- debug(f"Opening -f / --input-file '{filepath}' for contents")
430
+ def load_env_file(env_file: str) -> None:
431
+ '''Handles .env file (from util CLI args --env-file)'''
432
+ if os.path.isfile(env_file):
433
+ load_dotenv(env_file)
434
+ env_files_loaded.add(os.path.abspath(env_file))
435
+ else:
436
+ warning(f'--env-file {env_file} does not exist and is not loaded.')
437
+
438
+ def patch_args_for_dir(tokens: list, patch_dir: str, caller_info: str) -> list:
439
+ '''Given list of args, attempt to correct for relative dir'''
440
+
441
+ # deal with relative path args or files.
442
+ # Note the dot-f file could have been in a different directory (-f=path/to/my.f)
443
+ # As a workaround to deal with relative paths, attempt to replace relative
444
+ # path args within this dotf contents - so they are relative the dotf dir:
445
+ if not os.path.isdir(patch_dir):
446
+ return tokens
447
+
448
+ ret = []
449
+ for word in tokens:
450
+ if word.startswith('-') and '=' in word:
451
+ parts = word.split('=')
452
+ leftarg = parts[0] + '='
453
+ word = '='.join(parts[1:])
454
+ elif word.startswith('+incdir+'):
455
+ # do for +incdir+ too
456
+ leftarg = '+incdir+'
457
+ word = word[len('+incdir+'):]
458
+ else:
459
+ leftarg = ''
460
+
461
+ if word and not os.path.isabs(word) and \
462
+ os.path.exists(os.path.join(patch_dir, word)):
463
+ # fix relative path of word, or --arg=word
464
+ word = os.path.abspath(os.path.join(patch_dir, word))
465
+ info(f'Using relative path {patch_dir} for arg/token: {leftarg}{word}',
466
+ f'{caller_info}')
467
+ ret.append(f'{leftarg}{word}')
468
+ return ret
469
+
470
+ def read_tokens_from_dot_f(filepath: str, caller_info: str = '', verbose: bool = False) -> list:
471
+ '''Returns list of tokens from a .f file, with ENV vars expanded'''
472
+
473
+ # Let's defer 'info' printing out what input files were opened until after
474
+ # args['quiet'] and debug is resolved (which may be in these .f files)
475
+ start_str = f"Opening -f / --input-file '{filepath}' for contents {caller_info}"
476
+ if verbose:
477
+ info(start_str)
478
+ else:
479
+ debug(start_str)
426
480
  if not os.path.isfile(filepath):
427
- error(f'-f (or --input-file): {filepath} does not exist',
481
+ error(f'-f (or --input-file): {filepath} does not exist {caller_info}',
428
482
  error_code=status_constants.EDA_GENERAL_FILE_NOT_FOUND)
429
483
  return []
484
+ if os.path.abspath(filepath) in dot_f_files_expanded:
485
+ error(f'-f (or --input-file): {filepath} has already been expanded',
486
+ f'cannot traverse again (duplicate arg or nested .f files) {caller_info}')
487
+ dot_f_files_expanded.add(os.path.abspath(filepath))
430
488
  tokens = []
489
+ dotf_file_dir, _ = os.path.split(filepath)
431
490
  with open(filepath, encoding='utf-8') as f:
432
491
  for line in f:
433
- tokens.extend(line.split())
492
+ line = os.path.expandvars(line.strip())
493
+ if not line or line.startswith('#') or line.startswith('//'):
494
+ continue
495
+ words = line.split()
496
+ tokens.extend(patch_args_for_dir(
497
+ tokens=words, patch_dir=dotf_file_dir, caller_info=f"(from dotf {filepath})"
498
+ ))
434
499
  return tokens
435
500
 
501
+
436
502
  def process_debug_args(parsed: argparse.Namespace) -> None:
437
503
  '''Sets global debug_level based on parsed args'''
438
504
  global debug_level # pylint: disable=global-statement
@@ -446,7 +512,9 @@ def process_debug_args(parsed: argparse.Namespace) -> None:
446
512
  debug_level = 0
447
513
 
448
514
 
449
- def process_tokens(tokens: list) -> (argparse.Namespace, list):
515
+ def process_tokens( # pylint: disable=too-many-branches
516
+ tokens: list, caller_info: str = ''
517
+ ) -> (argparse.Namespace, list):
450
518
  '''Processes tokens (unparsed args list) on util's ArgumentParser
451
519
 
452
520
  Returns tuple of (parsed Namespace, unparsed args list)
@@ -454,9 +522,9 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
454
522
  global debug_level # pylint: disable=global-statement
455
523
  debug_level = 0
456
524
 
457
- # Deal with --debug, --debug-level, and expand all parsed.input_file (list) tokens first,
458
- # for now put dot-f file contents in front of of tokens, do this in a separate custom
459
- # argparser.
525
+ # Deal with --debug, --debug-level, --env-file, -f/--input-file(s) tokens first,
526
+ # for now put dot-f file contents in front of of tokens, do this first in a
527
+ # separate custom argparser:
460
528
  bool_action_kwargs = get_argparse_bool_action_kwargs()
461
529
  parser = argparse.ArgumentParser(
462
530
  prog='opencos -f/--input-file', add_help=False, allow_abbrev=False
@@ -465,10 +533,14 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
465
533
  help='Display additional debug messaging level 1 or higher')
466
534
  parser.add_argument('--debug-level', type=int, default=0,
467
535
  help='Set debug level messaging (default: 0)')
536
+ parser.add_argument('--env-file', default=[], action='append',
537
+ help='dotenv file(s) to pass ENV vars, (default: .env, loaded last)'
538
+ )
468
539
  parser.add_argument('-f', '--input-file', default=[], action='append',
469
540
  help=(
470
- 'Input .f file to be expanded as eda'
471
- ' args/defines/incdirs/files/targets'))
541
+ 'Input .f file to be expanded as eda args, defines, incdirs,'
542
+ ' files, or targets.'
543
+ ))
472
544
  try:
473
545
  parsed, unparsed = parser.parse_known_args(tokens + [''])
474
546
  tokens2 = list(filter(None, unparsed))
@@ -478,8 +550,25 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
478
550
  process_debug_args(parsed=parsed)
479
551
  debug(f'util.process_tokens: {parsed=} {unparsed=} from: {tokens}')
480
552
 
481
- for filepath in parsed.input_file:
482
- tokens2[0:0] = read_tokens_from_dot_f(filepath)
553
+ if os.path.isfile(str(Path('.env'))):
554
+ parsed.env_file.append('.env')
555
+ if parsed.env_file:
556
+ for env_file in parsed.env_file:
557
+ load_env_file(env_file)
558
+
559
+ if parsed.input_file:
560
+ dotf_tokens = []
561
+ for filepath in parsed.input_file:
562
+ dotf_tokens.extend(read_tokens_from_dot_f(
563
+ filepath=filepath, caller_info=caller_info
564
+ ))
565
+
566
+ # put the .f files before the unparsed args.
567
+ tokens2 = dotf_tokens + tokens2
568
+
569
+ # recurse until we've resolved nested .f files.
570
+ return process_tokens(tokens=tokens2, caller_info=f'(from {parsed.input_file[-1]})')
571
+
483
572
 
484
573
  # Continue with all normal parsing beyond --debug and -f/--input-file,
485
574
  # Note that we re-parse everything in case there was --debug or --debug-level in
@@ -494,7 +583,8 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
494
583
  process_debug_args(parsed=parsed)
495
584
 
496
585
  if parsed.input_file:
497
- warning(f'Skipping nested -f/--input-file(s) {parsed.input_file}')
586
+ warning(f'python error, nested -f/--input-file(s) {parsed.input_file} should',
587
+ 'have already been resolved')
498
588
 
499
589
  # clear existing artifacts dicts (mostly for pytests repeatedly calling eda.main),
500
590
  # set artifacts.enabled based on args['artifacts-json']
@@ -519,6 +609,11 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
519
609
  if key in args and value is not None:
520
610
  args[key] = value # only update with non-None values to our global 'args' dict
521
611
 
612
+ for filepath in env_files_loaded:
613
+ info(f"Loaded --env-file '{os.path.relpath(filepath)}'")
614
+ for filepath in dot_f_files_expanded:
615
+ info(f"Processed -f / --input-file '{os.path.relpath(filepath)}' for contents")
616
+
522
617
  return parsed, unparsed
523
618
 
524
619
  # ********************
@@ -776,8 +871,8 @@ def getcwd():
776
871
  error(f"Unable to getcwd(), did it get deleted from under us? Exception: {e}")
777
872
  return None
778
873
 
779
- _OC_ROOT = None
780
- _OC_ROOT_SET = False
874
+ _OC_ROOT = None # pylint: disable=invalid-name
875
+ _OC_ROOT_SET = False # pylint: disable=invalid-name
781
876
 
782
877
  def get_oc_root(error_on_fail: bool = False) -> None:
783
878
  '''Returns a str or False for the root directory of *this* repo.
@@ -14,7 +14,7 @@ from opencos.util import debug
14
14
 
15
15
  vscode_path = shutil.which('code')
16
16
 
17
- INIT_HAS_RUN = False
17
+ INIT_HAS_RUN = False # pylint: disable=invalid-name
18
18
  EXTENSIONS = {} # dict of {name: version} for VScode extensions of name
19
19
 
20
20
 
@@ -10,7 +10,7 @@ import subprocess
10
10
 
11
11
  from opencos.util import debug
12
12
 
13
- INIT_HAS_RUN = False
13
+ INIT_HAS_RUN = False # pylint: disable=invalid-name
14
14
  TOOL_IS = {
15
15
  'riviera': False,
16
16
  'modelsim_ase': False,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencos-eda
3
- Version: 0.2.57
3
+ Version: 0.3.1
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
@@ -11,6 +11,7 @@ Requires-Dist: mergedeep>=1.3.4
11
11
  Requires-Dist: peakrdl>=1.1.0
12
12
  Requires-Dist: pyyaml>=6.0.2
13
13
  Requires-Dist: pytest>=8.3.5
14
+ Requires-Dist: python-dotenv>=1.0.1
14
15
  Requires-Dist: schema>=0.7.7
15
16
  Requires-Dist: toml>=0.10.2
16
17
  Requires-Dist: yamllint>=1.35.1
@@ -1,11 +1,11 @@
1
1
  opencos/__init__.py,sha256=RwJA9oc1uUlvNX7v5zoqwjnSRNq2NZwRlHqtS-ICJkI,122
2
- opencos/_version.py,sha256=XiHFZjCofkkZvI9befTFKsRt5zLouUo1CIwhW4srWU0,582
3
- opencos/_waves_pkg.sv,sha256=1lbhQOVGc3t_R8czYjP40hssP0I3FlZOpHTkI7yKFbI,1251
4
- opencos/deps_schema.py,sha256=02pSLBEvWK147lUwE8DRojYgE6HReZBBKP_pzVRow1c,16533
5
- opencos/eda.py,sha256=VSyL0CIUDmPhy-41HphGwR5MJGsKc_dG__gPQWY4Lfo,23290
6
- opencos/eda_base.py,sha256=mCkSCGO__Jfjf27-TSOo7IRppL66-aY3kJVK3RBFjXw,105899
2
+ opencos/_version.py,sha256=KaWIjS0c08g-C0fgYY1kXwSPqhOFxaq5pYEeoZhOR_I,617
3
+ opencos/_waves_pkg.sv,sha256=TL5YT9lT-fn2FD54MbVVZROmZ7vtW3ScA_rM2eRzKmU,2068
4
+ opencos/deps_schema.py,sha256=VUdXuq43mKfM-U4x7DSA28-MH1Xqxre6V7Ttw2DeOqI,16762
5
+ opencos/eda.py,sha256=91E-EsyZS-uRadApP-h2onW6rpvLBnrpJoT_9tRtsS8,23322
6
+ opencos/eda_base.py,sha256=Spt_Ssq5aVZ6L_J1koaDMB1jo81srIStwl9KMG5_irU,108740
7
7
  opencos/eda_config.py,sha256=z3yQOPGBX7-yKp6BdQYfJ9eOJf-Jctl-mwCDj3vj2BI,12712
8
- opencos/eda_config_defaults.yml,sha256=Xu-Lbe8Dmf89wGIQLPbRu02XbuegyoMcb-abeF5zYNI,16020
8
+ opencos/eda_config_defaults.yml,sha256=LF0yAncYeaPtZIoAfEeo2aiDXT4cjYa99soGks0WRzM,16063
9
9
  opencos/eda_config_max_verilator_waivers.yml,sha256=lTAU4IOEbUWVlPzuer1YYhIyxpPINeA4EJqcRIT-Ymk,840
10
10
  opencos/eda_config_reduced.yml,sha256=cQ9jY4J7EvAbeHTiP6bvpDSVJAYiitjLZPSxxLKIEbk,1440
11
11
  opencos/eda_deps_bash_completion.bash,sha256=jMkQKY82HBgOnQeMdA1hMrXguRFtB52SMBxUemKovL4,1958
@@ -14,49 +14,49 @@ opencos/eda_extract_targets.py,sha256=POlxZfqf2dNH2nc1CEw5B_53vSHAicSTkpU9_-2_6Z
14
14
  opencos/eda_tool_helper.py,sha256=_YgobDLEWW6Fzdr976LxaCDZ4DKRyuMs5CrYQHaTPrU,2558
15
15
  opencos/export_helper.py,sha256=5BnrkhiieJBgYKAryhXD7HSGtrgvXQpZ8B5ltdrhbRY,22649
16
16
  opencos/export_json_convert.py,sha256=tSIMbLFtc_Fo66EhFovMii1v_qJYyFZJrPNnoPdW7L0,4182
17
- opencos/files.py,sha256=aoq0O2KfISzZb-Vi_q_0TTGBER9xJc--FkVZf0ga7pA,1549
17
+ opencos/files.py,sha256=AQOnsrvoc0r76LiFrkoMbwOGdUO1FpBiFY_jyyI_ve8,1566
18
18
  opencos/names.py,sha256=Y2aJ5wgpbNIJ-_P5xUXnHMv_h-zMOX2Rt6iLuduqC1Q,1213
19
19
  opencos/peakrdl_cleanup.py,sha256=vHNGtalTrIVP335PhRjPt9RhoccgpK1HJAi-E4M8Kc8,736
20
20
  opencos/seed.py,sha256=IL9Yg-r9SLSRseMVWaEHmuw2_DNi_eyut11EafoNTsU,942
21
- opencos/util.py,sha256=9VGc54Rm-snEwbKEbToQRGoeGg8wqBeWpTJBagEbjw0,37770
21
+ opencos/util.py,sha256=ffaSoDDOsL6mx_fYgAyJA8fawsxZ5YHKqs67b8iW5rw,41921
22
22
  opencos/commands/__init__.py,sha256=oOOQmn5_jHAMSOfA3swJJ7mdoyHsJA0lJwKPTudlTns,1125
23
- opencos/commands/build.py,sha256=hvjrvg7AbEotuQze6-yz3DOYRMtagkvJ-6TFNJQTwrs,1441
23
+ opencos/commands/build.py,sha256=mvJYxk5J15k0Cr8R7oIdIIdsEtWV3gE-LnPweVwtSDo,1487
24
24
  opencos/commands/deps_help.py,sha256=WDrU7H9sypzDAxe_CHqhW5B_scbQMzBEdf-v-Jcfd5Q,10682
25
25
  opencos/commands/elab.py,sha256=m6Gk03wSzX8UkcmReooK7turF7LpqO0IcdOZwJ8XiyI,1596
26
- opencos/commands/export.py,sha256=dpTcrtPjIt6TOw-i8LUWhb4ismFAE1QK-dNAHC1jxME,3510
27
- opencos/commands/flist.py,sha256=uFjNxrXvigQKzG2v8sooz_3iVaTHBKkm-NDYXo9ktAE,9068
28
- opencos/commands/lec.py,sha256=hrTPp-D8KAj9Ho5Kzp-vwfLLTAsMvXz3eZlOHiDL6uM,4049
26
+ opencos/commands/export.py,sha256=OhqVLVGN9Ch46NmBmZZo0CxIzhf3BsyX_8qA60SPNHw,3556
27
+ opencos/commands/flist.py,sha256=B2c9RS1LrMHLaY-NySB2W0oHkjd4wGS5rQJTYULGNk0,9110
28
+ opencos/commands/lec.py,sha256=7uziNSeGhZrDEbfS4dt3qVp-z2122hx2kqPH15PqIgQ,4091
29
29
  opencos/commands/lint.py,sha256=piPb0l0zE3sAtNJkFQ-oNpuHxnaV_RNXkXtEj_9mwGs,1594
30
30
  opencos/commands/multi.py,sha256=ZkG1b_qhhxXw-Lm2S4J-i576Ai5iJA09UEIDj94FOVM,27430
31
31
  opencos/commands/open.py,sha256=XckvKUNwvc5KHbYGV-eQ2i0WG4X-yckroDaMC610MB4,804
32
- opencos/commands/proj.py,sha256=vCsZle3oUJ8xmIFuepgAD6G-YGl35xtTIcTeiVDshNo,1112
33
- opencos/commands/shell.py,sha256=dFXXtvsDs3Khme41du8LhKdV3qRosxjTfju6SJbOSKM,7599
34
- opencos/commands/sim.py,sha256=HIyKT3avB844Z5RWidvck1ZhVa5MfS7PTjCactZO3o4,19226
32
+ opencos/commands/proj.py,sha256=cExW9ZZkw6nkpVyNfeQzJADzmPtbYgBgWml82tqO6jY,1158
33
+ opencos/commands/shell.py,sha256=upHpFs8Gdtzi-boVXwsC-QzEsnvtoZNMAu4oN10kdxw,7801
34
+ opencos/commands/sim.py,sha256=NQJbjfGEgt4zHtOQn5HnaCiBnaDyEkpoDJvnAR4TOxE,21166
35
35
  opencos/commands/sweep.py,sha256=ni4XFgnFF8HLXtwPhETyLWfvc2kgtm4bcxFcKzUhkf0,9343
36
- opencos/commands/synth.py,sha256=tuxWmxMNmE9hveWXGNfKDelzxi_wK7ZL7V2LiZV6Ypg,4371
36
+ opencos/commands/synth.py,sha256=m4ZwqHgOF5We0XP94F7TQli11WCPlkzhamI4fDfFR1o,4573
37
37
  opencos/commands/targets.py,sha256=_jRNhm2Fqj0fmMvTw6Ba39DCsRHf_r_uZCy_R064kpA,1472
38
38
  opencos/commands/upload.py,sha256=oyImgcEFGxDkdeY9EYyX2R6fTOmN-lTs-HYxAZqXUUo,871
39
39
  opencos/commands/waves.py,sha256=nrp3ALwfJujZns44tgCgia_dEedQyKe0T3fuws8h39U,7697
40
40
  opencos/deps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- opencos/deps/defaults.py,sha256=7ETOnG08HERKcJUjynnrKZV1sQQVUsW-zKlwoCN1VkI,1298
42
- opencos/deps/deps_commands.py,sha256=OlqueYFK8U83loasok3xJGzUDpNcj2DPk37332DfmRo,17039
43
- opencos/deps/deps_file.py,sha256=nVZWrq6PVhWig1yMNpy8w_7LQJ1rgb7Js0N1ngoqLio,16306
44
- opencos/deps/deps_processor.py,sha256=i8R6lNSVc_ybTnC16qmGevB3Y-pkcbxkZaT04HTLE8Y,37890
41
+ opencos/deps/defaults.py,sha256=NXh3V4oInrBVlDw64B2OCI77wzdn1NtaD64srhBnmZU,1486
42
+ opencos/deps/deps_commands.py,sha256=q4JfSfzRO2nM2zdNT4enCy33FokEytZYQJn1HJ6osJk,16606
43
+ opencos/deps/deps_file.py,sha256=36KvkixS_TcIjetpvJEmYpkdaYhuY42aVi7WvV3Qtw8,16445
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=yYgb1W3bxu3xx1ga6mbq97eTGaPNLwNJ0IJWYPpfCD0,10047
50
+ opencos/tests/helpers.py,sha256=fs7GRlCJWj_uwwilikKI6R9tbozgGH5Uxi6_qqvEEwc,11231
51
51
  opencos/tests/test_build.py,sha256=FQAxOpLVQShAHD_L5rqJctPeSAoqoOCNFI0RXflLuY0,387
52
- opencos/tests/test_deps_helpers.py,sha256=f9GJXvzcdE3SGkKJ7q-YBTgRagZcIzeRa6nMVCCiEvI,7848
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=cdxfLCUZq0nNelCQiplZXkeF4eyzmyJlZJFDSo77qeI,39464
54
+ opencos/tests/test_eda.py,sha256=fkJvBiwPczs3Yl3zwl_1Upx-siJsGDrjEVipzpiw8vc,37880
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
58
  opencos/tests/test_tools.py,sha256=-WMpDZexAgko0FAcfiuASqSKNNL0Mr1ztag05808Upc,13735
59
- opencos/tests/deps_files/command_order/DEPS.yml,sha256=vloOzWZ5qU3yGNFaDlrAJdEzYxK6qf8gfac3zqF-0FI,438
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
62
62
  opencos/tests/deps_files/no_deps_here/DEPS.yml,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -69,16 +69,16 @@ opencos/tools/invio.py,sha256=S2ChWr8xMZHSOOhX2hGKQhMmtQY2potVQjc-lsMg73o,3299
69
69
  opencos/tools/invio_helpers.py,sha256=86WOGmSf4m_lEqBtK3DLjWqI0jnqAWzBEBRYfBUGiSY,8804
70
70
  opencos/tools/invio_yosys.py,sha256=CszGeTdE1ilnMmWPLW77BrtobbsGb1CKXqot0hGimFU,5996
71
71
  opencos/tools/iverilog.py,sha256=8dK4z8ktbNYS9cW5QQPm586WoE-pSmOAVJfXajw-Sbg,6420
72
- opencos/tools/modelsim_ase.py,sha256=zIgJwm3f_EoiRSsFr0XWQ5BV1XZr1zAjmIQ4n2TVKjM,17313
72
+ opencos/tools/modelsim_ase.py,sha256=Jt-6N3BZZyu25fT1ehFQLRUTVvrcCo4e2Gl7UtsQcuk,17834
73
73
  opencos/tools/quartus.py,sha256=_TfmPSYpbhmDLw7Dur-rRP0iGwv9hhQ6E5G-XLiYPEM,30486
74
74
  opencos/tools/questa.py,sha256=nHImM0Wydcf4YHGibHmQAwmqKHmMxKZUqY-E-vz1o8M,9827
75
75
  opencos/tools/questa_fse.py,sha256=hytkeuGg4qImj7rStV1i2kxkz9B0KFheGtcadxmpYAo,2550
76
- opencos/tools/riviera.py,sha256=qhDiXnXeglqcZTN244fVcuC5r-Q9wMo0jAtJF5_Ndro,11820
76
+ opencos/tools/riviera.py,sha256=FAumXIt9u4JXwR5BHe-0APX3K0Lg3RT2lWQ-GNGL3vA,13016
77
77
  opencos/tools/slang.py,sha256=UpsFeExup2awARxxxADD9f923Hw6ubiSEq2tKtJbS1c,8305
78
78
  opencos/tools/slang_yosys.py,sha256=MKh13eAmLJDkynZiezyT8E2gI4CKnXipzgFCZppaMXo,10230
79
79
  opencos/tools/surelog.py,sha256=S2RAZJyjdISm_tRvAhXbla7_z_tJfotZih5f9Y3m7DQ,5648
80
80
  opencos/tools/tabbycad_yosys.py,sha256=2LePPgYXBVdsy7YcffPIWN-I0B7queLQ_f_pme2SCGw,7803
81
- opencos/tools/verilator.py,sha256=ZrmcJ-lt3wXdHRfLMangU0CepGf-GFsp5w0NmdF8Be8,21361
81
+ opencos/tools/verilator.py,sha256=nVYF9F-VAHmT0uqmHpYZIvvZ2GjFIVW5zKpYBAWW8rI,20810
82
82
  opencos/tools/vivado.py,sha256=GQdPd1mp02it_uyhMqpFfJgh0AKIMn-20BhHNEDp5HY,41398
83
83
  opencos/tools/yosys.py,sha256=t3Au8gdwTepIKCPCXHpRXEdtmORQK8xqNvF6baIa7DM,28260
84
84
  opencos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -86,12 +86,12 @@ opencos/utils/markup_helpers.py,sha256=A8Ev5UJ4EVKjdcF2g85SQbjdPZR4jGpNqCLaBy_4v
86
86
  opencos/utils/status_constants.py,sha256=na6YsqlsCwIYzTXWE14dPadUYRNTrOS6YTXHCer2NbA,635
87
87
  opencos/utils/str_helpers.py,sha256=726ScK5-v7QkBi-zqESKZLsOl2_ya4vVJ5ZhxJqmBFo,6440
88
88
  opencos/utils/subprocess_helpers.py,sha256=xemAGPey6M0sWY_FElvr-Z0phCfdjaC-znP8FKihPaE,3535
89
- opencos/utils/vscode_helper.py,sha256=2YPjcDH_vTlwJvcITyMfvx8dLzPSRKzAvFRJz7BaJk8,1332
90
- opencos/utils/vsim_helper.py,sha256=zAnKed56x9jiSxJFsyxGRfJ16xgpIWkq4pWqXcoaumE,1520
91
- opencos_eda-0.2.57.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
92
- opencos_eda-0.2.57.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
93
- opencos_eda-0.2.57.dist-info/METADATA,sha256=T77O2iSSb2l8RsEbLIVeIl8F8rw8jVC02T3HhyKWQuk,631
94
- opencos_eda-0.2.57.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
95
- opencos_eda-0.2.57.dist-info/entry_points.txt,sha256=6n1T5NwVYDhN5l1h5zmyT197G4pE0SySDreB0QJzJR0,218
96
- opencos_eda-0.2.57.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
97
- opencos_eda-0.2.57.dist-info/RECORD,,
89
+ 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.1.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
92
+ opencos_eda-0.3.1.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
93
+ opencos_eda-0.3.1.dist-info/METADATA,sha256=Gc70L29pHLuc43gNk0yJw3-dGE98LYbpu-o7FdLM4sw,666
94
+ opencos_eda-0.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
95
+ opencos_eda-0.3.1.dist-info/entry_points.txt,sha256=6n1T5NwVYDhN5l1h5zmyT197G4pE0SySDreB0QJzJR0,218
96
+ opencos_eda-0.3.1.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
97
+ opencos_eda-0.3.1.dist-info/RECORD,,