;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2016, 2017, 2018 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2016, 2017 Danny Milosavljevic <dannym@scratchpost.org>
;;; Copyright © 2016, 2017 David Craven <david@craven.ch>
-;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2019 nee <nee@cock.li>
;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
+;;; Copyright © 2018, 2019, 2020 Vagrant Cascadian <vagrant@debian.org>
+;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
;;;
;;; This file is part of GNU Guix.
;;;
(sha256
(base32
"0zgp5m3hmc9jh8wpjx6czzkh5id2y8n1k823x2mjvm2sk6b28ag5"))
- (patches (search-patches "grub-efi-fat-serial-number.patch"))))
+ (patches (search-patches
+ "grub-efi-fat-serial-number.patch"
+ "grub-setup-root.patch"
+ "grub-verifiers-Blocklist-fallout-cleanup.patch"
+ "grub-cross-system-i686.patch"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
;; determine the root file system when it's a RAID
;; device. Failing to do that, 'grub-probe' silently
;; fails if 'mdadm' is not in $PATH.
- (substitute* "grub-core/osdep/linux/getroot.c"
- (("argv\\[0\\] = \"mdadm\"")
- (string-append "argv[0] = \""
- (assoc-ref inputs "mdadm")
- "/sbin/mdadm\"")))
+ (when (assoc-ref inputs "mdadm")
+ (substitute* "grub-core/osdep/linux/getroot.c"
+ (("argv\\[0\\] = \"mdadm\"")
+ (string-append "argv[0] = \""
+ (assoc-ref inputs "mdadm")
+ "/sbin/mdadm\""))))
;; Make the font visible.
(copy-file (assoc-ref (or native-inputs inputs)
(string-append (assoc-ref inputs "console-setup")
"/bin/ckbcomp ")))
#t))
+ (add-after 'unpack 'set-freetype-variables
+ ;; These variables need to be set to the native versions
+ ;; of the dependencies because they are used to build
+ ;; programs which are executed during build time.
+ (lambda* (#:key native-inputs #:allow-other-keys)
+ (when (assoc-ref native-inputs "freetype")
+ (let ((freetype (assoc-ref native-inputs "freetype")))
+ (setenv "BUILD_FREETYPE_LIBS"
+ (string-append "-L" freetype
+ "/lib -lfreetype"))
+ (setenv "BUILD_FREETYPE_CFLAGS"
+ (string-append "-I" freetype
+ "/include/freetype2"))))
+ #t))
(add-before 'check 'disable-flaky-test
(lambda _
;; This test is unreliable. For more information, see:
(("test_unset grub_func_test")
"test_unset"))
#t)))
- ;; Disable tests on ARM and AARCH64 platforms.
- #:tests? ,(not (any (cute string-prefix? <> (or (%current-target-system)
- (%current-system)))
- '("arm" "aarch64")))))
+ ;; Disable tests on ARM and AARCH64 platforms or when cross-compiling.
+ #:tests? ,(not (or (any (cute string-prefix? <> (or (%current-target-system)
+ (%current-system)))
+ '("arm" "aarch64"))
+ (%current-target-system)))))
(inputs
`(("gettext" ,gettext-minimal)
;; Depend on LVM2 for libdevmapper, used by 'grub-probe' and
;; 'grub-install' to recognize mapped devices (LUKS, etc.)
- ("lvm2" ,lvm2)
+ ,@(if (member (or (%current-target-system)
+ (%current-system))
+ (package-supported-systems lvm2))
+ `(("lvm2" ,lvm2))
+ '())
;; Depend on mdadm, which is invoked by 'grub-probe' and 'grub-install'
;; to determine whether the root file system is RAID.
- ("mdadm" ,mdadm)
+ ,@(if (member (or (%current-target-system)
+ (%current-system))
+ (package-supported-systems mdadm))
+ `(("mdadm" ,mdadm))
+ '())
;; Console-setup's ckbcomp is invoked by grub-kbdcomp. It is required
;; for generating alternative keyboard layouts.
;; Needed for ‘grub-mount’, the only reliable way to tell whether a given
;; file system will be readable by GRUB without rebooting.
- ("fuse" ,fuse)
+ ,@(if (member (or (%current-target-system)
+ (%current-system))
+ (package-supported-systems fuse))
+ `(("fuse" ,fuse))
+ '())
("freetype" ,freetype)
;; ("libusb" ,libusb)
`(("pkg-config" ,pkg-config)
("unifont" ,unifont)
("bison" ,bison)
- ;; Due to a bug in flex >= 2.6.2, GRUB must be built with an older flex:
- ;; <http://lists.gnu.org/archive/html/grub-devel/2017-02/msg00133.html>
- ;; TODO Try building with flex > 2.6.4.
- ("flex" ,flex-2.6.1)
+ ("flex" ,flex)
("texinfo" ,texinfo)
("help2man" ,help2man)
+ ("freetype" ,freetype) ; native version needed for build-grub-mkfont
;; XXX: When building GRUB 2.02 on 32-bit x86, we need a binutils
;; capable of assembling 64-bit instructions. However, our default
;; Dependencies for the test suite. The "real" QEMU is needed here,
;; because several targets are used.
("parted" ,parted)
- ("qemu" ,qemu-minimal-2.10)
+ ,@(if (member (%current-system) (package-supported-systems qemu-minimal))
+ `(("qemu" ,qemu-minimal))
+ '())
("xorriso" ,xorriso)))
(home-page "https://www.gnu.org/software/grub/")
(synopsis "GRand Unified Boot loader")
(license license:gpl3+)
(properties '((cpe-name . "grub2")))))
+(define-public grub-minimal
+ (package
+ (inherit grub)
+ (name "grub-minimal")
+ (inputs
+ (fold alist-delete (package-inputs grub)
+ '("lvm2" "mdadm" "fuse" "console-setup")))
+ (native-inputs
+ (fold alist-delete (package-native-inputs grub)
+ '("help2man" "texinfo" "parted" "qemu" "xorriso")))
+ (arguments
+ (substitute-keyword-arguments (package-arguments grub)
+ ((#:configure-flags _ ''())
+ '(list "PYTHON=true"))
+ ((#:tests? _ #t)
+ #f)
+ ((#:phases phases '%standard-phases)
+ `(modify-phases ,phases
+ (replace 'patch-stuff
+ (lambda* (#:key native-inputs inputs #:allow-other-keys)
+ (substitute* "grub-core/Makefile.in"
+ (("/bin/sh") (which "sh")))
+
+ ;; Make the font visible.
+ (copy-file (assoc-ref (or native-inputs inputs)
+ "unifont")
+ "unifont.bdf.gz")
+ (system* "gunzip" "unifont.bdf.gz")
+
+ #t))))))))
+
(define-public grub-efi
(package
(inherit grub)
("perl" ,perl)
("python-2" ,python-2)))
(inputs
- `(("libuuid" ,util-linux)
+ `(("libuuid" ,util-linux "lib")
("mtools" ,mtools)))
(arguments
`(#:parallel-build? #f
`(("python" ,python)))
(arguments
`(#:make-flags
- (list "CC=gcc"
+ (list (string-append "CC=" ,(cc-for-target))
;; /bin/fdt{get,overlay,put} need help finding libfdt.so.1.
(string-append "LDFLAGS=-Wl,-rpath="
"INSTALL=install")
#:phases
(modify-phases %standard-phases
+ (add-after 'unpack 'patch-pkg-config
+ (lambda _
+ (substitute* '("Makefile"
+ "tests/run_tests.sh")
+ (("pkg-config")
+ (or (which "pkg-config")
+ (string-append ,(%current-target-system)
+ "-pkg-config"))))
+ #t))
(delete 'configure)))) ; no configure script
(home-page "https://www.devicetree.org")
(synopsis "Compiles device tree source files")
(define u-boot
(package
(name "u-boot")
- (version "2020.01")
+ (version "2020.10")
(source (origin
(method url-fetch)
(uri (string-append
"u-boot-" version ".tar.bz2"))
(sha256
(base32
- "1w9ml4jl15q6ixpdqzspxjnl7d3rgxd7f99ms1xv5c8869h3qida"))))
+ "08m6f1bh4pdcqbxf983qdb66ccd5vak5cbzc114yf3jwq2yinj0d"))))
(native-inputs
`(("bc" ,bc)
("bison" ,bison)
("python" ,python)
("python-coverage" ,python-coverage)
("python-pytest" ,python-pytest)
- ("sdl" ,sdl)
("swig" ,swig)))
(build-system gnu-build-system)
(home-page "https://www.denx.de/wiki/U-Boot/")
(package
(inherit u-boot)
(name "u-boot-tools")
+ (native-inputs
+ `(("sdl2" ,sdl2)
+ ,@(package-native-inputs u-boot)))
(arguments
`(#:make-flags '("HOSTCC=gcc")
- #:test-target "tests"
+ #:test-target "tcheck"
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'patch
(substitute* "tools/dtoc/fdt_util.py"
(("'cc'") "'gcc'"))
(substitute* "tools/patman/test_util.py"
- ;; python*-coverage is simply called coverage in guix.
- (("%s-coverage") "coverage")
- ;; XXX Allow for only 99% test coverage.
- ;; TODO: Find out why that is needed.
- (("if coverage != '100%':") "if not int(coverage.rstrip('%')) >= 99:"))
+ ;; python3-coverage is simply called coverage in guix.
+ (("python3-coverage") "coverage"))
(substitute* "test/run"
;; Make it easier to find test failures.
(("#!/bin/bash") "#!/bin/bash -x")
(("run_test \"binman\"") ": run_test \"binman\"")
;; FIXME: code coverage not working
(("run_test \"binman code coverage\"") ": run_test \"binman code coverage\"")
- (("run_test \"dtoc code coverage\"") ": run_test \"dtoc code coverage\"")
- (("run_test \"fdt code coverage\"") ": run_test \"fdt code coverage\"")
;; This test would require internet access.
(("\\./tools/buildman/buildman") (which "true")))
(substitute* "test/py/tests/test_sandbox_exit.py"
(("BASEDIR=sandbox") "BASEDIR=."))
(for-each (lambda (file)
(substitute* file
- ;; Disable signatures, due to GPL/Openssl
- ;; license incompatibilities. See
- ;; https://bugs.gnu.org/34717 for details.
- (("CONFIG_FIT_SIGNATURE=y") "CONFIG_FIT_SIGNATURE=n")
+ ;; Disable features that require OpenSSL due
+ ;; to GPL/Openssl license incompatibilities.
+ ;; See https://bugs.gnu.org/34717 for
+ ;; details.
+ (("CONFIG_FIT_SIGNATURE=y")
+ "CONFIG_FIT_SIGNATURE=n\nCONFIG_UT_LIB_ASN1=n")
;; This test requires a sound system, which is un-used
;; in u-boot-tools.
(("CONFIG_SOUND=y") "CONFIG_SOUND=n")))
(make-u-boot-sunxi64-package "pine64-lts" "aarch64-linux-gnu"))
(define-public u-boot-pinebook
- (make-u-boot-sunxi64-package "pinebook" "aarch64-linux-gnu"))
+ (let ((base (make-u-boot-sunxi64-package "pinebook" "aarch64-linux-gnu")))
+ (package
+ (inherit base)
+ (arguments
+ (substitute-keyword-arguments (package-arguments base)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-after 'unpack 'patch-pinebook-config
+ ;; Fix regression with LCD video output introduced in 2020.01
+ ;; https://patchwork.ozlabs.org/patch/1225130/
+ (lambda _
+ (substitute* "configs/pinebook_defconfig"
+ (("CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=y") "CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=y\nCONFIG_VIDEO_BPP32=y"))
+ #t)))))))))
(define-public u-boot-bananapi-m2-ultra
(make-u-boot-package "Bananapi_M2_Ultra" "arm-linux-gnueabihf"))
("firmware-m0" ,rk3399-cortex-m0)
,@(package-native-inputs base))))))
+(define-public u-boot-qemu-riscv64
+ (make-u-boot-package "qemu-riscv64" "riscv64-linux-gnu"))
+
(define-public u-boot-qemu-riscv64-smode
- (make-u-boot-package "qemu-riscv64_smode" "riscv64-linux-gnu"))
+ (let ((base (make-u-boot-package "qemu-riscv64_smode" "riscv64-linux-gnu")))
+ (package
+ (inherit base)
+ (source (origin
+ (inherit (package-source u-boot))
+ (patches
+ (search-patches "u-boot-riscv64-fix-extlinux.patch")))))))
(define-public u-boot-sifive-fu540
(make-u-boot-package "sifive_fu540" "riscv64-linux-gnu"))
`(("firmware" ,arm-trusted-firmware-rk3399)
,@(package-native-inputs base))))))
+(define-public u-boot-pinebook-pro-rk3399
+ (let ((base (make-u-boot-package "pinebook-pro-rk3399" "aarch64-linux-gnu")))
+ (package
+ (inherit base)
+ (arguments
+ (substitute-keyword-arguments (package-arguments base)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-after 'unpack 'set-environment
+ (lambda* (#:key inputs #:allow-other-keys)
+ (setenv "BL31" (string-append (assoc-ref inputs "firmware")
+ "/bl31.elf"))
+ #t))
+ ;; Phases do not succeed on the bl31 ELF.
+ (delete 'strip)
+ (delete 'validate-runpath)))))
+ (native-inputs
+ `(("firmware" ,arm-trusted-firmware-rk3399)
+ ,@(package-native-inputs base))))))
+
(define-public vboot-utils
(package
(name "vboot-utils")
("libyaml" ,libyaml)
("openssl" ,openssl)
("openssl:static" ,openssl "static")
- ("util-linux" ,util-linux)))
+ ("util-linux" ,util-linux "lib")))
(home-page
"https://dev.chromium.org/chromium-os/chromiumos-design-docs/verified-boot")
(synopsis "ChromiumOS verified boot utilities")
(guix build utils)
(ice-9 regex) ; for string-match
(srfi srfi-26)) ; for cut
- #:make-flags (list "CC=gcc")
+ #:make-flags
+ (list ,(string-append "CC=" (cc-for-target)))
#:tests? #f ; no tests
#:phases
(modify-phases %standard-phases