gnu: nextpnr-ice40: Remove bundled software.

* gnu/packages/fpga.scm (nextpnr-ice40)[source]: Add modules, snippet.
[native-inputs]: Add googletest, sanitizers-cmake.
[inputs]: Add imgui-1.86, pybind11, qtimgui.
[arguments]: Add "patch-source" phase; reformat gently.

Signed-off-by: Danny Milosavljevic <dannym@friendly-machines.com>
Change-Id: I1d291ef8356b1cb32f612a055c37654e5c0aba9d
Signed-off-by: Danny Milosavljevic <dannym@friendly-machines.com>
This commit is contained in:
Simon South 2023-01-27 15:34:33 -05:00 committed by Danny Milosavljevic
parent 43ed3520e1
commit 58ca09f554
No known key found for this signature in database
GPG key ID: E71A35542C30BAA5

View file

@ -7,6 +7,7 @@
;;; Copyright © 2021 Andrew Miloradovsky <andrew@interpretmath.pw> ;;; Copyright © 2021 Andrew Miloradovsky <andrew@interpretmath.pw>
;;; Copyright © 2022 Christian Gelinek <cgelinek@radlogic.com.au> ;;; Copyright © 2022 Christian Gelinek <cgelinek@radlogic.com.au>
;;; Copyright © 2022 jgart <jgart@dismail.de> ;;; Copyright © 2022 jgart <jgart@dismail.de>
;;; Copyright © 2023 Simon South <simon@simonsouth.net>
;;; Copyright © 2024 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2024 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2024 Jakob Kirsch <jakob.kirsch@web.de> ;;; Copyright © 2024 Jakob Kirsch <jakob.kirsch@web.de>
;;; ;;;
@ -69,6 +70,7 @@ (define-module (gnu packages fpga)
#:use-module (gnu packages qt) #:use-module (gnu packages qt)
#:use-module (gnu packages readline) #:use-module (gnu packages readline)
#:use-module (gnu packages tcl) #:use-module (gnu packages tcl)
#:use-module (gnu packages toolkits)
#:use-module (gnu packages version-control)) #:use-module (gnu packages version-control))
(define-public abc (define-public abc
@ -298,24 +300,77 @@ (define-public nextpnr-ice40
(file-name (git-file-name name version)) (file-name (git-file-name name version))
(sha256 (sha256
(base32 (base32
"1llkrh8rk1a1xxzx54apbg49ny2jqzzl2rmbkb8188idipq568ws")))) "1llkrh8rk1a1xxzx54apbg49ny2jqzzl2rmbkb8188idipq568ws"))
(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.
(with-directory-excursion "3rdparty"
(for-each delete-file-recursively
'("googletest" "imgui" "pybind11" "qtimgui"
"sanitizers-cmake")))
;; 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)))
(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 (inputs
(list boost (list boost
eigen eigen
icestorm icestorm
imgui-1.86
pybind11
python python
qtbase-5 qtbase-5
qtimgui
yosys)) yosys))
(build-system cmake-build-system) (build-system cmake-build-system)
(arguments (arguments
(list #:configure-flags (list
#~(list "-DARCH=ice40" #:configure-flags
"-DBUILD_TESTS=ON" #~(list "-DARCH=ice40"
(string-append "-DCURRENT_GIT_VERSION=" "-DBUILD_TESTS=ON"
#$(string-take commit 8)) (string-append "-DCURRENT_GIT_VERSION="
(string-append "-DICEBOX_ROOT=" #$(string-take commit 8))
#$(this-package-input "icestorm") (string-append "-DICEBOX_ROOT="
"/share/icebox")))) #$(this-package-input "icestorm")
"/share/icebox"))
#: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") (synopsis "Place-and-Route tool for FPGAs")
(description "Nextpnr aims to be a vendor neutral, timing driven, (description "Nextpnr aims to be a vendor neutral, timing driven,
FOSS FPGA place and route tool.") FOSS FPGA place and route tool.")