diff options
Diffstat (limited to 'gnu/packages')
-rw-r--r-- | gnu/packages/firmware.scm | 155 |
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")) |