~ruther/guix-local

4114060cd0ca2188de525436ea56ecea22ab40a8 — Maxim Cournoyer 1 year, 9 months ago c3566fc
gnu: linux: Turn %default-extra-linux-options into a procedure.

This is to allow version-specific options to the list of defaults.

* gnu/packages/linux.scm (%default-extra-linux-options): Transform to...
(default-extra-linux-options): ... this procedure, which accepts a 'version'
argument.
(make-linux-libre, linux-libre-arm-generic, linux-libre-arm-generic-5.10)
(linux-libre-arm-generic-5.4, linux-libre-arm64-generic)
(linux-libre-arm64-generic-5.10, linux-libre-arm64-generic-5.4)
(linux-libre-riscv64-generic, linux-libre-mips64el-fuloong2e)
(linux-libre-with-bpf): Adjust accordingly.
* doc/guix-cookbook.texi (Customizing the Kernel): Adjust accordingly.

Change-Id: Ifd3be8b7ed8699bada224a938dbc84205366ff3d
2 files changed, 21 insertions(+), 20 deletions(-)

M doc/guix-cookbook.texi
M gnu/packages/linux.scm
M doc/guix-cookbook.texi => doc/guix-cookbook.texi +9 -8
@@ 1682,7 1682,7 @@ creates a package.
                            ;; See kernel-config for an example.
                            (configuration-file #f)
                            (defconfig "defconfig")
                            (extra-options %default-extra-linux-options))
                            (extra-options (default-extra-linux-options version)))
  ...)
@end lisp



@@ 1750,7 1750,7 @@ The second way to create a custom kernel is to pass a new value to the
it:

@lisp
(define %default-extra-linux-options
(define (default-extra-linux-options version)
  `(;; https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00039.html
   ("CONFIG_DEVPTS_MULTIPLE_INSTANCES" . #true)
   ;; Modules required for initrd:


@@ 1800,7 1800,7 @@ custom kernel:
          %file-systems
          %efi-support
          %emulation
          (@@@@ (gnu packages linux) %default-extra-linux-options)))
          ((@@@@ (gnu packages linux) default-extra-linux-options) version)))

(define-public linux-libre-macbook41
  ;; XXX: Access the internal 'make-linux-libre*' procedure, which is


@@ 1814,11 1814,12 @@ custom kernel:
   #:extra-options %macbook41-config-options))
@end lisp

In the above example @code{%file-systems} is a collection of flags enabling
different file system support, @code{%efi-support} enables EFI support and
@code{%emulation} enables a x86_64-linux machine to act in 32-bit mode also.
@code{%default-extra-linux-options} are the ones quoted above, which had to be
added in since they were replaced in the @code{extra-options} keyword.
In the above example @code{%file-systems} is a collection of flags
enabling different file system support, @code{%efi-support} enables EFI
support and @code{%emulation} enables a x86_64-linux machine to act in
32-bit mode also.  The @code{default-extra-linux-options} procedure is
the one defined above, which had to be used to avoid loosing the default
configuration options of the @code{extra-options} keyword.

This all sounds like it should be doable, but how does one even know which
modules are required for a particular system?  Two places that can be helpful

M gnu/packages/linux.scm => gnu/packages/linux.scm +12 -12
@@ 852,7 852,7 @@ ARCH and optionally VARIANT, or #f if there is no such configuration."
         (config (search-auxiliary-file file)))
    (and config (local-file config))))

(define %default-extra-linux-options
(define (default-extra-linux-options version)
  `(;; Make the kernel config available at /proc/config.gz
    ("CONFIG_IKCONFIG" . #t)
    ("CONFIG_IKCONFIG_PROC" . #t)


@@ 965,7 965,7 @@ ARCH and optionally VARIANT, or #f if there is no such configuration."
                           ;; for an example.
                           (configuration-file #f)
                           (defconfig "defconfig")
                           (extra-options %default-extra-linux-options)
                           (extra-options (default-extra-linux-options version))
                           (patches
                            `(,%boot-logo-patch
                              ,@(if (apply-infodoc-patch? version)


@@ 991,7 991,7 @@ ARCH and optionally VARIANT, or #f if there is no such configuration."
                            ;; See kernel-config for an example.
                            (configuration-file #f)
                            (defconfig "defconfig")
                            (extra-options %default-extra-linux-options))
                            (extra-options (default-extra-linux-options version)))
  (package
    (name (if extra-version
              (string-append "linux-libre-" extra-version)


@@ 1243,7 1243,7 @@ Linux kernel.  It has been modified to remove all non-free binary blobs.")
                     (append
                      `(;; needed to fix the RTC on rockchip platforms
                        ("CONFIG_RTC_DRV_RK808" . #t))
                      %default-extra-linux-options)))
                      (default-extra-linux-options linux-libre-version))))

(define-public linux-libre-arm-generic-5.10
  (make-linux-libre* linux-libre-5.10-version


@@ 1256,7 1256,7 @@ Linux kernel.  It has been modified to remove all non-free binary blobs.")
                     (append
                      `(;; needed to fix the RTC on rockchip platforms
                        ("CONFIG_RTC_DRV_RK808" . #t))
                      %default-extra-linux-options)))
                      (default-extra-linux-options linux-libre-5.10-version))))

(define-public linux-libre-arm-generic-5.4
  (make-linux-libre* linux-libre-5.4-version


@@ 1269,7 1269,7 @@ Linux kernel.  It has been modified to remove all non-free binary blobs.")
                     (append
                      `(;; needed to fix the RTC on rockchip platforms
                        ("CONFIG_RTC_DRV_RK808" . #t))
                      %default-extra-linux-options)))
                      (default-extra-linux-options linux-libre-5.4-version))))

(define-public linux-libre-arm-generic-4.19
  (make-linux-libre* linux-libre-4.19-version


@@ 1321,7 1321,7 @@ Linux kernel.  It has been modified to remove all non-free binary blobs.")
                        ("CONFIG_BATTERY_CW2015" . m)
                        ("CONFIG_CHARGER_GPIO" . m)
                        ("CONFIG_SND_SOC_ES8316" . m))
                      %default-extra-linux-options)))
                      (default-extra-linux-options linux-libre-version))))

