guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/04: gnu: Add crust-pinebook and crust-pine64-plus.


From: guix-commits
Subject: 02/04: gnu: Add crust-pinebook and crust-pine64-plus.
Date: Fri, 7 Jul 2023 16:05:04 -0400 (EDT)

apteryx pushed a commit to branch master
in repository guix.

commit 4f32e8d7cc35fa76933a5fc69e584dbc7033e9fc
Author: Vagrant Cascadian <vagrant@debian.org>
AuthorDate: Tue May 11 20:57:50 2021 +0000

    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>
---
 gnu/packages/bootstrap.scm |  1 +
 gnu/packages/firmware.scm  | 92 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+)

diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index 5f6a3acc83..602d8f26c5 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -328,6 +328,7 @@ or false to signal an error."
      ((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")
 
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index c3e877cfbf..c3ffcb1d0a 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -1109,3 +1109,95 @@ such as:
          ((#: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"))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]