all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
To: 60224@debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Subject: [bug#60224] [PATCH 1/9] gnu: make-u-boot-package: Add a u-boot argument and use gexps.
Date: Tue, 20 Dec 2022 13:34:19 -0500	[thread overview]
Message-ID: <20221220183427.31752-2-maxim.cournoyer@gmail.com> (raw)
In-Reply-To: <20221220165038.25114-1-maxim.cournoyer@gmail.com>

And have that u-boot argument used as the complete base of the template, so
that a user can override it.

* gnu/packages/bootloaders.scm (make-u-boot-package): New U-BOOT argument.
Document it.
[native-inputs]: Move the native-inputs of U-BOOT first, so that the
cross compilation tools can be overridden via U-BOOT.
[arguments]: Rewrite using substitute-keyword-arguments, extending rather than
overriding most arguments.  Use gexps.

---

 gnu/packages/bootloaders.scm | 182 +++++++++++++++++++----------------
 1 file changed, 98 insertions(+), 84 deletions(-)

diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index b968ecd441..42f859c362 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;; Copyright © 2021 Stefan <stefan-guix@vodafonemail.de>
+;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -782,11 +783,13 @@ (define*-public (make-u-boot-package board triplet
                                      defconfig
                                      configs
                                      name-suffix
-                                     append-description)
+                                     append-description
+                                     (u-boot u-boot))
   "Return a U-Boot package for BOARD cross-compiled for TRIPLET with the
 optional DEFCONFIG file and optional configuration changes from CONFIGS.
 NAME-SUFFIX is appended to the package name, while APPEND-DESCRIPTION is
-appended to the package description."
+appended to the package description.  U-BOOT can be used when a fork or a
+different version of U-Boot must be used."
   (let ((same-arch? (lambda ()
                       (string=? (%current-system)
                                 (gnu-triplet->nix-system triplet)))))
@@ -801,91 +804,102 @@ (define*-public (make-u-boot-package board triplet
                                       "\n\n" append-description)
                        (package-description u-boot)))
       (native-inputs
-       `(,@(if (not (same-arch?))
+       ;; Note: leave the native u-boot inputs first, so that a user can
+       ;; override the cross-gcc and cross-binutils packages.
+       `(,@(package-native-inputs u-boot)
+         ,@(if (not (same-arch?))
                `(("cross-gcc" ,(cross-gcc triplet))
                  ("cross-binutils" ,(cross-binutils triplet)))
-               `())
-         ,@(package-native-inputs u-boot)))
+               `())))
       (arguments
-       `(#:modules ((ice-9 ftw)
-                    (srfi srfi-1)
-                    (guix build gnu-build-system)
-                    (guix build kconfig)
-                    (guix build utils))
-         #:imported-modules (,@%gnu-build-system-modules
-                             (guix build kconfig))
-         #:test-target "test"
-         #:make-flags
-         (list "HOSTCC=gcc"
-               "KBUILD_VERBOSE=1"
-               ,@(if (not (same-arch?))
-                     `((string-append "CROSS_COMPILE=" ,triplet "-"))
-                     '()))
-         #:phases
-         (modify-phases %standard-phases
-           (replace 'configure
-             (lambda* (#:key outputs make-flags #:allow-other-keys)
-               (let* ((config-name (string-append ,board "_defconfig"))
-                      (config-file (string-append "configs/" config-name))
-                      (defconfig ,defconfig)
-                      (configs ',configs))
-                 (when defconfig
-                   ;; Replace the board-specific defconfig with the given one.
-                   (copy-file defconfig config-file))
-                 (if (file-exists? config-file)
-                     (begin
-                       (when configs
-                         (modify-defconfig config-file configs))
-                       (apply invoke "make" `(,@make-flags ,config-name))
-                       (verify-config ".config" config-file))
-                     (begin
-                       (display "invalid board name; valid board names are:"
-                                (current-error-port))
-                       (let ((suffix-len (string-length "_defconfig"))
-                             (entries (scandir "configs")))
-                         (for-each (lambda (file-name)
-                                     (when (string-suffix? "_defconfig" file-name)
-                                       (format (current-error-port)
-                                               "- ~A\n"
-                                               (string-drop-right file-name
-                                                                  suffix-len))))
-                                   (sort entries string-ci<)))
-                       (error "invalid boardname ~s" ,board))))))
-           (add-after 'configure 'disable-tools-libcrypto
-             ;; Disable libcrypto due to GPL and OpenSSL license
-             ;; incompatibilities
-             (lambda _
-               (substitute* ".config"
-                 (("CONFIG_TOOLS_LIBCRYPTO=.*$") "CONFIG_TOOLS_LIBCRYPTO=n"))))
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (libexec (string-append out "/libexec"))
-                      (uboot-files (append
-                                    (remove
-                                     ;; Those would not be reproducible
-                                     ;; because of the randomness used
-                                     ;; to produce them.
-                                     ;; It's expected that the user will
-                                     ;; use u-boot-tools to generate them
-                                     ;; instead.
-                                     (lambda (name)
-                                       (string-suffix?
-                                        "sunxi-spl-with-ecc.bin"
-                                        name))
-                                     (find-files "." ".*\\.(bin|efi|img|spl|itb|dtb|rksd)$"))
-                                    (find-files "." "^(MLO|SPL)$"))))
-                 (mkdir-p libexec)
-                 (install-file ".config" libexec)
-                 ;; Useful for "qemu -kernel".
-                 (install-file "u-boot" libexec)
-                 (for-each
-                  (lambda (file)
-                    (let ((target-file (string-append libexec "/" file)))
-                      (mkdir-p (dirname target-file))
-                      (copy-file file target-file)))
-                  uboot-files)
-                 #t)))))))))
+       (substitute-keyword-arguments (package-arguments u-boot)
+         ((#:modules modules '())
+          `((ice-9 ftw)
+            (srfi srfi-1)
+            (guix build gnu-build-system)
+            (guix build kconfig)
+            (guix build utils)
+            ,@modules))
+         ((#:imported-modules imported-modules '())
+          `((guix build kconfig)
+            ,@%gnu-build-system-modules
+            ,@imported-modules))
+         ((#:test-target _ "test")
+          "test")
+         ((#:make-flags make-flags '())
+          #~(list "HOSTCC=gcc"
+                  "KBUILD_VERBOSE=1"
+                  #$@(if (not (same-arch?))
+                         (list (string-append "CROSS_COMPILE=" triplet "-"))
+                         '())
+                  #$@make-flags))
+         ((#:phases phases '%standard-phases)
+          #~(modify-phases #$phases
+              (replace 'configure
+                (lambda* (#:key outputs make-flags #:allow-other-keys)
+                  (let* ((config-name (string-append #$board "_defconfig"))
+                         (config-file (string-append "configs/" config-name))
+                         (defconfig #$defconfig)
+                         (configs '#$configs))
+                    (when defconfig
+                      ;; Replace the board-specific defconfig with the given
+                      ;; one.
+                      (copy-file defconfig config-file))
+                    (if (file-exists? config-file)
+                        (begin
+                          (when configs
+                            (modify-defconfig config-file configs))
+                          (apply invoke "make" `(,@make-flags ,config-name))
+                          (verify-config ".config" config-file))
+                        (begin
+                          (display "invalid board name; valid board names are:"
+                                   (current-error-port))
+                          (let ((suffix-len (string-length "_defconfig"))
+                                (entries (scandir "configs")))
+                            (for-each (lambda (file-name)
+                                        (when (string-suffix? "_defconfig"
+                                                              file-name)
+                                          (format (current-error-port)
+                                                  "- ~A\n"
+                                                  (string-drop-right
+                                                   file-name suffix-len))))
+                                      (sort entries string-ci<)))
+                          (error "invalid boardname ~s" #$board))))))
+              (add-after 'configure 'disable-tools-libcrypto
+                ;; Disable libcrypto due to GPL and OpenSSL license
+                ;; incompatibilities
+                (lambda _
+                  (substitute* ".config"
+                    (("CONFIG_TOOLS_LIBCRYPTO=.*$")
+                     "CONFIG_TOOLS_LIBCRYPTO=n"))))
+              (replace 'install
+                (lambda* (#:key outputs #:allow-other-keys)
+                  (let ((libexec (string-append #$output "/libexec"))
+                        (uboot-files
+                         (append
+                          (remove
+                           ;; Those would not be reproducible
+                           ;; because of the randomness used to
+                           ;; produce them.  It's expected that the
+                           ;; user will use u-boot-tools to generate
+                           ;; them instead.
+                           (lambda (name)
+                             (string-suffix?
+                              "sunxi-spl-with-ecc.bin"
+                              name))
+                           (find-files "."
+                                       ".*\\.(bin|efi|img|spl|itb|dtb|rksd)$"))
+                          (find-files "." "^(MLO|SPL)$"))))
+                    (mkdir-p libexec)
+                    (install-file ".config" libexec)
+                    ;; Useful for "qemu -kernel".
+                    (install-file "u-boot" libexec)
+                    (for-each
+                     (lambda (file)
+                       (let ((target-file (string-append libexec "/" file)))
+                         (mkdir-p (dirname target-file))
+                         (copy-file file target-file)))
+                     uboot-files)))))))))))
 
 (define-public u-boot-malta
   (make-u-boot-package "malta" "mips64el-linux-gnuabi64"))
-- 
2.38.1





  reply	other threads:[~2022-12-20 18:36 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-20 16:50 [bug#60224] [PATCH 0/9] Improvements to our u-boot tooling Maxim Cournoyer
2022-12-20 18:34 ` Maxim Cournoyer [this message]
2022-12-20 18:34   ` [bug#60224] [PATCH 2/9] gnu: make-u-boot-package: Install .imx files Maxim Cournoyer
2022-12-20 18:34   ` [bug#60224] [PATCH 3/9] gnu: make-uboot-package: Simplify build Maxim Cournoyer
2022-12-20 18:34   ` [bug#60224] [PATCH 4/9] gnu: u-boot-pinebook-pro-rk3399: Remove input labels and use gexps Maxim Cournoyer
2022-12-20 18:34   ` [bug#60224] [PATCH 5/9] gnu: u-boot-firefly-rk3399: Use gexps and fix cross-build Maxim Cournoyer
2022-12-20 18:34   ` [bug#60224] [PATCH 6/9] gnu: make-u-boot-sunxi64-package: Use gexps and adjust file name Maxim Cournoyer
2022-12-20 18:34   ` [bug#60224] [PATCH 7/9] gnu: u-boot-rock64-rk3328: Fix build Maxim Cournoyer
2022-12-20 18:34   ` [bug#60224] [PATCH 8/9] gnu: u-boot-sifive-unmatched: Use gexps and remove inputs Maxim Cournoyer
2022-12-20 18:34   ` [bug#60224] [PATCH 9/9] gnu: u-boot-puma-rk3399: Use make-u-boot-sunxi64-package Maxim Cournoyer
2022-12-29 19:18 ` [bug#60224] [PATCH 0/9] Improvements to our u-boot tooling Ricardo Wurmus
2023-01-02  0:27   ` Maxim Cournoyer
2023-01-02  0:46 ` [bug#60224] [PATCH v3 01/11] gnu: make-u-boot-package: Add a u-boot argument and use gexps Maxim Cournoyer
2023-01-02  0:46   ` [bug#60224] [PATCH v3 02/11] gnu: make-u-boot-package: Install .imx files Maxim Cournoyer
2023-01-02  0:46   ` [bug#60224] [PATCH v3 03/11] gnu: make-uboot-package: Simplify build Maxim Cournoyer
2023-01-02  0:46   ` [bug#60224] [PATCH v3 04/11] gnu: make-u-boot-package: Allow disabling cross-compilation Maxim Cournoyer
2023-01-02  0:46   ` [bug#60224] [PATCH v3 05/11] gnu: u-boot-pinebook-pro-rk3399: Remove input labels and use gexps Maxim Cournoyer
2023-01-02  0:46   ` [bug#60224] [PATCH v3 06/11] gnu: u-boot-firefly-rk3399: Use gexps and fix cross-build Maxim Cournoyer
2023-01-02  0:46   ` [bug#60224] [PATCH v3 07/11] gnu: make-u-boot-sunxi64-package: Use gexps and adjust file name Maxim Cournoyer
2023-01-06 17:17     ` Vagrant Cascadian
2023-01-11 19:55       ` Maxim Cournoyer
2023-01-02  0:46   ` [bug#60224] [PATCH v3 08/11] gnu: u-boot-rock64-rk3328: Fix build Maxim Cournoyer
2023-01-02  0:46   ` [bug#60224] [PATCH v3 09/11] gnu: u-boot-sifive-unmatched: Use gexps and remove inputs Maxim Cournoyer
2023-01-02  0:46   ` [bug#60224] [PATCH v3 10/11] gnu: u-boot-puma-rk3399: Use make-u-boot-sunxi64-package Maxim Cournoyer
2023-01-06 17:09     ` Vagrant Cascadian
2023-01-02  0:46   ` [bug#60224] [PATCH v3 11/11] gnu: u-boot-rockpro64-rk3399: Fix build Maxim Cournoyer
2023-01-11 20:44 ` [bug#60224] [PATCH v4 01/12] gnu: make-u-boot-package: Add a u-boot argument and use gexps Maxim Cournoyer
2023-01-11 20:44   ` [bug#60224] [PATCH v4 02/12] gnu: make-u-boot-package: Install .imx files Maxim Cournoyer
2023-01-11 20:44   ` [bug#60224] [PATCH v4 03/12] gnu: make-uboot-package: Simplify build Maxim Cournoyer
2023-01-11 20:44   ` [bug#60224] [PATCH v4 04/12] gnu: make-u-boot-package: Allow disabling cross-compilation Maxim Cournoyer
2023-01-11 20:44   ` [bug#60224] [PATCH v4 05/12] gnu: u-boot-pinebook-pro-rk3399: Remove input labels and use gexps Maxim Cournoyer
2023-01-11 20:44   ` [bug#60224] [PATCH v4 06/12] gnu: u-boot-firefly-rk3399: Use gexps and fix cross-build Maxim Cournoyer
2023-01-11 20:44   ` [bug#60224] [PATCH v4 07/12] gnu: make-u-boot-sunxi64-package: Use gexps and adjust file name Maxim Cournoyer
2023-01-12 22:12     ` Vagrant Cascadian
2023-01-11 20:44   ` [bug#60224] [PATCH v4 08/12] gnu: u-boot-rock64-rk3328: Fix build Maxim Cournoyer
2023-01-11 20:44   ` [bug#60224] [PATCH v4 09/12] gnu: u-boot-sifive-unmatched: Use gexps and remove inputs Maxim Cournoyer
2023-01-11 20:44   ` [bug#60224] [PATCH v4 10/12] gnu: u-boot-rockpro64-rk3399: Fix build Maxim Cournoyer
2023-01-11 20:44   ` [bug#60224] [PATCH v4 11/12] gnu: make-arm-trusted-firmware: Simplify build Maxim Cournoyer
2023-01-11 20:44   ` [bug#60224] [PATCH v4 12/12] gnu: u-boot-puma-rk3399: Fix build Maxim Cournoyer
2023-01-16  3:25 ` [bug#60224] [PATCH v5 01/13] gnu: make-u-boot-package: Add a u-boot argument and use gexps Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 02/13] gnu: make-u-boot-package: Install .imx files Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 03/13] gnu: u-boot: Reduce the number of native inputs Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 04/13] gnu: make-uboot-package: Simplify build Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 05/13] gnu: make-u-boot-package: Allow disabling cross-compilation Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 06/13] gnu: u-boot-pinebook-pro-rk3399: Remove input labels and use gexps Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 07/13] gnu: u-boot-firefly-rk3399: Use gexps and fix build Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 08/13] gnu: make-u-boot-sunxi64-package: " Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 09/13] gnu: u-boot-rock64-rk3328: " Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 10/13] gnu: u-boot-sifive-unmatched: Use gexps and remove inputs labels Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 11/13] gnu: u-boot-rockpro64-rk3399: Use gexps and fix build Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 12/13] gnu: make-arm-trusted-firmware: Simplify build Maxim Cournoyer
2023-01-16  3:25   ` [bug#60224] [PATCH v5 13/13] gnu: u-boot-puma-rk3399: Use gexps and fix build Maxim Cournoyer
2023-01-19  2:10   ` bug#60224: [PATCH 0/9] Improvements to our u-boot tooling Maxim Cournoyer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221220183427.31752-2-maxim.cournoyer@gmail.com \
    --to=maxim.cournoyer@gmail.com \
    --cc=60224@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.