(define-public linux-libre-arm64-generic-5.10
  (make-linux-libre* linux-libre-5.10-version


@@ 1347,7 1347,7 @@ Linux kernel.  It has been modified to remove all non-free binary blobs.")
                        ("CONFIG_BATTERY_CW2015" . m)
                        ("CONFIG_CHARGER_GPIO" . m)
                        ("CONFIG_SND_SOC_ES8316" . m))
                      %default-extra-linux-options)))
                      (default-extra-linux-options linux-libre-5.10-version))))

(define-public linux-libre-arm64-generic-5.4
  (make-linux-libre* linux-libre-5.4-version


@@ 1360,7 1360,7 @@ Linux kernel.  It has been modified to remove all non-free binary blobs.")
                     (append
                      `(;; needed to fix the RTC on rockchip platforms
                        ("CONFIG_RTC_DRV_RK808" . #t))
                      %default-extra-linux-options)))
                      (default-extra-linux-options linux-libre-5.4-version))))

(define-public linux-libre-riscv64-generic
  (make-linux-libre* linux-libre-version


@@ 1384,7 1384,7 @@ Linux kernel.  It has been modified to remove all non-free binary blobs.")
                        ("CONFIG_HW_RANDOM_VIRTIO" . m)
                        ("CONFIG_VIRTIO_CONSOLE" . m)
                        ("CONFIG_CRYPTO_XTS" . m))
                      %default-extra-linux-options)))
                      (default-extra-linux-options linux-libre-version))))

(define-public linux-libre-mips64el-fuloong2e
  (make-linux-libre* linux-libre-version


@@ 1396,7 1396,7 @@ Linux kernel.  It has been modified to remove all non-free binary blobs.")
                     #:extra-options
                     (append
                      `(("CONFIG_OVERLAY_FS" . m))
                      %default-extra-linux-options)))
                      (default-extra-linux-options linux-libre-version))))

(define-public linux-libre-with-bpf
  (let ((base-linux-libre


@@ 1410,7 1410,7 @@ Linux kernel.  It has been modified to remove all non-free binary blobs.")
          #:configuration-file kernel-config
          #:extra-options
          (append %bpf-extra-linux-options
                  %default-extra-linux-options))))
                  (default-extra-linux-options linux-libre-6.8-version)))))
    (package
      (inherit base-linux-libre)
      (inputs (modify-inputs (package-inputs base-linux-libre)