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.
- {fusesoc-2.4.2 → fusesoc-2.4.4}/.github/workflows/ci.yml +1 -1
- {fusesoc-2.4.2 → fusesoc-2.4.4}/.github/workflows/lint.yml +2 -2
- {fusesoc-2.4.2 → fusesoc-2.4.4}/NEWS +35 -1
- {fusesoc-2.4.2 → fusesoc-2.4.4}/PKG-INFO +4 -3
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/requirements.txt +1 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/core_files.rst +26 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/index.rst +2 -0
- fusesoc-2.4.4/doc/source/user/build_system/mappings.rst +40 -0
- fusesoc-2.4.4/doc/source/user/build_system/virtual_cores.rst +8 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/core.py +63 -3
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/coredata.py +6 -10
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/json_schema.py +303 -270
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/config.py +14 -2
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/coremanager.py +143 -1
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/edalizer.py +55 -68
- fusesoc-2.4.4/fusesoc/filters/coredepsmk.py +23 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/fusesoc.py +10 -2
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/librarymanager.py +12 -5
- fusesoc-2.4.4/fusesoc/lockfile.py +162 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/main.py +120 -10
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/git.py +3 -2
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/github.py +8 -1
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/url.py +6 -1
- fusesoc-2.4.4/fusesoc/signature.py +152 -0
- fusesoc-2.4.4/fusesoc/version.py +34 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/vlnv.py +46 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/PKG-INFO +4 -3
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/SOURCES.txt +38 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/requires.txt +1 -1
- {fusesoc-2.4.2 → fusesoc-2.4.4}/pyproject.toml +1 -1
- fusesoc-2.4.4/tests/capi2_cores/dependencies/top.core +18 -0
- fusesoc-2.4.4/tests/capi2_cores/dependencies/used-1.0.core +18 -0
- fusesoc-2.4.4/tests/capi2_cores/dependencies/used-1.1.core +18 -0
- fusesoc-2.4.4/tests/capi2_cores/mapping/a.core +8 -0
- fusesoc-2.4.4/tests/capi2_cores/mapping/b.core +6 -0
- fusesoc-2.4.4/tests/capi2_cores/mapping/c.core +9 -0
- fusesoc-2.4.4/tests/capi2_cores/mapping/d.core +10 -0
- fusesoc-2.4.4/tests/capi2_cores/mapping/e.core +6 -0
- fusesoc-2.4.4/tests/capi2_cores/mapping/f.core +6 -0
- fusesoc-2.4.4/tests/capi2_cores/mapping/map_rec.core +9 -0
- fusesoc-2.4.4/tests/capi2_cores/mapping/map_vers.core +8 -0
- fusesoc-2.4.4/tests/capi2_cores/mapping/top.core +21 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/generate/generate.core +11 -1
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/generate/generators.core +5 -0
- fusesoc-2.4.4/tests/lockfiles/dependencies-partial-1.0.lock.yml +2 -0
- fusesoc-2.4.4/tests/lockfiles/dependencies-partial.lock.yml +2 -0
- fusesoc-2.4.4/tests/lockfiles/dependencies.lock.yml +3 -0
- fusesoc-2.4.4/tests/lockfiles/duplicates.lock.yml +8 -0
- fusesoc-2.4.4/tests/lockfiles/works.lock.yml +7 -0
- fusesoc-2.4.4/tests/signature_files/keyfiles/user1_ecdsa +12 -0
- fusesoc-2.4.4/tests/signature_files/keyfiles/user1_ecdsa.pub +1 -0
- fusesoc-2.4.4/tests/signature_files/keyfiles/user1_ed25519 +7 -0
- fusesoc-2.4.4/tests/signature_files/keyfiles/user1_ed25519.pub +1 -0
- fusesoc-2.4.4/tests/signature_files/keyfiles/user1_rsa +49 -0
- fusesoc-2.4.4/tests/signature_files/keyfiles/user1_rsa.pub +1 -0
- fusesoc-2.4.4/tests/signature_files/keyfiles/user2_ed25519 +7 -0
- fusesoc-2.4.4/tests/signature_files/keyfiles/user2_ed25519.pub +1 -0
- fusesoc-2.4.4/tests/signature_files/keyfiles/user3_ed25519 +7 -0
- fusesoc-2.4.4/tests/signature_files/keyfiles/user3_ed25519.pub +1 -0
- fusesoc-2.4.4/tests/signature_files/trustfiles/trustfile_1ed_and_2 +2 -0
- fusesoc-2.4.4/tests/signature_files/trustfiles/trustfile_1rsa+ed_and_3 +3 -0
- fusesoc-2.4.4/tests/signature_files/trustfiles/trustfile_1rsa_and_2 +2 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_capi2.py +12 -4
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_config.py +42 -1
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_coremanager.py +362 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_edalizer.py +86 -17
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_libraries.py +33 -0
- fusesoc-2.4.4/tests/test_lockfile.py +34 -0
- fusesoc-2.4.4/tests/test_signatures.py +163 -0
- fusesoc-2.4.4/tests/test_usecases.py +163 -0
- fusesoc-2.4.4/tests/test_vlnv.py +130 -0
- fusesoc-2.4.2/fusesoc/version.py +0 -16
- fusesoc-2.4.2/tests/test_vlnv.py +0 -82
- {fusesoc-2.4.2 → fusesoc-2.4.4}/.editorconfig +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/.flake8 +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/.git-blame-ignore-revs +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/.gitignore +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/.pre-commit-config.yaml +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/.readthedocs.yml +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/LICENSE +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/README.md +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/dev-requirements.txt +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/_static/theme_overrides.css +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/conf.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/dev/devsetup.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/dev/index.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/index.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/ref/capi1.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/ref/glossary.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/ref/index.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/ref/migrations.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/dependencies.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/eda_flows.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/filters.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/flags.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/flow_options.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/generators.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/hooks.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/tool_options.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/build_system/vpi.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/cli.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/index.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/installation.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/introduction.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/knowledgebase.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/optional_deps.png +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/overview.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/doc/source/user/package_manager/index.rst +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/extras/bash-completion +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/coreparser.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/exprs.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/generator.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/capi2/inheritance.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/core.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/filters/autotype.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/filters/custom.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/filters/dot.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/filters/splitlib.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/parser/coreparser.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/local.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/opencores.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/provider.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/provider/svn.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc/utils.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/dependency_links.txt +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/entry_points.txt +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/fusesoc.egg-info/top_level.txt +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/setup.cfg +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/child1.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/child2.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/child3.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/child4.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/generated_child_a.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/generated_child_a.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/deptree/root.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/files_out_of_hierarchy/bad.sv +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/files_out_of_hierarchy/subdir/files_out_of_hierarchy.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/files_out_of_hierarchy/subdir/good.sv +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/append.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/depends.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/dontpickthisfile +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/dummy.tcl +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/empty.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/f1 +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/f2 +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/f3 +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/f4 +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/fileattrs.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/files.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/filters.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/flags.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/flow.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/generate/file_cachetest +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/generate/testgen.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/hooks.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/parameters.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/scriptfile +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/subdir/dummy.extra +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/syntax_error.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/targets.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/toplevel.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/typecheck.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/uncachable.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/vhdlfile +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/vlogfile +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/vpi.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/misc/vpifile +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/override/1/basic.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/override/2/basic.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/parser/inheritance.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/parser/no_additional_properties.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/parser/with_additional_properties.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/providers/url_simple.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/providers/url_simple_with_user_agent.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/providers/url_tar.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/providers/url_zip.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/impl1.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/impl2.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/top_conflict.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/top_impl1.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/top_impl2.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/top_non_deterministic.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/capi2_cores/virtual/user.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/adv_debug_sys/adv_debug_sys.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/atlys/atlys.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/atlys/data/atlys.ucf +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/atlys/data/dummy_backend_tcl_file.tcl +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/elf-loader/check_libelf.sh +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/elf-loader/elf-loader.c +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/elf-loader/elf-loader.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/elf-loader/vpi_wrapper.c +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/gpio/gpio.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/jtag_tap/jtag_tap-1.13.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/libstorage/libstorage-1.0.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/c3demo.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/c3demo.pcf +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/copytocore/copytocore.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/copytocore/dummy.tcl +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/copytocore/subdir/dummy.extra +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/dummy.tcl +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/dummy.xci +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/filetypes.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/ghdltest.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/gitcore.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/no_exe_script.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/nomain.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/opencorescore.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/paramtest.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scripts/no_exe_script +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scripts/post_build_script +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scripts/post_run_script +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scripts/pre_build_script +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scripts/pre_run_script +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/scriptscore.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/subdir/dummy.extra +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/misc/svn.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx/mor1kx-3.1.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-arty/mor1kx-arty.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-arty/mor1kx-arty.system +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-generic/mor1kx-generic.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-generic/scripts/post_run_script +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-generic/scripts/pre_build_script +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/mor1kx-generic/scripts/pre_run_script +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/sockit/sockit.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/uart16550/uart16550-1.5.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/verilator_tb_utils/verilator_tb_utils.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/verilog-arbiter/verilog-arbiter-r1.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/verilog_utils/verilog_utils.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/verilog_utils/verilog_utils.vh +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/vga_lcd/vga_lcd.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/vlog_tb_utils/files/0001-testpatch.patch +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/vlog_tb_utils/vlog_tb_utils-1.1.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/wb_common/wb_common.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/wb_common/wb_common.v +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/wb_common/wb_common_params.v +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/wb_intercon/dummy_icarus.v +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/cores/wb_intercon/wb_intercon-1.0.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_capi2/generators.info +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_capi2/targets.info +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_common.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_exprs.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_ignored_dirs.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_provider/file.tar.gz +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_provider/file.v +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_provider/file.zip +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_provider/vlog_functions.v +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/test_provider.py +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/blinky/blinky.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/blinky/data/nexys_video.xdc +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/blinky/rtl/blinky.sv +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/blinky/rtl/macros.svh +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/blinky/tb/blinky_tb.sv +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/dualblinky/data/nexys_video.xdc +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/dualblinky/dualblinky.core +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tests/userguide/dualblinky/rtl/dualblinky.sv +0 -0
- {fusesoc-2.4.2 → fusesoc-2.4.4}/tox.ini +0 -0
|
@@ -1,4 +1,38 @@
|
|
|
1
|
-
2.4.
|
|
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
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: fusesoc
|
|
3
|
-
Version: 2.4.
|
|
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:
|
|
25
|
+
Requires-Dist: argcomplete
|
|
26
|
+
Dynamic: license-file
|
|
26
27
|
|
|
27
28
|
# FuseSoC
|
|
28
29
|
|
|
@@ -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.
|
|
@@ -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
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|