summaryrefslogtreecommitdiff
path: root/gnu/packages
diff options
context:
space:
mode:
authorJean-Pierre De Jesus DIAZ <jean@foundationdevices.com>2024-01-19 14:54:44 +0100
committerMathieu Othacehe <othacehe@gnu.org>2024-01-22 11:26:56 +0100
commite5a00639aa6490f3f2047174be719d2defda9c4a (patch)
treeb06815e909243ea131150701bf47499f99c3242c /gnu/packages
parentae7da5cbf0d1acb8cfd0fad53dd41d78c58991ae (diff)
gnu: make-crust-package: Memoize.
* gnu/packages/firmware.scm (make-crust-package): Use mlambda. Change-Id: I2d916b96bc650f3731a69505e086cf8f8f470809
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/firmware.scm155
1 files changed, 78 insertions, 77 deletions
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index 533cbca550..eb5251de5e 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -1197,81 +1197,82 @@ such as:
;; Adding debug symbols causes the size to exceed limits.
#~(delete "DEBUG=1" #$flags)))))))
-(define (make-crust-package platform)
- (package
- (name (string-append "crust-"
- (string-replace-substring platform "_" "-")))
- (version "0.5")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- ;; There are only GitHub generated release snapshots.
- (url "https://github.com/crust-firmware/crust")
- (commit (string-append "v" version))))
- (file-name (git-file-name "crust" version))
- (sha256
- (base32
- "0xgbbhifg3miwd3yp6jq9kp7nqgz5gzy00w95vba45j8jk5vjvvz"))))
- (build-system gnu-build-system)
- (arguments
- (list
- #:tests? #f ;no test suite
- #:make-flags
- (let ((triplet-without-vendor
- (and (%current-target-system)
- ;; TODO: Is there a use case for allowing this?
- (not (target-avr?))
- (match (string-split (nix-system->gnu-triplet
- (%current-target-system)) #\-)
- ((arch vendor os ..1)
- (string-join `(,arch ,@os) "-"))))))
- #~(list "CROSS_COMPILE=or1k-elf-"
- "V=1"
- #$@(if triplet-without-vendor
- ;; We are cross-compiling the tools, intended to be
- ;; executable for the target system.
- (list (string-append "HOSTAR=" triplet-without-vendor
- "-ar")
- (string-append "HOSTCC=" triplet-without-vendor
- "-gcc"))
- ;; Not cross-compiling.
- (list "HOSTAR=ar"
- "HOSTCC=gcc"))
- "LEX=flex"))
- #:phases
- #~(modify-phases %standard-phases
- (add-after 'unpack 'do-not-build-tests
- (lambda _
- ;; Attempting to build the tools test binary on a non-aarch64
- ;; architecture fails with: "No cache cleaning implementation
- ;; available for this architecture". Avoid building it (see:
- ;; https://github.com/crust-firmware/crust/issues/182).
- (substitute* "tools/Makefile"
- (("tools-y \\+= test") ""))))
- (delete 'configure)
- (add-before 'build 'defconfig
- (lambda* (#:key make-flags #:allow-other-keys)
- (let ((config-name (string-append #$platform "_defconfig")))
- (apply invoke "make" (cons config-name make-flags)))))
- (replace 'install
- (lambda _
- (for-each (lambda (file)
- (install-file file (string-append #$output
- "/libexec")))
- (find-files "." "(scp\\.bin|\\.config)$"))
- (install-file "build/tools/load"
- (string-append #$output "/bin")))))))
- ;; The firmware is cross-compiled using a "bare bones" compiler (no libc).
- ;; Use our own tool chain for that.
- (native-inputs
- (list bison
- (cross-gcc "or1k-elf")
- (cross-binutils "or1k-elf")
- flex))
- (home-page "https://github.com/crust-firmware/crust")
- (synopsis "Firmware for Allwinner sunxi SoCs")
- (description "Crust improves battery life and thermal performance by
+(define make-crust-package
+ (mlambda (platform)
+ (package
+ (name (string-append "crust-"
+ (string-replace-substring platform "_" "-")))
+ (version "0.5")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ ;; There are only GitHub generated release snapshots.
+ (url "https://github.com/crust-firmware/crust")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name "crust" version))
+ (sha256
+ (base32
+ "0xgbbhifg3miwd3yp6jq9kp7nqgz5gzy00w95vba45j8jk5vjvvz"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:tests? #f ;no test suite
+ #:make-flags
+ (let ((triplet-without-vendor
+ (and (%current-target-system)
+ ;; TODO: Is there a use case for allowing this?
+ (not (target-avr?))
+ (match (string-split (nix-system->gnu-triplet
+ (%current-target-system)) #\-)
+ ((arch vendor os ..1)
+ (string-join `(,arch ,@os) "-"))))))
+ #~(list "CROSS_COMPILE=or1k-elf-"
+ "V=1"
+ #$@(if triplet-without-vendor
+ ;; We are cross-compiling the tools, intended to be
+ ;; executable for the target system.
+ (list (string-append "HOSTAR=" triplet-without-vendor
+ "-ar")
+ (string-append "HOSTCC=" triplet-without-vendor
+ "-gcc"))
+ ;; Not cross-compiling.
+ (list "HOSTAR=ar"
+ "HOSTCC=gcc"))
+ "LEX=flex"))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'do-not-build-tests
+ (lambda _
+ ;; Attempting to build the tools test binary on a non-aarch64
+ ;; architecture fails with: "No cache cleaning implementation
+ ;; available for this architecture". Avoid building it (see:
+ ;; https://github.com/crust-firmware/crust/issues/182).
+ (substitute* "tools/Makefile"
+ (("tools-y \\+= test") ""))))
+ (delete 'configure)
+ (add-before 'build 'defconfig
+ (lambda* (#:key make-flags #:allow-other-keys)
+ (let ((config-name (string-append #$platform "_defconfig")))
+ (apply invoke "make" (cons config-name make-flags)))))
+ (replace 'install
+ (lambda _
+ (for-each (lambda (file)
+ (install-file file (string-append #$output
+ "/libexec")))
+ (find-files "." "(scp\\.bin|\\.config)$"))
+ (install-file "build/tools/load"
+ (string-append #$output "/bin")))))))
+ ;; The firmware is cross-compiled using a "bare bones" compiler (no libc).
+ ;; Use our own tool chain for that.
+ (native-inputs
+ (list bison
+ (cross-gcc "or1k-elf")
+ (cross-binutils "or1k-elf")
+ flex))
+ (home-page "https://github.com/crust-firmware/crust")
+ (synopsis "Firmware for Allwinner sunxi SoCs")
+ (description "Crust improves battery life and thermal performance by
implementing a deep sleep state. During deep sleep, the CPU cores, the DRAM
controller, and most onboard peripherals are powered down, reducing power
consumption by 80% or more compared to an idle device. On boards without a
@@ -1280,8 +1281,8 @@ device. For this to work, Crust runs outside the main CPU and DRAM, on a
dedicated always-on microprocessor called a System Control Processor (SCP).
Crust is designed to run on a specific SCP implementation, Allwinner's
AR100.")
- ;; Most files are dual-licensed "BSD-3 OR GPL2", a few are GPL2 only.
- (license (list license:bsd-3 license:gpl2))))
+ ;; Most files are dual-licensed "BSD-3 OR GPL2", a few are GPL2 only.
+ (license (list license:bsd-3 license:gpl2)))))
(define-public crust-pinebook
(make-crust-package "pinebook"))