Subject: [PATCH] gnu: nextpnr: split devices.
From: Cayetano Santos <[email-masked]>
To: [email-masked]
Cc: Cayetano Santos <[email-masked]>
Date: Wed, 19 Mar 2025 11:21:35 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

* gnu/packages/fpga.scm (nextpnr): split-devices.

Change-Id: I681dfa90a0ace3b507f3b56f3ac7d90227345606
---

- update package definitions to current guix standards
- prepare for new devices
 - split common package for all devices, from ice40 device package

 gnu/packages/fpga.scm | 183 ++++++++++++++++++++++--------------------
 1 file changed, 96 insertions(+), 87 deletions(-)

diff --git a/gnu/packages/fpga.scm b/gnu/packages/fpga.scm
index c09fe9bc76..88a7a58aa2 100644
--- a/gnu/packages/fpga.scm
+++ b/gnu/packages/fpga.scm
@@ -313,102 +313,111 @@ (define-public icestorm
 Includes the actual FTDI connector.")
     (license license:isc))))
 
-(define-public nextpnr-ice40
-  (let* ((version "0.7")
-         (tag (string-append "nextpnr-" version)))
-    (package
-      (name "nextpnr-ice40")
-      (version version)
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/YosysHQ/nextpnr")
-               (commit tag)
-               (recursive? #t)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0sbhqscgmlk4q2207rsqsw99qx4fyrxx1hsd669lrk42gmk3s9lm"))
-         (modules '((guix build utils)))
-         (snippet
-          #~(begin
-              ;; Remove bundled source code for which Guix has packages.
-              ;; Note the bundled copies of json11 and python-console contain
-              ;; modifications, while QtPropertyBrowser appears to be
-              ;; abandoned and without an official source.
-              ;; fpga-interchange-schema is used only by the
-              ;; "fpga_interchange" architecture target, which this package
-              ;; doesn't build.
+(define nextpnr
+  (package
+    (name "nextpnr")
+    (version "0.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/YosysHQ/nextpnr/")
+             (commit (string-append "nextpnr-" version))
+             (recursive? #t)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0sbhqscgmlk4q2207rsqsw99qx4fyrxx1hsd669lrk42gmk3s9lm"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:out-of-source? #t
+      #:configure-flags
+      #~(list "-DBUILD_GUI=ON" "-DUSE_OPENMP=yes" "-DBUILD_TESTS=ON"
+              (string-append "-DCURRENT_GIT_VERSION=nextpnr-"
+                             #$version) "-DUSE_IPO=OFF")
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Remove bundled source code for which Guix has packages.
+          ;; Note the bundled copies of json11 and python-console contain
+          ;; modifications, while QtPropertyBrowser appears to be
+          ;; abandoned and without an official source.
+          ;; fpga-interchange-schema is used only by the
+          ;; "fpga_interchange" architecture target, which this package
+          ;; doesn't build.
+          (add-after 'unpack 'remove-deps
+            (lambda _
               (with-directory-excursion "3rdparty"
                 (for-each delete-file-recursively
                           '("googletest" "imgui" "pybind11" "qtimgui"
-                            "sanitizers-cmake")))
-
+                            "sanitizers-cmake" "corrosion")))))
+          (add-after 'remove-deps 'patch-source
+            (lambda* (#:key inputs #:allow-other-keys)
               ;; Remove references to unbundled code and link against external
               ;; libraries instead.
               (substitute* "CMakeLists.txt"
-                (("^\\s+add_subdirectory\\(3rdparty/googletest.*") "")
-                (("^(\\s+target_link_libraries.*)( gtest_main\\))"
-                  _ prefix suffix)
-                 (string-append prefix " gtest" suffix)))
+                ;; Use the system sanitizers-cmake module.
+                (("\\$\\{CMAKE_SOURCE_DIR\\}/3rdparty/sanitizers-cmake/cmake")
+                 (string-append #$(this-package-native-input
+                                   "sanitizers-cmake")
+                                "/share/sanitizers-cmake/cmake"))
+                ;; Use the system googletest module.
+                (("^\\s+add_subdirectory\\(3rdparty/googletest.*")
+                 "")
+                (("^(\\s+target_link_libraries.*)( gtest_main\\))" _ prefix
+                  suffix)
+                 (string-append prefix " gtest" suffix))
+                ;; Use the system corrosion module.
+                (("^\\s+add_subdirectory\\(3rdparty/corrosion.*")
+                 ""))
               (substitute* "gui/CMakeLists.txt"
-                (("^\\s+../3rdparty/(qt)?imgui.*") "")
+                ;; Compile with system imgui and qtimgui headers.
+                (("^(target_include_directories.*)../3rdparty/imgui(.*)$" _
+                  prefix suffix)
+                 (string-append prefix
+                                (search-input-directory inputs "include/imgui")
+                                suffix))
+                (("^(target_include_directories.*)../3rdparty/qtimgui/(.*)$" _
+                  prefix suffix)
+                 (string-append prefix
+                                (search-input-directory inputs
+                                                        "include/qtimgui")
+                                suffix)))
+              (substitute* "gui/CMakeLists.txt"
+                (("^\\s+../3rdparty/(qt)?imgui.*")
+                 "")
                 (("^(target_link_libraries.*)\\)" _ prefix)
-                 (string-append prefix " imgui qt_imgui_widgets)")))))))
-      (native-inputs
-       (list googletest sanitizers-cmake))
-      (inputs
-       (list boost
-             eigen
-             icestorm
-             imgui-1.86
-             pybind11
-             python
-             qtbase-5
-             qtwayland-5
-             qtimgui
-             yosys))
-      (build-system qt-build-system)
-      (arguments
-       (list
-        #:configure-flags
-        #~(list "-DARCH=ice40"
-                "-DBUILD_GUI=ON"
-                "-DBUILD_TESTS=ON"
-                (string-append "-DCURRENT_GIT_VERSION=" #$tag)
-                (string-append "-DICESTORM_INSTALL_PREFIX="
-                               #$(this-package-input "icestorm"))
-                "-DUSE_IPO=OFF")
-        #:phases
-        #~(modify-phases %standard-phases
-            (add-after 'unpack 'patch-source
-              (lambda* (#:key inputs #:allow-other-keys)
-                (substitute* "CMakeLists.txt"
-                  ;; Use the system sanitizers-cmake module.
-                  (("\\$\\{CMAKE_SOURCE_DIR\\}/3rdparty/sanitizers-cmake/cmake")
-                   (string-append
-                    #$(this-package-native-input "sanitizers-cmake")
-                    "/share/sanitizers-cmake/cmake")))
-                (substitute* "gui/CMakeLists.txt"
-                  ;; Compile with system imgui and qtimgui headers.
-                  (("^(target_include_directories.*)../3rdparty/imgui(.*)$"
-                    _ prefix suffix)
-                   (string-append prefix
-                                  (search-input-directory inputs
-                                                          "include/imgui")
-                                  suffix))
-                  (("^(target_include_directories.*)../3rdparty/qtimgui/(.*)$"
-                    _ prefix suffix)
-                   (string-append prefix
-                                  (search-input-directory inputs
-                                                          "include/qtimgui")
-                                  suffix))))))))
-      (synopsis "Place-and-Route tool for FPGAs")
-      (description "Nextpnr aims to be a vendor neutral, timing driven, FOSS
+                 (string-append prefix " imgui qt_imgui_widgets)"))))))))
+    (native-inputs (list googletest sanitizers-cmake))
+    (inputs (list boost
+                  eigen
+                  corrosion
+                  imgui
+                  pybind11
+                  python
+                  qtbase-5
+                  qtwayland-5
+                  qtimgui
+                  yosys))
+    (synopsis "Place-and-Route tool for FPGAs")
+    (description "Nextpnr aims to be a vendor neutral, timing driven, FOSS
 FPGA place and route tool.")
-      (home-page "https://github.com/YosysHQ/nextpnr")
-      (license license:expat))))
+    (home-page "https://github.com/YosysHQ/nextpnr/")
+    (license license:isc)))
+
+(define-public nextpnr-ice40
+  (package
+    (inherit nextpnr)
+    (name "nextpnr-ice40")
+    (arguments
+     (substitute-keyword-arguments (package-arguments nextpnr)
+       ((#:configure-flags flags
+         ''())
+        #~(cons "-DARCH=ice40"
+                (cons (string-append "-DICESTORM_INSTALL_PREFIX="
+                                     #$(this-package-input "icestorm"))
+                      #$flags)))))
+    (propagated-inputs (modify-inputs (package-propagated-inputs nextpnr)
+                         (prepend icestorm)))))
 
 (define-public gtkwave
   (package

base-commit: fd19785a9a7f111c6a97da25187c3351e7e8f3fd
--
2.48.1