Subject: [bug#68355] [PATCH v2 5/9] gnu: make-crust-package: Memoize.

From: Jean-Pierre De Jesus DIAZ <[email-masked]>
Date: Fri, 19 Jan 2024 14:54:44 +0100

* gnu/packages/firmware.scm (make-crust-package): Use mlambda.

Change-Id: I2d916b96bc650f3731a69505e086cf8f8f470809
---
 gnu/packages/firmware.scm | 155 +++++++++++++++++++-------------------
 1 file 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 @@ (define-public arm-trusted-firmware-imx8mq
           ;; 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 @@ (define (make-crust-package platform)
 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"))
-- 
2.41.0