mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
gnu: Add crust-pinebook and crust-pine64-plus.
* gnu/packages/bootstrap.scm (glibc-dynamic-linker): Add or1k-elf. gnu/packages/firmware.scm (make-crust-package, crust-pinebook) (crust-pine64-plus): New variables. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Reviewed-by: Maxime Devos <maximedevos@telenet.be> Co-authored-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
This commit is contained in:
parent
d39544dd9b
commit
4f32e8d7cc
2 changed files with 93 additions and 0 deletions
|
@ -328,6 +328,7 @@ (define* (glibc-dynamic-linker
|
|||
((string=? system "arm-eabi") "no-ld.so")
|
||||
((string=? system "avr") "no-ld.so")
|
||||
((string=? system "i686-mingw") "no-ld.so")
|
||||
((string=? system "or1k-elf") "no-ld.so")
|
||||
((string=? system "x86_64-mingw") "no-ld.so")
|
||||
((string-suffix? "-elf" system) "no-ld.so")
|
||||
|
||||
|
|
|
@ -1109,3 +1109,95 @@ (define-public arm-trusted-firmware-imx8mq
|
|||
((#:make-flags flags ''())
|
||||
;; 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)
|
||||
(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")))
|
||||
(pk 'MAKE-FLAGS: make-flags)
|
||||
; (error 's)
|
||||
(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 "System control processor firmware for Allwinner sunxi boards")
|
||||
(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
|
||||
PMIC, Crust is also responsible for orderly power-off and power-on of the
|
||||
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))))
|
||||
|
||||
(define-public crust-pinebook
|
||||
(make-crust-package "pinebook"))
|
||||
|
||||
(define-public crust-pine64-plus
|
||||
(make-crust-package "pine64_plus"))
|
||||
|
|
Loading…
Reference in a new issue