gnu: make-crust-package: Memoize.

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

Change-Id: I2d916b96bc650f3731a69505e086cf8f8f470809
This commit is contained in:
Jean-Pierre De Jesus DIAZ 2024-01-19 14:54:44 +01:00 committed by Mathieu Othacehe
parent ae7da5cbf0
commit e5a00639aa
No known key found for this signature in database
GPG key ID: 8354763531769CA6

View file

@ -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"))