fusesoc 2.4.2__tar.gz → 2.4.4__tar.gz

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 (256) hide show
  1. {fusesoc-2.4.2 → fusesoc-2.4.4}/.github/workflows/ci.yml +1 -1
  2. {fusesoc-2.4.2 → fusesoc-2.4.4}/.github/workflows/lint.yml +2 -2
  3. {fusesoc-2.4.2 → fusesoc-2.4.4}/NEWS +35 -1
  4. {fusesoc-2.4.2 → fusesoc-2.4.4}/PKG-INFO +4 -3
  5. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/requirements.txt +1 -0
  6. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/core_files.rst +26 -0
  7. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/index.rst +2 -0
  8. fusesoc-2.4.4/doc/source/user/build_system/mappings.rst +40 -0
  9. fusesoc-2.4.4/doc/source/user/build_system/virtual_cores.rst +8 -0
  10. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/core.py +63 -3
  11. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/coredata.py +6 -10
  12. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/json_schema.py +303 -270
  13. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/config.py +14 -2
  14. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/coremanager.py +143 -1
  15. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/edalizer.py +55 -68
  16. fusesoc-2.4.4/fusesoc/filters/coredepsmk.py +23 -0
  17. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/fusesoc.py +10 -2
  18. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/librarymanager.py +12 -5
  19. fusesoc-2.4.4/fusesoc/lockfile.py +162 -0
  20. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/main.py +120 -10
  21. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/git.py +3 -2
  22. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/github.py +8 -1
  23. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/url.py +6 -1
  24. fusesoc-2.4.4/fusesoc/signature.py +152 -0
  25. fusesoc-2.4.4/fusesoc/version.py +34 -0
  26. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/vlnv.py +46 -0
  27. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/PKG-INFO +4 -3
  28. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/SOURCES.txt +38 -0
  29. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/requires.txt +1 -1
  30. {fusesoc-2.4.2 → fusesoc-2.4.4}/pyproject.toml +1 -1
  31. fusesoc-2.4.4/tests/capi2_cores/dependencies/top.core +18 -0
  32. fusesoc-2.4.4/tests/capi2_cores/dependencies/used-1.0.core +18 -0
  33. fusesoc-2.4.4/tests/capi2_cores/dependencies/used-1.1.core +18 -0
  34. fusesoc-2.4.4/tests/capi2_cores/mapping/a.core +8 -0
  35. fusesoc-2.4.4/tests/capi2_cores/mapping/b.core +6 -0
  36. fusesoc-2.4.4/tests/capi2_cores/mapping/c.core +9 -0
  37. fusesoc-2.4.4/tests/capi2_cores/mapping/d.core +10 -0
  38. fusesoc-2.4.4/tests/capi2_cores/mapping/e.core +6 -0
  39. fusesoc-2.4.4/tests/capi2_cores/mapping/f.core +6 -0
  40. fusesoc-2.4.4/tests/capi2_cores/mapping/map_rec.core +9 -0
  41. fusesoc-2.4.4/tests/capi2_cores/mapping/map_vers.core +8 -0
  42. fusesoc-2.4.4/tests/capi2_cores/mapping/top.core +21 -0
  43. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/generate/generate.core +11 -1
  44. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/generate/generators.core +5 -0
  45. fusesoc-2.4.4/tests/lockfiles/dependencies-partial-1.0.lock.yml +2 -0
  46. fusesoc-2.4.4/tests/lockfiles/dependencies-partial.lock.yml +2 -0
  47. fusesoc-2.4.4/tests/lockfiles/dependencies.lock.yml +3 -0
  48. fusesoc-2.4.4/tests/lockfiles/duplicates.lock.yml +8 -0
  49. fusesoc-2.4.4/tests/lockfiles/works.lock.yml +7 -0
  50. fusesoc-2.4.4/tests/signature_files/keyfiles/user1_ecdsa +12 -0
  51. fusesoc-2.4.4/tests/signature_files/keyfiles/user1_ecdsa.pub +1 -0
  52. fusesoc-2.4.4/tests/signature_files/keyfiles/user1_ed25519 +7 -0
  53. fusesoc-2.4.4/tests/signature_files/keyfiles/user1_ed25519.pub +1 -0
  54. fusesoc-2.4.4/tests/signature_files/keyfiles/user1_rsa +49 -0
  55. fusesoc-2.4.4/tests/signature_files/keyfiles/user1_rsa.pub +1 -0
  56. fusesoc-2.4.4/tests/signature_files/keyfiles/user2_ed25519 +7 -0
  57. fusesoc-2.4.4/tests/signature_files/keyfiles/user2_ed25519.pub +1 -0
  58. fusesoc-2.4.4/tests/signature_files/keyfiles/user3_ed25519 +7 -0
  59. fusesoc-2.4.4/tests/signature_files/keyfiles/user3_ed25519.pub +1 -0
  60. fusesoc-2.4.4/tests/signature_files/trustfiles/trustfile_1ed_and_2 +2 -0
  61. fusesoc-2.4.4/tests/signature_files/trustfiles/trustfile_1rsa+ed_and_3 +3 -0
  62. fusesoc-2.4.4/tests/signature_files/trustfiles/trustfile_1rsa_and_2 +2 -0
  63. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_capi2.py +12 -4
  64. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_config.py +42 -1
  65. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_coremanager.py +362 -0
  66. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_edalizer.py +86 -17
  67. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_libraries.py +33 -0
  68. fusesoc-2.4.4/tests/test_lockfile.py +34 -0
  69. fusesoc-2.4.4/tests/test_signatures.py +163 -0
  70. fusesoc-2.4.4/tests/test_usecases.py +163 -0
  71. fusesoc-2.4.4/tests/test_vlnv.py +130 -0
  72. fusesoc-2.4.2/fusesoc/version.py +0 -16
  73. fusesoc-2.4.2/tests/test_vlnv.py +0 -82
  74. {fusesoc-2.4.2 → fusesoc-2.4.4}/.editorconfig +0 -0
  75. {fusesoc-2.4.2 → fusesoc-2.4.4}/.flake8 +0 -0
  76. {fusesoc-2.4.2 → fusesoc-2.4.4}/.git-blame-ignore-revs +0 -0
  77. {fusesoc-2.4.2 → fusesoc-2.4.4}/.gitignore +0 -0
  78. {fusesoc-2.4.2 → fusesoc-2.4.4}/.pre-commit-config.yaml +0 -0
  79. {fusesoc-2.4.2 → fusesoc-2.4.4}/.readthedocs.yml +0 -0
  80. {fusesoc-2.4.2 → fusesoc-2.4.4}/LICENSE +0 -0
  81. {fusesoc-2.4.2 → fusesoc-2.4.4}/README.md +0 -0
  82. {fusesoc-2.4.2 → fusesoc-2.4.4}/dev-requirements.txt +0 -0
  83. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/_static/theme_overrides.css +0 -0
  84. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/conf.py +0 -0
  85. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/dev/devsetup.rst +0 -0
  86. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/dev/index.rst +0 -0
  87. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/index.rst +0 -0
  88. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/ref/capi1.rst +0 -0
  89. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/ref/glossary.rst +0 -0
  90. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/ref/index.rst +0 -0
  91. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/ref/migrations.rst +0 -0
  92. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/dependencies.rst +0 -0
  93. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/eda_flows.rst +0 -0
  94. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/filters.rst +0 -0
  95. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/flags.rst +0 -0
  96. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/flow_options.rst +0 -0
  97. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/generators.rst +0 -0
  98. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/hooks.rst +0 -0
  99. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/tool_options.rst +0 -0
  100. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/vpi.rst +0 -0
  101. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/cli.rst +0 -0
  102. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/index.rst +0 -0
  103. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/installation.rst +0 -0
  104. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/introduction.rst +0 -0
  105. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/knowledgebase.rst +0 -0
  106. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/optional_deps.png +0 -0
  107. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/overview.rst +0 -0
  108. {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/package_manager/index.rst +0 -0
  109. {fusesoc-2.4.2 → fusesoc-2.4.4}/extras/bash-completion +0 -0
  110. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/coreparser.py +0 -0
  111. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/exprs.py +0 -0
  112. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/generator.py +0 -0
  113. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/inheritance.py +0 -0
  114. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/core.py +0 -0
  115. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/filters/autotype.py +0 -0
  116. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/filters/custom.py +0 -0
  117. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/filters/dot.py +0 -0
  118. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/filters/splitlib.py +0 -0
  119. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/parser/coreparser.py +0 -0
  120. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/local.py +0 -0
  121. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/opencores.py +0 -0
  122. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/provider.py +0 -0
  123. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/svn.py +0 -0
  124. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/utils.py +0 -0
  125. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/dependency_links.txt +0 -0
  126. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/entry_points.txt +0 -0
  127. {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/top_level.txt +0 -0
  128. {fusesoc-2.4.2 → fusesoc-2.4.4}/setup.cfg +0 -0
  129. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/child1.core +0 -0
  130. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/child2.core +0 -0
  131. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/child3.core +0 -0
  132. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/child4.core +0 -0
  133. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/generated_child_a.core +0 -0
  134. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/generated_child_a.py +0 -0
  135. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/root.core +0 -0
  136. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/files_out_of_hierarchy/bad.sv +0 -0
  137. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/files_out_of_hierarchy/subdir/files_out_of_hierarchy.core +0 -0
  138. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/files_out_of_hierarchy/subdir/good.sv +0 -0
  139. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/append.core +0 -0
  140. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/depends.core +0 -0
  141. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/dontpickthisfile +0 -0
  142. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/dummy.tcl +0 -0
  143. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/empty.core +0 -0
  144. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/f1 +0 -0
  145. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/f2 +0 -0
  146. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/f3 +0 -0
  147. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/f4 +0 -0
  148. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/fileattrs.core +0 -0
  149. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/files.core +0 -0
  150. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/filters.core +0 -0
  151. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/flags.core +0 -0
  152. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/flow.core +0 -0
  153. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/generate/file_cachetest +0 -0
  154. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/generate/testgen.py +0 -0
  155. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/hooks.core +0 -0
  156. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/parameters.core +0 -0
  157. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/scriptfile +0 -0
  158. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/subdir/dummy.extra +0 -0
  159. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/syntax_error.core +0 -0
  160. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/targets.core +0 -0
  161. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/toplevel.core +0 -0
  162. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/typecheck.core +0 -0
  163. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/uncachable.core +0 -0
  164. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/vhdlfile +0 -0
  165. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/vlogfile +0 -0
  166. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/vpi.core +0 -0
  167. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/vpifile +0 -0
  168. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/override/1/basic.core +0 -0
  169. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/override/2/basic.core +0 -0
  170. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/parser/inheritance.core +0 -0
  171. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/parser/no_additional_properties.core +0 -0
  172. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/parser/with_additional_properties.core +0 -0
  173. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/providers/url_simple.core +0 -0
  174. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/providers/url_simple_with_user_agent.core +0 -0
  175. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/providers/url_tar.core +0 -0
  176. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/providers/url_zip.core +0 -0
  177. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/impl1.core +0 -0
  178. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/impl2.core +0 -0
  179. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/top_conflict.core +0 -0
  180. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/top_impl1.core +0 -0
  181. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/top_impl2.core +0 -0
  182. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/top_non_deterministic.core +0 -0
  183. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/user.core +0 -0
  184. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/adv_debug_sys/adv_debug_sys.core +0 -0
  185. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/atlys/atlys.core +0 -0
  186. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/atlys/data/atlys.ucf +0 -0
  187. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/atlys/data/dummy_backend_tcl_file.tcl +0 -0
  188. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/elf-loader/check_libelf.sh +0 -0
  189. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/elf-loader/elf-loader.c +0 -0
  190. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/elf-loader/elf-loader.core +0 -0
  191. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/elf-loader/vpi_wrapper.c +0 -0
  192. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/gpio/gpio.core +0 -0
  193. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/jtag_tap/jtag_tap-1.13.core +0 -0
  194. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/libstorage/libstorage-1.0.core +0 -0
  195. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/c3demo.core +0 -0
  196. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/c3demo.pcf +0 -0
  197. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/copytocore/copytocore.core +0 -0
  198. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/copytocore/dummy.tcl +0 -0
  199. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/copytocore/subdir/dummy.extra +0 -0
  200. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/dummy.tcl +0 -0
  201. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/dummy.xci +0 -0
  202. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/filetypes.core +0 -0
  203. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/ghdltest.core +0 -0
  204. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/gitcore.core +0 -0
  205. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/no_exe_script.core +0 -0
  206. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/nomain.core +0 -0
  207. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/opencorescore.core +0 -0
  208. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/paramtest.core +0 -0
  209. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scripts/no_exe_script +0 -0
  210. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scripts/post_build_script +0 -0
  211. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scripts/post_run_script +0 -0
  212. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scripts/pre_build_script +0 -0
  213. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scripts/pre_run_script +0 -0
  214. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scriptscore.core +0 -0
  215. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/subdir/dummy.extra +0 -0
  216. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/svn.core +0 -0
  217. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx/mor1kx-3.1.core +0 -0
  218. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-arty/mor1kx-arty.core +0 -0
  219. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-arty/mor1kx-arty.system +0 -0
  220. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-generic/mor1kx-generic.core +0 -0
  221. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-generic/scripts/post_run_script +0 -0
  222. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-generic/scripts/pre_build_script +0 -0
  223. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-generic/scripts/pre_run_script +0 -0
  224. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/sockit/sockit.core +0 -0
  225. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/uart16550/uart16550-1.5.core +0 -0
  226. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/verilator_tb_utils/verilator_tb_utils.core +0 -0
  227. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/verilog-arbiter/verilog-arbiter-r1.core +0 -0
  228. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/verilog_utils/verilog_utils.core +0 -0
  229. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/verilog_utils/verilog_utils.vh +0 -0
  230. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/vga_lcd/vga_lcd.core +0 -0
  231. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/vlog_tb_utils/files/0001-testpatch.patch +0 -0
  232. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/vlog_tb_utils/vlog_tb_utils-1.1.core +0 -0
  233. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/wb_common/wb_common.core +0 -0
  234. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/wb_common/wb_common.v +0 -0
  235. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/wb_common/wb_common_params.v +0 -0
  236. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/wb_intercon/dummy_icarus.v +0 -0
  237. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/wb_intercon/wb_intercon-1.0.core +0 -0
  238. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_capi2/generators.info +0 -0
  239. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_capi2/targets.info +0 -0
  240. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_common.py +0 -0
  241. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_exprs.py +0 -0
  242. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_ignored_dirs.py +0 -0
  243. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_provider/file.tar.gz +0 -0
  244. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_provider/file.v +0 -0
  245. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_provider/file.zip +0 -0
  246. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_provider/vlog_functions.v +0 -0
  247. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_provider.py +0 -0
  248. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/blinky/blinky.core +0 -0
  249. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/blinky/data/nexys_video.xdc +0 -0
  250. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/blinky/rtl/blinky.sv +0 -0
  251. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/blinky/rtl/macros.svh +0 -0
  252. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/blinky/tb/blinky_tb.sv +0 -0
  253. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/dualblinky/data/nexys_video.xdc +0 -0
  254. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/dualblinky/dualblinky.core +0 -0
  255. {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/dualblinky/rtl/dualblinky.sv +0 -0
  256. {fusesoc-2.4.2 → fusesoc-2.4.4}/tox.ini +0 -0
@@ -17,7 +17,7 @@ jobs:
17
17
  fail-fast: false
18
18
  matrix:
19
19
  os:
20
- - { icon: 🐧, name: ubuntu-20.04 }
20
+ - { icon: 🐧, name: ubuntu-22.04 }
21
21
  - { icon: 🍎, name: macos-latest }
22
22
  # CI is currently broken on Windows
23
23
  # https://github.com/olofk/fusesoc/issues/528
@@ -4,8 +4,8 @@ on: [pull_request, push]
4
4
 
5
5
  jobs:
6
6
  pre-commit:
7
- runs-on: ubuntu-20.04
7
+ runs-on: ubuntu-22.04
8
8
  steps:
9
9
  - uses: actions/checkout@v4
10
10
  - uses: actions/setup-python@v5
11
- - uses: pre-commit/action@v2.0.0
11
+ - uses: pre-commit/action@v3.0.1
@@ -1,4 +1,38 @@
1
- 2.4.2 2024-01-07 Olof Kindgren <olof.kindgren@gmail.com>
1
+ 2.4.4 2025-09-09 Olof Kindgren
2
+ ======================================================
3
+
4
+ * Fix exporting of generated files
5
+ * Make filter errors fatal
6
+ * Add signing support
7
+ * Add license field to CAPI2
8
+
9
+ Contributors:
10
+ Anders Ahlberg
11
+ Anska Ludwig
12
+ Hugo McNally
13
+ Olof Kindgren
14
+ Paul Gatewood
15
+
16
+ 2.4.3 2025-04-14 Olof Kindgren <olof.kindgren@gmail.com>
17
+ ======================================================
18
+
19
+ * Improve generator caching
20
+ * Check out missing core libraries on updates
21
+ * Added argcompletion
22
+ * Add lockfile support
23
+ * Add mapping support
24
+ * Expose core description files in EDAM
25
+
26
+ Contributors:
27
+ Erik Bånvik <erik.public@gmail.com>
28
+ Hugo McNally <hugo.mcnally@gmail.com>
29
+ Ivan <ivanmvig@gmail.com>
30
+ Julian Frimmel <julian@fri-me.de>
31
+ Nico Rumpeltin <nico@rumpeltin.de>
32
+ Olof Kindgren <olof.kindgren@gmail.com>
33
+
34
+
35
+ 2.4.2 2025-01-07 Olof Kindgren <olof.kindgren@gmail.com>
2
36
  ======================================================
3
37
 
4
38
  * Support lists in file_input_parameters
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: fusesoc
3
- Version: 2.4.2
3
+ Version: 2.4.4
4
4
  Summary: Award-winnning package manager and build abstraction tool for HDL code
5
5
  Author-email: Olof Kindgren <olof@award-winning.me>
6
6
  Maintainer-email: Olof Kindgren <olof@award-winning.me>
@@ -22,7 +22,8 @@ Requires-Dist: pyparsing>=2.3.1
22
22
  Requires-Dist: pyyaml>=6.0
23
23
  Requires-Dist: simplesat>=0.9.1
24
24
  Requires-Dist: fastjsonschema
25
- Requires-Dist: jsonschema2md
25
+ Requires-Dist: argcomplete
26
+ Dynamic: license-file
26
27
 
27
28
  # FuseSoC
28
29
 
@@ -1,3 +1,4 @@
1
+ jsonschema2md
1
2
  myst_parser >= 0.18.0
2
3
  Sphinx >= 6.2.1
3
4
  sphinx-rtd-theme >= 1.2.0
@@ -270,3 +270,29 @@ As always with inheritance the interesting questions are around overriding behav
270
270
  To do so, it specifies the special ``filesets_append`` key with a partial list.
271
271
  When evaluating the core file, FuseSoC appends the contents of ``sim.fileset_append`` at the end of ``default.fileset`` to form a list with two items: ``rtl``, and ``tb``.
272
272
  The same behavior works for all lists in core files.
273
+
274
+ Signed core files
275
+ -----------------
276
+
277
+ The fusesoc cli tool can produce a cryptographic signature for a core (currenly using ssh keys). The signature is stored in a separate file named as the signed core but with ``.sig`` appended.
278
+
279
+ For verifying signatures a file called a *trustfile* is used. The trustfile contains a list of trusted users and their public ssh keys, one per line:
280
+
281
+ .. code-block:: text
282
+
283
+ $ cat tests/signature_files/trustfiles/trustfile_1ed_and_2
284
+ user1@example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFL1l8BB+EnUUkwMtMMqv1HFw8q2SZ7ERuGcFYt8VtqL
285
+ user2@example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP6w+b8Xue0Jo/Hskd9B+Ttr6g9rq99qbZV/01q+FgED
286
+
287
+ The location of this file can be set in the ``[main]`` section of the ``fusesoc.conf`` file:
288
+
289
+ .. code-block:: INI
290
+
291
+ [main]
292
+ ssh-trustfile = /home/anders/FuseSoCdb/git/fusesoc/tests/signature_files/trustfiles/trustfile
293
+
294
+ This setting can also be overridden using the command line option ``--ssh-trustfile``.
295
+
296
+ The signing process is accomplished with the ``core sign`` command, which takes a core name and a path to a private ssh key as arguments.
297
+
298
+ The signing status of a core is shown in the ``core list`` and ``core show`` commands in the fusesoc cli tool.
@@ -38,5 +38,7 @@ A full reference documentation on the CAPI2 core file format can be found in the
38
38
  filters.rst
39
39
  flags.rst
40
40
  generators.rst
41
+ virtual_cores.rst
42
+ mappings.rst
41
43
  hooks.rst
42
44
  vpi.rst
@@ -0,0 +1,40 @@
1
+ .. _ug_build_system_mappings:
2
+
3
+ Mappings: Replace cores in the dependency tree
4
+ ==============================================
5
+
6
+ Mappings allow a user of a core to substitute dependencies of the core with other cores without having to edit any of the core or it's dependencies files.
7
+ An example use case is making use of an existing core but substituting one of it's dependencies with a version that some desired changes (e.g. bug fixes).
8
+
9
+ If you are looking to provide a core with multiple implementations, virtual cores is the recommended and more semantic solution.
10
+ See :ref:`ug_build_system_virtual_cores` for more information on virtual cores.
11
+ Note: virtual cores can also be substituted in mappings.
12
+
13
+ Declaring mappings
14
+ ------------------
15
+
16
+ Each core file can have one mapping.
17
+ An example mapping core file:
18
+
19
+ .. code:: yaml
20
+
21
+ name: "local:map:override_fpu_and_fifo"
22
+ mapping:
23
+ "vendor:lib:fpu": "local:lib:fpu"
24
+ "vendor:lib:fifo": "local:lib:fifo"
25
+
26
+ The example above is a core file with only a mapping property, but any core file may contain a mapping in addition to other properties (e.g. filesets, targets & generators).
27
+
28
+ Applying mappings
29
+ -----------------
30
+
31
+ To apply a mapping, provide the VLNV of the core file that contains the desired
32
+ mapping with `fusesoc run`'s `--mapping` argument. Multiple mappings may be
33
+ provided as shown below.
34
+
35
+ .. code:: sh
36
+
37
+ fusesoc run \
38
+ --mapping local:map:override_fpu_and_fifo \
39
+ --mapping local:map:another_mapping \
40
+ vendor:top:main
@@ -0,0 +1,8 @@
1
+ .. _ug_build_system_virtual_cores:
2
+
3
+ Virtual Cores: Provide a common interface
4
+ =========================================
5
+
6
+ .. todo::
7
+
8
+ Document virtual cores.
@@ -10,8 +10,10 @@ import os
10
10
  import shutil
11
11
  import warnings
12
12
  from filecmp import cmp
13
+ from types import MappingProxyType
14
+ from typing import Mapping, Optional
13
15
 
14
- from fusesoc import utils
16
+ from fusesoc import signature, utils
15
17
  from fusesoc.capi2.coredata import CoreData
16
18
  from fusesoc.provider.provider import get_provider
17
19
  from fusesoc.vlnv import Vlnv
@@ -129,7 +131,9 @@ class Core:
129
131
  for root, dirs, files in os.walk(dst_dir):
130
132
  for f in files:
131
133
  _abs_f = os.path.join(root, f)
132
- if not os.path.relpath(_abs_f, dst_dir).replace("\\", "/") in src_files:
134
+ _rel_f = os.path.normpath(os.path.relpath(_abs_f, dst_dir))
135
+
136
+ if not _rel_f in [os.path.normpath(x) for x in src_files]:
133
137
  os.remove(_abs_f)
134
138
 
135
139
  def _get_script_names(self, flags):
@@ -517,12 +521,13 @@ class Core:
517
521
  )
518
522
  return vpi
519
523
 
520
- def info(self):
524
+ def info(self, trustfile):
521
525
  s = """CORE INFO
522
526
  Name: {}
523
527
  Description: {}
524
528
  Core root: {}
525
529
  Core file: {}
530
+ Signature: {}
526
531
 
527
532
  Targets:
528
533
  {}"""
@@ -547,6 +552,7 @@ Targets:
547
552
  str(self.get_description() or "<No description>"),
548
553
  str(self.core_root),
549
554
  str(self.core_basename),
555
+ self.sig_status_long(trustfile),
550
556
  targets,
551
557
  )
552
558
 
@@ -630,3 +636,57 @@ Targets:
630
636
 
631
637
  def get_description(self):
632
638
  return self._coredata.get_description()
639
+
640
+ @property
641
+ def mapping(self) -> Optional[Mapping[str, str]]:
642
+ return MappingProxyType(self._coredata.get("mapping", {}))
643
+
644
+ def signed_data(self):
645
+ """
646
+ Return a canonical representation of the core as a string
647
+ for signature purposes.
648
+ """
649
+ file = open(self.core_file, "rb")
650
+ header = file.readline()
651
+ core_raw = file.read()
652
+ file.close()
653
+ if header.startswith(b"CAPI=2:"):
654
+ # Core file is single document, no built in signature. We
655
+ # sign everything after the header line.
656
+ core_canonical = core_raw.strip()
657
+ else:
658
+ # Core file is not a valid CAPI=2 document.
659
+ raise RuntimeError("File to sign is not a valid CAPI=2 document.")
660
+ return core_canonical
661
+
662
+ def sig_status_long(self, trustfile):
663
+ return {
664
+ "-": "Not signed",
665
+ "?": "Signed by unknown key",
666
+ "*": "Signature is not for this core",
667
+ "!": "Signature checking error",
668
+ "good": "Good",
669
+ "?!": "Either signed by an unknown key, or signature does not match",
670
+ }.get(self.sig_status(trustfile), "Other signature checking error")
671
+
672
+ def sig_status(self, trustfile):
673
+ sigfile = self.core_file + ".sig"
674
+ if not os.path.isfile(sigfile):
675
+ return "-" # Not signed
676
+ if not trustfile:
677
+ return "?" # Signed by unknown key
678
+ ok = False
679
+ try:
680
+ res = signature.verify(self, trustfile, sigfile)
681
+ for user in res:
682
+ if res[user]:
683
+ ok = True
684
+ except RuntimeError:
685
+ return "*" # Signature is not for this core (should not happen)
686
+ except:
687
+ return "!" # Other signature checking error
688
+ if ok:
689
+ return "good"
690
+ else:
691
+ return "?!" # Either signed by an untrusted key, or
692
+ # signature does not match.
@@ -43,22 +43,18 @@ class CoreData:
43
43
 
44
44
  if type(data) == list:
45
45
  remove = []
46
- append = []
47
- for i in data:
46
+ for idx, i in enumerate(data):
48
47
  if type(i) == str and len(i) > 0 and "?" in i:
49
48
  expanded = Exprs(i).expand(flags)
50
49
  if i != expanded:
51
- remove.append(i)
52
50
  if len(expanded) > 0:
53
- append.append(expanded)
51
+ data[idx] = expanded
52
+ else:
53
+ remove.append(idx)
54
54
  elif type(i) == dict or type(i) == list:
55
55
  self._expand_use(i, flags)
56
-
57
- for i in remove:
58
- data.remove(i)
59
-
60
- for i in append:
61
- data.append(i)
56
+ for i in reversed(remove):
57
+ data.pop(i)
62
58
 
63
59
  def _append_lists(self, data):
64
60
  if type(data) == list: