guix_mirror_bot pushed a commit to branch master
in repository guix.
commit 5dca6d6643ba88414d10dee224c3bfa430e9cd4b
Author: Danny Milosavljevic <[email protected]>
AuthorDate: Thu Jan 1 21:18:26 2026 +0100
gnu: Add python-hdlconvertor.
* gnu/packages/electronics.scm (python-hdlconvertor): New variable.
(yosys-src-for-hdlconvertor-tests): New variable.
Change-Id: I0acd8c8f050a5bc632f68511b3e7d24cf3621162
---
gnu/packages/electronics.scm | 146 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 146 insertions(+)
diff --git a/gnu/packages/electronics.scm b/gnu/packages/electronics.scm
index efac568cff..1947f5d5e0 100644
--- a/gnu/packages/electronics.scm
+++ b/gnu/packages/electronics.scm
@@ -92,6 +92,7 @@
#:use-module (gnu packages graphviz)
#:use-module (gnu packages gtk)
#:use-module (gnu packages image)
+ #:use-module (gnu packages java)
#:use-module (gnu packages libedit)
#:use-module (gnu packages libffi)
#:use-module (gnu packages libftdi)
@@ -2205,6 +2206,151 @@ for @acronym{VHDL, Very high speed integrated circuit
Hardware Description Langu
SystemVerilog, and SystemC, with conversion between languages and to JSON.")
(license license:expat)))
+;; Yosys source pinned to hdlConvertor v2.3 submodule commit for parsing tests.
+(define yosys-src-for-hdlconvertor-tests
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/YosysHQ/yosys")
+ (commit "a299e606f864942c7edf90c4ad3998f4f4a346cf")))
+ (file-name "yosys-src-for-hdlconvertor-tests")
+ (sha256
+ (base32 "106bzlljn6843740r8rbaqf5ivkyfcgp25dgzds97j48ypmv6fih"))))
+
+(define-public python-hdlconvertor
+ (package
+ (name "python-hdlconvertor")
+ (version "2.3")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Nic30/hdlConvertor")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0xa7wm324dwp4wks8l9njpd2bz4gn7dfygdc3a78lxy1prvzbyyz"))))
+ (build-system pyproject-build-system)
+ (arguments
+ (list
+ #:test-flags
+ ;; Ignore tests inside yosys source tree (they're unrelated yosys tests).
+ #~(list "--ignore=tests/yosys")
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'build 'setup-antlr
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Build classpath from input jars.
+ (let* ((st4 (search-input-file inputs
+ "share/java/java-stringtemplate-4.0.8.jar"))
+ (antlr4 (search-input-file inputs
+ "share/java/antlr4.jar"))
+ (antlr4-rt (search-input-file inputs
+ "share/java/java-antlr4-runtime.jar"))
+ (antlr3 (search-input-file inputs
+ "share/java/antlr3-3.5.2.jar"))
+ (treelayout (search-input-file inputs
+ "share/java/java-treelayout-1.0.3.jar"))
+ (classpath (string-join (list st4 antlr4 antlr4-rt
+ antlr3 treelayout)
+ ":"))
+ (antlr4cpp-include (search-input-directory
+ inputs "include/antlr4-runtime"))
+ (antlr4cpp-lib (search-input-file
+ inputs "lib/libantlr4-runtime.so"))
+ (python-include (search-input-directory
+ inputs "include/python3.11")))
+ ;; Patch CMake to use our paths directly.
+ (substitute* "src/CMake_antlr4.txt"
+ (("set\\(ANTLR_CLASSPATH \"\"\\)")
+ (string-append "set(ANTLR_CLASSPATH \"" classpath "\")"))
+ ;; Skip the jar search loop.
+ (("FOREACH\\(antlr_jar \\$\\{ANTLR_JARS\\}\\)")
+ "FOREACH(antlr_jar )")
+ ;; Set C++ runtime paths before find commands.
+ (("# search for antlr4 include dir and library")
+ (string-append
+ "# search for antlr4 include dir and library\n"
+ "set(ANTLR4CPP_INCLUDE_DIRS \"" antlr4cpp-include "\")\n"
+ "set(ANTLR4CPP_LIBRARIES \"" antlr4cpp-lib "\")\n")))
+ ;; hdlConvertor/CMakeLists.txt is a sibling subdirectory to
src/
+ ;; so variables set in src/CMake_antlr4.txt aren't visible
here;
+ ;; inject both ANTLR and Python include paths before
+ ;; include_directories.
+ (substitute* "hdlConvertor/CMakeLists.txt"
+ (("include_directories\\(")
+ (string-append
+ "set(ANTLR4CPP_INCLUDE_DIRS \"" antlr4cpp-include "\")\n"
+ "set(PYTHON_INCLUDE_DIRS \"" python-include "\")\n"
+ "include_directories(")))
+ ;; ANTLR4 4.10+ changed from .as<T>() to std::any_cast<T>().
+ ;; Upstream fixed this in commit 8b07c10 using preprocessor
+ ;; conditionals to support both old and new APIs, but that
+ ;; commit also includes unrelated changes (Block statement
+ ;; support). We apply a simplified fix for ANTLR 4.10+
+ ;; only.
+ (substitute* "src/verilogPreproc/verilogPreproc.cpp"
+ (("visitMacro_call\\(mc, false\\)\\.as<string>\\(\\)")
+ "std::any_cast<string>(visitMacro_call(mc, false))")
+ (("params = visitDefine_args\\(da\\);")
+ (string-append "params = std::any_cast<"
+ "vector<MacroDefVerilog::param_info_t>*"
+ ">(visitDefine_args(da));"))))))
+ (add-before 'check 'prepare-tests
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Symlink yosys source for yosys testsuite.
+ (delete-file-recursively "tests/yosys")
+ (symlink (assoc-ref inputs "yosys-src-for-hdlconvertor-tests")
+ "tests/yosys")
+ ;; Remove source hdlConvertor/ which shadows the installed
package.
+ (delete-file-recursively "hdlConvertor")
+ ;; Replace tests/__init__.py which imports all.py that requires
+ ;; git submodules; also delete tests requiring external tools.
+ (call-with-output-file "tests/__init__.py"
+ (lambda (port)
+ (display "" port)))
+ (delete-file "tests/all.py")
+ (for-each delete-file
+ (find-files "tests" "test_ghdl"))
+ (for-each delete-file
+ (find-files "tests" "test_icarus"))
+ (for-each delete-file
+ (find-files "tests" "test_verilator"))
+ (for-each delete-file
+ (find-files "tests" "test_uvvm"))
+ (for-each delete-file
+ (find-files "tests" "test_vunit"))
+ (for-each delete-file
+ (find-files "tests" "test_notebook"))
+ (for-each delete-file
+ (find-files "tests" "test_basic_hdl_sim")))))))
+ (native-inputs
+ (list antlr4 ; parser generator tool (antlr4.jar)
+ antlr3 ; antlr3-runtime.jar required by
hdlConvertor build
+ java-antlr4-runtime ; antlr4-runtime.jar required by
hdlConvertor build
+ java-stringtemplate ; stringtemplate4.jar required by
hdlConvertor build
+ java-treelayout ; treelayout.jar required by hdlConvertor
build
+ (list openjdk "jdk") ; Java runtime to execute ANTLR4
+ ;;; Python build dependencies:
+ python-cython ; compiles .pyx extension files to C++
+ python-scikit-build ; CMake-based Python build system
+ python-setuptools
+ python-wrapper ; Python interpreter for build scripts
+ python ; Python headers for C extension building
+ python-pytest
+ ;; Yosys source for parsing tests.
+ yosys-src-for-hdlconvertor-tests))
+ (inputs
+ (list java-antlr4-runtime-cpp))
+ (propagated-inputs
+ (list python-hdlconvertorast))
+ (home-page "https://github.com/Nic30/hdlConvertor")
+ (synopsis "VHDL and System Verilog parser")
+ (description "This package provides a @acronym{VHDL, Very high speed
+integrated circuit Hardware Description Language} and SystemVerilog
+parser library for Python.")
+ (license license:expat)))
+
(define-public python-pyucis
(package
(name "python-pyucis")