diff options
Diffstat (limited to 'gnu/packages/electronics.scm')
-rw-r--r-- | gnu/packages/electronics.scm | 431 |
1 files changed, 325 insertions, 106 deletions
diff --git a/gnu/packages/electronics.scm b/gnu/packages/electronics.scm index 7c20450b5f..612e166d9b 100644 --- a/gnu/packages/electronics.scm +++ b/gnu/packages/electronics.scm @@ -1,16 +1,17 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org> +;;; Copyright © 2016, 2017, 2018 Theodoros Foradis <theodoros@foradis.org> ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2019 Clément Lassieur <clement@lassieur.org> ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2021 Leo Famulari <leo@famulari.name> -;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2022, 2023, 2025 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; Copyright © 2024 Juliana Sims <juli@incana.org> ;;; Copyright © 2025 Cayetano Santos <csantosb@inventati.org> ;;; Copyright © 2025 Sharlatan Hellseher <sharlatanus@gmail.com> ;;; Copyright © 2022 Konstantinos Agiannis <agiannis.kon@gmail.com> ;;; Copyright © 2018-2021 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2015-2025 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2022, 2024, 2025 Artyom V. Poptsov <poptsov.artyom@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -30,9 +31,11 @@ (define-module (gnu packages electronics) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system cmake) + #:use-module (guix build-system copy) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) #:use-module (guix build-system pyproject) + #:use-module (guix build-system qt) #:use-module (guix download) #:use-module (guix gexp) #:use-module (guix git-download) @@ -42,6 +45,7 @@ #:use-module (gnu packages algebra) #:use-module (gnu packages autotools) #:use-module (gnu packages base) + #:use-module (gnu packages bash) #:use-module (gnu packages bison) #:use-module (gnu packages boost) #:use-module (gnu packages c) @@ -59,6 +63,7 @@ #:use-module (gnu packages gl) #:use-module (gnu packages glib) #:use-module (gnu packages gnome) + #:use-module (gnu packages gperf) #:use-module (gnu packages graphviz) #:use-module (gnu packages gtk) #:use-module (gnu packages libftdi) @@ -78,6 +83,7 @@ #:use-module (gnu packages sqlite) #:use-module (gnu packages stb) #:use-module (gnu packages swig) + #:use-module (gnu packages textutils) #:use-module (gnu packages tcl) #:use-module (gnu packages tls) #:use-module (gnu packages toolkits) @@ -140,6 +146,50 @@ individual low-level driver modules.") (home-page "https://www.comedi.org/") (license license:lgpl2.1))) +(define-public json-for-vhdl + ;; No tagged releases. + (let ((commit "0dc9e317440263cd4941f157f5e5668baa858ec2") + (revision "0")) + (package + (name "json-for-vhdl") + (version (git-version "20220905" revision commit)) ;last revision + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/Paebbels/JSON-for-VHDL/") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1062g2c3dpsb67zhqrn1j04p7jl28g4mcxd6nhrqqfffjsvxkpw9")))) + (build-system copy-build-system) + (arguments + (list + #:install-plan + #~'(("src" "share/json-for-vhdl" + #:include ("vhdl"))) + #:phases + #~(modify-phases %standard-phases + ;; The examples/Encodings_VUnit test requires vhdl builtins. + (add-after 'unpack 'fix-check + (lambda _ + (substitute* "tests/VUnit/run.py" + (("from_argv\\(\\)") + "from_argv()\nvu.add_vhdl_builtins()")))) + (add-after 'install 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "python3" "tests/VUnit/run.py" "-v"))))))) + (native-inputs + (list nvc python-minimal python-vunit)) + (home-page "https://github.com/Paebbels/JSON-for-VHDL/") + (synopsis "Parse and query JSON data structures in VHDL") + (description + "The JSON-for-VHDL library provides a parser to query JSON data +structures from external files on disk. It provides a context to be +used in the declarative section of design units.") + (license license:asl2.0)))) + (define librnd (package (name "librnd") @@ -216,39 +266,40 @@ to take care of the OS-specific details when writing software that uses serial p (file-name (git-file-name name version)))) (outputs '("out" "doc")) (arguments - `(#:tests? #f ; tests need USB access - #:phases - (modify-phases %standard-phases - (add-before 'configure 'change-udev-group - (lambda _ - (substitute* (find-files "contrib" "\\.rules$") - (("plugdev") "dialout")))) - (add-after 'build 'build-doc - (lambda _ - (invoke "doxygen"))) - (add-after 'install 'install-doc - (lambda* (#:key outputs #:allow-other-keys) - (copy-recursively "doxy/html-api" - (string-append (assoc-ref outputs "doc") - "/share/doc/libsigrok")))) - (add-after 'install-doc 'install-udev-rules - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (rules (string-append out "/lib/udev/rules.d/"))) - (for-each (lambda (file) - (install-file file rules)) - (find-files "contrib" "\\.rules$"))))) - (add-after 'install-udev-rules 'install-fw - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((fx2lafw (assoc-ref inputs "sigrok-firmware-fx2lafw")) - (out (assoc-ref outputs "out")) - (dir-suffix "/share/sigrok-firmware/") - (input-dir (string-append fx2lafw dir-suffix)) - (output-dir (string-append out dir-suffix))) - (for-each - (lambda (file) - (install-file file output-dir)) - (find-files input-dir ".")))))))) + (list + #:tests? #f ; tests need USB access + #:phases + #~(modify-phases %standard-phases + (add-before 'configure 'change-udev-group + (lambda _ + (substitute* (find-files "contrib" "\\.rules$") + (("plugdev") "dialout")))) + (add-after 'build 'build-doc + (lambda _ + (invoke "doxygen"))) + (add-after 'install 'install-doc + (lambda _ + (copy-recursively + "doxy/html-api" + (string-append #$output:doc "/share/doc/libsigrok")))) + (add-after 'install-doc 'install-udev-rules + (lambda _ + (for-each + (lambda (file) + (install-file + file + (string-append #$output "/lib/udev/rules.d/"))) + (find-files "contrib" "\\.rules$")))) + (add-after 'install-udev-rules 'install-fw + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((fx2lafw (assoc-ref inputs "sigrok-firmware-fx2lafw")) + (dir-suffix "/share/sigrok-firmware/") + (input-dir (string-append fx2lafw dir-suffix)) + (output-dir (string-append #$output dir-suffix))) + (for-each + (lambda (file) + (install-file file output-dir)) + (find-files input-dir ".")))))))) (native-inputs (list autoconf automake doxygen graphviz libtool sigrok-firmware-fx2lafw pkg-config)) @@ -289,18 +340,18 @@ supported devices, as well as input/output file format support.") "11l8vnf2khqbaqas7cfnq3f8q5w7am6nbkkd5mqj5kpb3ya2avb9")))) (outputs '("out" "doc")) (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'build 'build-doc - (lambda _ - (invoke "doxygen") - #t)) - (add-after 'install 'install-doc - (lambda* (#:key outputs #:allow-other-keys) - (copy-recursively "doxy/html-api" - (string-append (assoc-ref outputs "doc") - "/share/doc/libsigrokdecode")) - #t))))) + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'build 'build-doc + (lambda _ + (invoke "doxygen"))) + (add-after 'install 'install-doc + (lambda _ + (copy-recursively + "doxy/html-api" + (string-append #$output:doc + "/share/doc/libsigrokdecode"))))))) (native-inputs (list check doxygen graphviz pkg-config automake autoconf libtool)) ;; libsigrokdecode.pc lists "python" in Requires.private, and "glib" in @@ -319,7 +370,7 @@ supported devices, as well as input/output file format support.") (define-public m8c (package (name "m8c") - (version "1.7.10") + (version "2.0.0") (source (origin (method git-fetch) @@ -328,7 +379,7 @@ supported devices, as well as input/output file format support.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "18bx6jf0jbgnd6cfydh4iknh25rrpyc8awma4a1hkia57fyjy2gi")))) + (base32 "1x6klsqgy6j2b6cvkk386jmb0nbcpsrr36ji6cfwd3039wx657i8")))) (build-system gnu-build-system) (arguments (list @@ -337,9 +388,10 @@ supported devices, as well as input/output file format support.") #~(modify-phases %standard-phases (delete 'configure)) #:tests? #f)) ;no tests - (native-inputs (list pkg-config)) - (inputs (list libserialport - sdl2)) + (native-inputs + (list pkg-config)) + (inputs + (list libserialport sdl3)) (home-page "https://github.com/laamaa/m8c") (synopsis "Cross-platform M8 tracker headless client") (description @@ -644,28 +696,29 @@ formats.") (package (name "pulseview") (version "0.4.2") - (source (origin - (method url-fetch) - (uri (string-append - "https://sigrok.org/download/source/pulseview/pulseview-" - version ".tar.gz")) - (sha256 - (base32 - "1jxbpz1h3m1mgrxw74rnihj8vawgqdpf6c33cqqbyd8v7rxgfhph")) - (patches (search-patches "pulseview-qt515-compat.patch" - "pulseview-glib-2.68.patch")))) + (source + (origin + (method url-fetch) + (uri (string-append + "https://sigrok.org/download/source/pulseview/pulseview-" + version ".tar.gz")) + (sha256 + (base32 + "1jxbpz1h3m1mgrxw74rnihj8vawgqdpf6c33cqqbyd8v7rxgfhph")) + (patches (search-patches "pulseview-qt515-compat.patch" + "pulseview-glib-2.68.patch")))) (build-system cmake-build-system) (arguments - `(#:tests? #f ;format_time_minutes_test is failing - #:phases - (modify-phases %standard-phases - (add-after 'install 'remove-empty-doc-directory - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (with-directory-excursion (string-append out "/share") - ;; Use RMDIR to never risk silently deleting files. - (rmdir "doc/pulseview") - (rmdir "doc")))))))) + (list + #:tests? #f ;format_time_minutes_test is failing + #:phases + #~(modify-phases %standard-phases + (add-after 'install 'remove-empty-doc-directory + (lambda _ + (with-directory-excursion (string-append #$output "/share") + ;; Use RMDIR to never risk silently deleting files. + (rmdir "doc/pulseview") + (rmdir "doc"))))))) (native-inputs (list pkg-config qttools-5)) (inputs @@ -678,10 +731,75 @@ formats.") qtsvg-5)) (home-page "https://www.sigrok.org/wiki/PulseView") (synopsis "Qt based logic analyzer, oscilloscope and MSO GUI for sigrok") - (description "PulseView is a Qt based logic analyzer, oscilloscope and MSO GUI -for sigrok.") + (description "PulseView is a Qt based logic analyzer, oscilloscope and MSO +GUI for sigrok.") (license license:gpl3+))) +(define-public osvvm + (package + (name "osvvm") + (version "2025.06") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/osvvm/OsvvmLibraries/") + (commit version) + ;; OsvvmLibraries repository gathers all osvvm libraries as + ;; submodules. + (recursive? #t))) + (file-name (git-file-name name version)) + (sha256 + (base32 "08mfh7pyrb26mp8wx3xjns79slb3yf1c78nf8y1awvxc1p8q1wq4")))) + (outputs + '("out" "common" "scripts" "uart" "axi4")) + (properties + `((output-synopsis "out" "Verification Utility Library") + (output-synopsis "common" "Common library") + (output-synopsis "scripts" "Simulator script library") + (output-synopsis "uart" "UART Verification Component Library") + (output-synopsis "axi4" "AXI4 Verification Component Library"))) + (build-system copy-build-system) + (arguments + (list + #:install-plan + #~'(("osvvm" "share/osvvm/osvvm/" + #:include ("vhd" "pro" "md") + #:output "out") + ("Common" "share/osvvm/Common/" + #:include ("vhd" "pro" "md") + #:output "common") + ("Scripts" "share/osvvm/Scripts/" + #:include ("tcl" "md") + #:output "scripts") + ("UART" "share/osvvm/UART" + #:include ("vhd" "pro" "md") + #:exclude-regexp ("GHDL_Debug") + #:output "uart") + ("AXI4" "share/osvvm/AXI4" + #:include ("vhd" "pro" "md") + #:output "axi4")) + #:phases + #~(modify-phases %standard-phases + (add-before 'install 'fix-scripts + (lambda _ + ;; Default conflicts with read-only /gnu/store. + (substitute* "osvvm/OsvvmVhdlSettings.pro" + (("\\[FindOsvvmSettingsDirectory\\]") + " \"\" "))))))) + (native-search-paths + (list (search-path-specification + (variable "OSVVM") + (separator #f) + (files (list "share/osvvm"))))) + (home-page "https://osvvm.github.io/Overview/Osvvm1About.html/") + (synopsis "The OSVVM VHDL Verification Libraries and Scripts") + (description "OSVVM is a verification methodology that defines a VHDL +verification framework, verification utility library, verification component +library, scripting API, and co-simulation capability for FPGA or ASIC +verification.") + (license license:asl2.0))) + (define-public python-cocotb (package (name "python-cocotb") @@ -762,7 +880,7 @@ and reusable bus interfaces to be used with @code{cocotb}.") (define-public python-edalize (package (name "python-edalize") - (version "0.6.0") + (version "0.6.1") (source (origin (method git-fetch) @@ -771,7 +889,7 @@ and reusable bus interfaces to be used with @code{cocotb}.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1gfysk6wj3mxndyzma604i3y2lkfn1im0bdmzxv5rn4x2nyk68sc")))) + (base32 "03mkzkmi96jkrpgcnawixvy832p3b8li8lrirdjhfp9dmp7d5kg5")))) (build-system pyproject-build-system) (arguments (list @@ -780,18 +898,13 @@ and reusable bus interfaces to be used with @code{cocotb}.") ;; XXX: Tests failing with assertion not equal, find out ;; why. (list "not test_gatemate" - "test_gatemate_minimal" "test_vcs_tool_options" "test_vcs_no_tool_options" "test_vcs_minimal" - "test_vivado_edif_netlist" - "test_vivado_edif_netlist_no_link_design" "test_xcelium") " and not ")))) (native-inputs - (list python-pytest - python-setuptools - python-wheel)) + (list python-pytest python-setuptools-next)) (propagated-inputs (list python-jinja2)) (home-page "https://github.com/olofk/edalize/") @@ -873,7 +986,7 @@ design.") (define-public python-vsg (package (name "python-vsg") - (version "3.33.0") + (version "3.34.0") (source (origin (method git-fetch) @@ -882,7 +995,7 @@ design.") (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "1pnhha7dfika5jv1wrdwjkwrqaz22n0fb845wid5sy62gn549hmb")))) + (base32 "0sryf1wv4r5maxj4di5rpsmzcxins3gq8aksv7cpw6ywvdk1nj5l")))) (build-system pyproject-build-system) (arguments (list @@ -890,12 +1003,7 @@ design.") ;; Tests are expensive and may introduce race condition on systems with ;; high (more than 16) threads count; limit parallel jobs to 8x. #~(list - "--numprocesses" (number->string (min 8 (parallel-job-count))) - ;; TODO: Remove in 3.34.0. - ;; "file" command on "utf-8_encoded.vhd" file fails to detect - ;; utf-8 formatting. See: - ;; https://github.com/jeremiah-c-leary/vhdl-style-guide/issues/1471 - "-vv" "-k" "not test_utf_8") + "--numprocesses" (number->string (min 8 (parallel-job-count)))) #:phases #~(modify-phases %standard-phases (add-after 'unpack 'pathch-pytest-options @@ -905,12 +1013,10 @@ design.") ((".*--self-contained-html.*") "") ((".*-n.*auto.*") ""))))))) (native-inputs - (list python-pytest - python-pytest-cov + (list python-pytest-cov python-pytest-html python-pytest-xdist - python-setuptools - python-wheel)) + python-setuptools-next)) (propagated-inputs (list python-pyyaml)) (home-page "https://github.com/jeremiah-c-leary/vhdl-style-guide/") @@ -920,6 +1026,119 @@ design.") to enforce it.") (license license:gpl3+))) +(define-public qucsator-rf + (package + (name "qucsator-rf") + (version "1.0.6") ;required by qucs-s, keep in sync + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ra3xdh/qucsator_rf/") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0fx0kzj6hn0094jnvn6b1zqwjnkmd79xdr0zdyz5lmsyixlmxmvk")))) + (build-system cmake-build-system) + (arguments + (list + #:tests? #f ;no tests + #:phases + #~(modify-phases %standard-phases + (add-after 'install 'run-tests + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + ;; Qucs-test is a collection of python scripts and data test + ;; cases. Its purpose is to test Qucs (GUI) and Qucsator; + ;; tests are under `testsuite` directory. + (copy-recursively + #$(origin + (method git-fetch) + (uri + ;; Using latest revision; refer to + ;; .github/workflows/cmake.yml to keep up to date. + (git-reference + (url "https://github.com/ra3xdh/qucs-test/") + (commit "ce69e05ceecab910175e6ea36b6e021a6d279947"))) + (sha256 + (base32 + (string-append "1r3hx43wvd0s11mzsvj1chylzv" + "0lk9qhaw7205j9x316ly03bl08")))) + "qucs-test") + (with-directory-excursion "qucs-test" + (invoke "python3" "run.py" "--qucsator" + (format #f "--prefix=~a/bin" #$output) + "--exclude=skip.txt")))))) + #:configure-flags + #~(list (format #f "-DBISON_DIR=~a/bin" + #$(this-package-native-input "bison")) + (format #f "-DADMSXML_DIR=~a/bin" + #$(this-package-native-input "adms"))))) + (native-inputs + (list adms bison dos2unix flex gperf python python-looseversion + python-numpy python-matplotlib)) + (synopsis "RF and microwave circuits simulator") + (description + "@code{Qucsator-rf} is a command line driven circuit simulator targeted +for RF and microwave circuits. It takes a network list in a certain format as +input and outputs an XML dataset.") + (home-page "https://ra3xdh.github.io//") + (license license:gpl2+))) + +(define-public qucs-s + (package + (name "qucs-s") + (version "25.1.2") ;update qucsator-rf accordingly + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ra3xdh/qucs_s") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "07wrpqgbj77rmh1yxy233lk1y4ys1x0721b3jsldp058dcgf24zv")))) + (build-system qt-build-system) + (arguments + (list + #:qtbase qtbase ;for Qt 6 + #:tests? #f ;no tests + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'adjust-default-settings + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "qucs/settings.cpp" + (("\"ngspice\"") + (format #f "~s" (search-input-file inputs "bin/ngspice"))) + (("\"octave\"") + (format #f "~s" (search-input-file inputs "bin/octave")))))) + (add-after 'install 'wrap-program + (lambda _ + (wrap-program (string-append #$output "/bin/qucs-s") + `("PATH" ":" prefix + (,(string-append #$(this-package-input "ngspice") "/bin") + ,(string-append + #$(this-package-input "qucsator-rf") "/bin"))))))))) + (native-inputs (list qttools)) + (inputs + ;; TODO Add xyce-serial to the list. + (list bash-minimal octave qtbase qtcharts qtsvg qtwayland qucsator-rf ngspice)) + (synopsis "GUI for different circuit simulation kernels") + (description + "@acronym{Qucs-S, Quite universal circuit simulator with SPICE} provides +a fancy graphical user interface for a number of popular circuit simulation +engines. The package contains libraries for schematic capture, visualization +and components. The following simulation kernels are supported: +@itemize +@item Ngspice (recommended) +@item Xyce +@item SpiceOpus +@item Qucsator (non-SPICE) +@end itemize\n") + (home-page "https://ra3xdh.github.io/") + (license license:gpl2+))) + (define-public xschem (package (name "xschem") @@ -1148,19 +1367,16 @@ verification flows.") (define-public uhdm (package (name "uhdm") - (version "1.84") + (version "1.86") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/chipsalliance/UHDM/") - (commit (string-append "v" version)) - ;; avoid submodules, and use guix packages capnproto and - ;; googletest instead - (recursive? #f))) + (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "06i06wfyymhvmpnw79lgb84l9w9cyydvnr7n3bgmgf8a77jbxk2y")))) + (base32 "0nsy385frxz5v7i757h1x59xkl21asz3h2fk1nyvx37z8cj0kd3z")))) (build-system gnu-build-system) (arguments (list @@ -1171,12 +1387,15 @@ verification flows.") #:test-target "test" #:make-flags #~(list - "ADDITIONAL_CMAKE_OPTIONS=-DUHDM_USE_HOST_CAPNP=On -DUHDM_USE_HOST_GTEST=On" - (string-append "PREFIX=" - #$output)))) - (native-inputs (list cmake-minimal googletest pkg-config python-wrapper - swig)) - (inputs (list capnproto openssl python-orderedmultidict zlib)) + (string-append + "ADDITIONAL_CMAKE_OPTIONS=-DUHDM_USE_HOST_CAPNP=On" + ;; " -DUHDM_WITH_PYTHON=On" ;FIXME + " -DUHDM_USE_HOST_GTEST=On") + (string-append "PREFIX=" #$output)))) + (native-inputs + (list cmake-minimal googletest pkg-config python-wrapper swig)) + (inputs + (list capnproto openssl python-orderedmultidict zlib)) (home-page "https://github.com/chipsalliance/UHDM/") (synopsis "Universal Hardware Data Model") (description |