[PATCH 0/4] Add heads.

OpenSubmitted by Danny Milosavljevic.
Details
4 participants
  • Björn Höfling
  • Danny Milosavljevic
  • Efraim Flashner
  • Julien Lepiller
Owner
unassigned
Severity
normal
D
D
Danny Milosavljevic wrote on 20 Sep 2019 03:02
(address . guix-patches@gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190920010248.28082-1-dannym@scratchpost.org
Danny Milosavljevic (4):
gnu: Add musl-cross.
gnu: Add heads.
gnu: Add heads-linuxboot.
gnu: Add heads-qemu-linuxboot.

gnu/local.mk | 1 +
gnu/packages/heads.scm | 557 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 558 insertions(+)
create mode 100644 gnu/packages/heads.scm
D
D
Danny Milosavljevic wrote on 20 Sep 2019 09:31
[PATCH 1/4] gnu: Add musl-cross.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190920073149.2933-1-dannym@scratchpost.org
* gnu/packages/heads.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
gnu/local.mk | 1 +
gnu/packages/heads.scm | 124 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 125 insertions(+)
create mode 100644 gnu/packages/heads.scm

Toggle diff (142 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index ad85894ebe..4fc22d6fb4 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -245,6 +245,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/haskell-web.scm			\
   %D%/packages/haskell-xyz.scm			\
   %D%/packages/ham-radio.scm			\
+  %D%/packages/heads.scm			\
   %D%/packages/hexedit.scm			\
   %D%/packages/hugs.scm				\
   %D%/packages/hurd.scm				\
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
new file mode 100644
index 0000000000..b547a374e0
--- /dev/null
+++ b/gnu/packages/heads.scm
@@ -0,0 +1,124 @@
+(define-module (gnu packages heads)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages elf)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages cpio)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages virtualization))
+
+(define-public musl-cross
+  (let ((revision "1")
+        (commit "b7f2249b665705939dc4eca67d11553c72164f4b"))
+  (package
+    (name "musl-cross")
+    (version (git-version "0.1" revision commit))
+    (source
+          (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/GregorR/musl-cross")
+                   (commit "3b5b118f1cdddecda3f04b5005f69f962278fc1e")))
+             (file-name "musl-cross-checkout")
+             (sha256
+              (base32 "0pd1b7k4gwbvnyw0677p56d7j0xmv80k5iihkkjrd1mp9zdx90gj"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; No tests in main project.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda _
+             (setenv "SHELL" "bash")
+             (setenv "CONFIG_SHELL" "bash")
+             #t))
+         (add-after 'unpack 'unpack-dependencies
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (define (install-file* source-key destination-directory
+                                    destination-suffix)
+               (let* ((source-file (assoc-ref inputs source-key))
+                      (source-basename (basename source-file))
+                      (source-parts (string-split source-basename #\-))
+                      (drop (@ (srfi srfi-1) drop))
+                      (destination-file
+                       (string-join (drop source-parts 1) "-")))
+                 (copy-file source-file
+                  (string-append destination-directory "/"
+                                 destination-file destination-suffix))))
+             (for-each (lambda (name)
+                         (install-file* name "tarballs" ""))
+                       '("binutils" "target-gcc-5" "kernel-headers" "musl"))
+             (substitute* "config.sh"
+              (("^CC_BASE_PREFIX=.*")
+               (string-append "CC_BASE_PREFIX=" (assoc-ref outputs "out")
+                              "/crossgcc\n")))
+             ;; Note: Important: source/gcc-5.3.0/gcc/exec-tool.in
+             ;; Note: Important: source/kernel-headers-3.12.6-5/tools/install.sh
+             ;; Note: Important: move-if-change (twice)
+             ;; Make sure that shebangs are patched after new extractions.
+             (substitute* "defs.sh"
+              (("touch \"[$]2/extracted\"")
+               (string-append "touch \"$2/extracted\"
+for s in mkinstalldirs move-if-change compile depcomp callprocs configure \\
+mkdep compile libtool-ldflags config.guess install-sh missing config.sub \\
+config.rpath progtest.m4 lib-ld.m4 acx.m4 gen-fixed.sh mkheader.sh ylwrap \\
+merge.sh godeps.sh lock-and-run.sh print-sysroot-suffix.sh mkconfig.sh \\
+genmultilib exec-tool.in install.sh
+do
+  find . -name $s -exec sed -i -e 's;!/bin/sh;!" (assoc-ref inputs "bash")
+"/bin/sh;' '{}' ';'
+  find . -name $s -exec sed -i -e 's; /bin/sh; " (assoc-ref inputs "bash")
+"/bin/sh;' '{}' ';'
+done
+" )))
+             #t))
+         (replace 'build
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "./build.sh")))
+         (delete 'install))))
+    (native-inputs
+     `(("bash" ,bash)
+       ("flex" ,flex)
+       ("gmp" ,gmp)
+       ("mpfr" ,mpfr)
+       ("mpc" ,mpc)
+       ("binutils"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gnu/binutils/binutils-2.25.1.tar.bz2")
+           (sha256
+            (base32 "08lzmhidzc16af1zbx34f8cy4z7mzrswpdbhrb8shy3xxpflmcdm"))))
+       ("target-gcc-5"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.bz2")
+           (sha256
+            (base32 "1ny4smkp5bzs3cp8ss7pl6lk8yss0d9m4av1mvdp72r1x695akxq"))))
+       ("kernel-headers"
+        ,(origin
+           (method url-fetch)
+           (uri "http://ftp.barfooze.de/pub/sabotage/tarballs/kernel-headers-3.12.6-5.tar.xz")
+           (sha256
+            (base32 "0p43lvbpy69lbjmvq39g570imj0p8z791bhzrpdnp1nygwshj2wf"))))
+       ("musl"
+        ,(origin
+           (method url-fetch)
+           (uri "http://www.musl-libc.org/releases/musl-1.1.21.tar.gz")
+           (sha256
+            (base32 "0i2z52zgc86af1n1gjiz43hgd85mxjgvgn345zsybja9dxpvchn7"))))))
+    (home-page "https://github.com/osresearch/heads")
+    (synopsis "Musl-cross gcc 5 toolchain")
+    (description "Musl-cross toolchain: binutils, gcc 5 and musl.")
+    (license license:isc))))
D
D
Danny Milosavljevic wrote on 20 Sep 2019 09:31
[PATCH 2/4] gnu: Add heads.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190920073149.2933-2-dannym@scratchpost.org
* gnu/packages/heads.scm (heads): New variable.
---
gnu/packages/heads.scm | 378 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 378 insertions(+)

Toggle diff (404 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index b547a374e0..de97c8de6c 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -4,8 +4,12 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix utils)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages assembly)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages flex)
@@ -13,8 +17,11 @@
   #:use-module (gnu packages elf)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages cpio)
+  #:use-module (gnu packages file)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages virtualization))
@@ -122,3 +129,374 @@ done
     (synopsis "Musl-cross gcc 5 toolchain")
     (description "Musl-cross toolchain: binutils, gcc 5 and musl.")
     (license license:isc))))
+
+(define-public heads
+  (let ((revision "1")
+        (commit "b7f2249b665705939dc4eca67d11553c72164f4b"))
+  (package
+    (name "heads")
+    (version (git-version "0.1" revision commit))
+    (source
+     (origin
+      (method git-fetch)
+      (uri (git-reference
+             (url "https://github.com/osresearch/heads.git")
+             (commit commit)))
+      (file-name (git-file-name name version))
+      (sha256
+       (base32
+        "0sgyqm4ss88hfp8miz40mw40kj7qp2khr7jcvscwv87bd5g9nwnx"))
+      (patches (search-patches "heads-build-environment.patch"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bash" ,bash)
+       ("git" ,git)
+       ("perl" ,perl)
+       ("cpio" ,cpio)
+       ("m4" ,m4)
+       ("bison" ,bison)
+       ("flex" ,flex)
+       ("curl" ,curl) ; FIXME: Remove.
+       ("zlibx" ,zlib)
+       ("musl-cross" ,musl-cross)
+       ("elfutils" ,elfutils)
+       ("bc" ,bc)
+       ("findutils" ,findutils)
+       ("flashtools"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/flashtools.git")
+                 (commit "9acce09aeb635c5bef01843e495b95e75e8da135")))
+           (file-name "flashtools-checkout")
+           (sha256
+            (base32 "0r4gj3nzr67ycd39k1vjzxfzkp90yacrdgxhc1z5jfvxfq4x91c1"))))
+       ("tpmtotp"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/tpmtotp.git")
+                 (commit "18b860fdcf5a55537c8395b891f2b2a5c24fc00a")))
+           (file-name "tpmtotp-checkout")
+           (sha256
+            (base32 "112p5afkrbipr0d8x9r9mrxrr3xyf97s2y3f32p41vs951sksqnv"))))
+       ("msrtools"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/msr-tools.git")
+                 (commit "572ef8a2b873eda15a322daa48861140a078b92c")))
+           (file-name "msr-tools-checkout")
+           (sha256
+            (base32 "0an1ypj5pin9l413vn4gxzi3x6ir1rba9jv6n5gk6s9dq803lb6p"))))
+       ("coreboot-blobs"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-blobs-4.8.1.tar.xz")
+           (sha256
+            (base32 "15g222xj1zdn8i8qz0pw2jf28h66dljb1q5isw2ml05gwfd51ahq"))))
+       ("coreboot"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-4.8.1.tar.xz")
+           (sha256
+            (base32 "08xdd5drk8yd37a3z5hc81qmgsybv6201i28hcggxh980vdz9pgh"))))
+       ("linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.62.tar.xz")
+           (sha256
+            (base32 "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji"))))
+       ("musl" ; useless
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.musl-libc.org/releases/musl-1.1.15.tar.gz")
+           (sha256
+            (base32 "1ymhxkskivzph0q34zadwfglc5gyahqajm7chqqn2zraxv3lgr4p"))))
+       ("busybox"
+        ,(origin
+           (method url-fetch)
+           (uri "https://busybox.net/downloads/busybox-1.28.0.tar.bz2")
+           (sha256
+            (base32 "1701carjf02y7r3djm1yvyd5kzrcxm4szinp7agfv7fmvfvm6ib0"))))
+       ("zlib"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.zlib.net/zlib-1.2.11.tar.gz")
+           (sha256
+            (base32 "18dighcs333gsvajvvgqp8l4cx7h1x7yx9gd5xacnk80spyykrf3"))))
+       ("mbedtls"
+        ,(origin
+           (method url-fetch)
+           (uri "https://tls.mbed.org/download/mbedtls-2.4.2-gpl.tgz")
+           (sha256
+            (base32 "17r9qs585gqghcf5yavb1cnvsigl0f8r0k8rklr5a855hrajs7yh"))))
+       ("kexec-tools"
+        ,(origin
+           (method url-fetch)
+           (uri "https://kernel.org/pub/linux/utils/kernel/kexec/kexec-tools-2.0.16.tar.gz")
+           (sha256
+            (base32 "0fkg5y3wxvkqrjii90iz1i59qd6hhq7ar27f0sgv7jbppyczq5yg"))))
+       ("qrencode"
+        ,(origin
+           (method url-fetch)
+           (uri "https://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz")
+           (sha256
+            (base32 "0wiagx7i8p9zal53smf5abrnh9lr31mv0p36wg017401jrmf5577"))))
+       ("pciutils"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/software/utils/pciutils/pciutils-3.5.4.tar.xz")
+           (sha256
+            (base32 "0rpy7kkb2y89wmbcbfjjjxsk2x89v5xxhxib4vpl131ip5m3qab4"))))
+       ("util-linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/util-linux/v2.29/util-linux-2.29.2.tar.xz")
+           (sha256
+            (base32 "1qz81w8vzrmy8xn9yx7ls4amkbgwx6vr62pl6kv9g7r0g3ba9kmc"))))
+       ("flashrom"
+        ,(origin
+           (method url-fetch)
+           (uri "https://download.flashrom.org/releases/flashrom-1.0.tar.bz2")
+           (sha256
+            (base32 "0r7fkpfc8w51n8ffbhclj4wa3kwrk0ijv1acwpw5myx5bchzl0ip"))))
+       ("popt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://launchpad.net/popt/head/1.16/+download/popt-1.16.tar.gz")
+           (sha256
+            (base32 "1j2c61nn2n351nhj4d25mnf3vpiddcykq005w2h6kw79dwlysa77"))))
+       ("lvm2"
+        ,(origin
+           (method url-fetch)
+           (uri "https://mirrors.kernel.org/sourceware/lvm2/LVM2.2.02.168.tgz")
+           (sha256
+            (base32 "03b62hcsj9z37ckd8c21wwpm07s9zblq7grfh58yzcs1vp6x38r3"))))
+       ("cryptsetup"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/cryptsetup/v1.7/cryptsetup-1.7.3.tar.xz")
+           (sha256
+            (base32 "00nwd96m9yq4k3cayc04i5y7iakkzana35zxky6hpx2w8zl08axg"))))
+       ("libgpg-error"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.32.tar.bz2")
+           (sha256
+            (base32 "1jj08ns4sh1hmafqp1giskvdicdz18la516va26jycy27kkwaif3"))))
+       ("libgcrypt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.3.tar.bz2")
+           (sha256
+            (base32 "0z5gs1khzyknyfjr19k8gk4q148s6q987ya85cpn0iv70fz91v36"))))
+       ("libksba"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libksba/libksba-1.3.5.tar.bz2")
+           (sha256
+            (base32 "0h53q4sns1jz1pkmhcz5wp9qrfn9f5g9i3vjv6dafwzzlvblyi21"))))
+       ("libassuan"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libassuan/libassuan-2.5.1.tar.bz2")
+           (sha256
+            (base32 "0jb4nb4nrjr949gd3lw8lh4v5d6qigxaq6xwy24w5apjnhvnrya7"))))
+       ("npth"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/npth/npth-1.6.tar.bz2")
+           (sha256
+            (base32 "1lg2lkdd3z1s3rpyf88786l243adrzyk9p4q8z9n41ygmpcsp4qk"))))
+       ("libusb"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.21/libusb-1.0.21.tar.bz2")
+           (sha256
+            (base32 "0jw2n5kdnrqvp7zh792fd6mypzzfap6jp4gfcmq4n6c1kb79rkkx"))))
+       ("libusb-compat"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-compat-0.1/libusb-compat-0.1.5/libusb-compat-0.1.5.tar.bz2")
+           (sha256
+            (base32 "0nn5icrfm9lkhzw1xjvaks9bq3w6mjg86ggv3fn7kgi4nfvg8kj0"))))
+       ("dropbear"
+        ,(origin
+           (method url-fetch)
+           (uri "https://matt.ucc.asn.au/dropbear/releases/dropbear-2016.74.tar.bz2")
+           (sha256
+            (base32 "14c8f4gzixf0j9fkx68jgl85q7b05852kk0vf09gi6h0xmafl817"))))
+       ("pinentry"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/pinentry/pinentry-1.1.0.tar.bz2")
+           (sha256
+            (base32 "0w35ypl960pczg5kp6km3dyr000m1hf0vpwwlh72jjkjza36c1v8"))))
+       ("gnupg"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.10.tar.bz2")
+           (sha256
+            (base32 "05f9804g72pffdxgvxjmjzkfcpjg1x221g9rwcr8fi51hrxd77br"))))
+       ("slang"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.jedsoft.org/releases/slang/slang-2.3.1a.tar.bz2")
+           (sha256
+            (base32 "0dlcy0hn0j6cj9qj5x6hpb0axifnvzzmv5jqq0wq14fygw0c7w2l"))))
+       ("newt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://releases.pagure.org/newt/newt-0.52.20.tar.gz")
+           (sha256
+            (base32 "1g3dpfnvaw7vljbr7nzq1rl88d6r8cmrvvng9inphgzwxxmvlrld"))))
+
+       ;;; coreboot cross; FIXME: Extract.
+
+       ("gmp"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gmp/gmp-6.1.2.tar.xz")
+           (sha256
+            (base32 "04hrwahdxyqdik559604r7wrj9ffklwvipgfxgj4ys4skbl6bdc7"))))
+       ("mpfr"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/mpfr/mpfr-3.1.5.tar.xz")
+           (sha256
+            (base32 "1g32l2fg8f62lcyzzh88y3fsh6rk539qc6ahhdgvx7wpnf1dwpq1"))))
+       ("mpc"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/mpc/mpc-1.0.3.tar.gz")
+           (sha256
+            (base32 "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))
+       ("binutils-2.30"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/binutils/binutils-2.30.tar.xz")
+           (sha256
+            (base32 "1rhshw4m5m2pjz8g15hpiwhp52kn0pj0b5dxy0v7lwigmspbhikf"))))
+       ("gcc-8"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gcc/gcc-8.1.0/gcc-8.1.0.tar.xz")
+           (sha256
+            (base32 "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x"))))))
+    (arguments
+     `(#:tests? #f ; Toplevel makefile has no tests.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; For edk2.
+             (setenv "BUILD_CC" "gcc") ; FIXME: musl *musl-cross*/x86_64-linux-musl/bin/x86_64-linux-musl-gcc || ./x86_64-linux-musl/x86_64-linux-musl/bin/musl-gcc.
+             ;; busybox needs the original values (for VERY few tools, but more than 0).
+             ;; Disable wget.
+             (setenv "WGET" "true")
+             ;; Work around mcheck.h problem (in glibc!?)
+             (substitute* "modules/popt"
+              (("[.]/configure") "CFLAGS=\"-D__END_DECLS -D__BEGIN_DECLS -D__THROW\" ./configure"))
+             #t))
+         (add-after 'unpack 'unpack-heads-packages
+           (lambda* (#:key inputs #:allow-other-keys)
+             (define (install-file* source-key destination-directory destination-suffix)
+               (let* ((source-file (assoc-ref inputs source-key))
+                      (source-basename (basename source-file))
+                      (source-parts (string-split source-basename #\-))
+                      (drop (@ (srfi srfi-1) drop))
+                      (destination-file
+                       (string-join (drop source-parts 1) "-")))
+                 (copy-file source-file
+                  (string-append destination-directory "/"
+                                 destination-file destination-suffix))
+                 ;(invoke "tar" "-xf" source-file "-C" "build")
+))
+             (mkdir-p "packages")
+             (setenv "GUIX_C_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
+             (setenv "GUIX_CPLUS_INCLUDE_PATH" (getenv "CPLUS_INCLUDE_PATH"))
+             (setenv "GUIX_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
+             (setenv "GUIX_CPATH" (getenv "CPATH"))
+             (for-each (lambda (name)
+                         (install-file* name "packages" ".tmp"))
+                       '("linux" "coreboot-blobs" "coreboot" "busybox" "zlib" "mbedtls" "kexec-tools" "qrencode" "pciutils" "util-linux" "flashrom" "popt" "lvm2" "cryptsetup" "libgpg-error" "libgcrypt" "libksba" "libassuan" "npth" "libusb" "libusb-compat" "dropbear" "pinentry" "gnupg" "slang" "newt" "musl"))
+             (mkdir-p "build")
+             (mkdir-p "build/musl-cross-git/tarballs")
+             (mkdir-p "build/coreboot-4.8.1/util/crossgcc/tarballs")
+             (for-each (lambda (name)
+                         (install-file* name "build/coreboot-4.8.1/util/crossgcc/tarballs" ""))
+                       '("gmp" "mpfr" "mpc" "binutils-2.30" "gcc-8"))
+             (copy-recursively (assoc-ref inputs "musl-cross") "build/musl-cross-git")
+             (copy-recursively (assoc-ref inputs "tpmtotp") "build/tpmtotp-git")
+             (copy-recursively (assoc-ref inputs "flashtools") "build/flashtools-0.0.1")
+             (copy-recursively (assoc-ref inputs "msrtools") "build/msrtools-git")
+
+             (setenv "MUSL_DIR" (assoc-ref inputs "musl-cross"))
+             (setenv "CROSS" (string-append (getenv "MUSL_DIR") "/crossgcc/x86_64-linux-musl/bin/x86_64-musl-linux-")) ; Note: Useless
+             (substitute* "Makefile"
+              ;; Disable our non-cross toolchain environment.
+              (("CROSS_TOOLS_NOCC := ")
+               ; CPP=" (getenv "CROSS") "cpp CXXCPP=" (getenv "CROSS") "cpp "
+               (string-append "CROSS_TOOLS_NOCC := C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH= CPATH= "))
+              ;; Disable git.
+              (("git submodule update --init")
+               "true submodule update --init")
+              ;; Re-enable our non-cross toolchain environment selectively.
+              (("^WGET.*")
+               (string-append "HOSTCC =" ; for busybox
+                              " C_INCLUDE_PATH=" (or (getenv "GUIX_C_INCLUDE_PATH") "")
+                              " CPLUS_INCLUDE_PATH=" (or (getenv "GUIX_CPLUS_INCLUDE_PATH") "")
+                              " CPATH=" (or (getenv "GUIX_CPATH") "")
+                              " LIBRARY_PATH=" (or (getenv "GUIX_LIBRARY_PATH") "")
+                              " gcc\n"
+                              "CC_FOR_BUILD = $(HOSTCC)\n" ; for libgpg-error
+                              "BUILD_CC = $(HOSTCC)\n")) ; for kexec-tools
+              ;; Disable git, patch shebangs, and selectively re-enable host compiler.
+              (("(git clone.*)." _ tar)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;/bin/pwd\\>;pwd;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' \"$$$$s\" ; fi ; done)
+" "true" (assoc-ref inputs "bash") (assoc-ref inputs "bash")))
+              (("(tar -xf.*)." _ tar)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;/bin/pwd\\>;pwd;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' \"$$$$s\" ; fi ; done)
+" tar (assoc-ref inputs "bash") (assoc-ref inputs "bash"))))
+             ;(substitute* "modules/musl-cross"
+             ; (("/bin/echo") "echo"))
+             (call-with-output-file "patches/coreboot-4.8.1/9999-shell.patch"
+               (lambda (port)
+                 (format port "--- coreboot-4.8.1/util/crossgcc/buildgcc.orig 2019-09-13 14:45:12.463998974 +0200
++++ coreboot-4.8.1/util/crossgcc/buildgcc 2019-09-13 14:46:49.808268216 +0200
+@@ -462,6 +462,13 @@
+ 			}
+ 		done
+ 		touch \"${dir}/.unpack_success\"
++  for s in \"${dir}/Makefile\" \"${dir}/configure\" \"${dir}/config.sub\" \"${dir}/config.guess\"
++  do
++   if [ -f \"${s}\" ]
++   then
++    sed -i -e 's;/bin/sh\\>;~a/bin/sh;' \"${s}\"
++   fi
++  done
+ 	)
+ }
+ 
+" (assoc-ref inputs "bash"))))
+             #t))
+         (add-after 'install 'install-images
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (make-flags-assoc (map (lambda (x)
+                                             (string-split x #\=))
+                                           make-flags))
+                    (BOARD (car (assoc-ref make-flags-assoc "BOARD")))
+                    (out-images (string-append out "/libexec/heads/" BOARD "/images")))
+               (mkdir -p out-images)
+               (copy-recursively (string-append "build/" BOARD) out-images)
+               ;; Contains timestamp.
+               (delete-file (string-append out-images "/hashes.txt"))
+               #t))))))
+    (home-page "https://github.com/osresearch/heads")
+    (synopsis "Heads: coreboot/LinuxBoot payload")
+    (description "A minimal Linux that runs as a coreboot or LinuxBoot ROM
+payload to provide a secure, flexible boot environment for laptops and
+servers.")
+    (license license:gpl2+))))
D
D
Danny Milosavljevic wrote on 20 Sep 2019 09:31
[PATCH 3/4] gnu: Add heads-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190920073149.2933-3-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-linuxboot): New variable.
---
gnu/packages/heads.scm | 48 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 47 insertions(+), 1 deletion(-)

Toggle diff (63 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index de97c8de6c..4412770ae3 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -489,7 +489,7 @@ done
                                            make-flags))
                     (BOARD (car (assoc-ref make-flags-assoc "BOARD")))
                     (out-images (string-append out "/libexec/heads/" BOARD "/images")))
-               (mkdir -p out-images)
+               (mkdir-p out-images)
                (copy-recursively (string-append "build/" BOARD) out-images)
                ;; Contains timestamp.
                (delete-file (string-append out-images "/hashes.txt"))
@@ -500,3 +500,49 @@ done
 payload to provide a secure, flexible boot environment for laptops and
 servers.")
     (license license:gpl2+))))
+
+(define-public heads-linuxboot
+  (package
+    (inherit heads)
+    (name "heads-linuxboot")
+    (arguments
+     (substitute-keyword-arguments (package-arguments heads)
+      ((#:phases phases)
+       `(modify-phases ,phases
+          (add-before 'unpack-heads-packages 'unpack-linuxboot
+            (lambda* (#:key inputs #:allow-other-keys)
+               (mkdir-p "build")
+               (copy-recursively (assoc-ref inputs "linuxboot") "build/linuxboot-git")
+               (copy-recursively (assoc-ref inputs "edk2") "build/linuxboot-git/edk2")
+               (invoke "chmod" "-R" "u+w" "build/linuxboot-git")
+               (chmod "build/linuxboot-git/Makefile" #o664)
+               (substitute* "build/linuxboot-git/dxe/Makefile"
+                (("/usr/bin/") ""))
+               #t))))))
+    (native-inputs
+     `(("edk2"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/linuxboot/edk2")
+                   (commit "UDK2018")
+                   (recursive? #t))) ; openssl
+             (file-name "edk2-checkout")
+             (sha256
+              (base32 "0crjx1hg1m5mir2qm96dbcc3glrnww3ni0bc9f370qmm337wzlhi"))))
+       ("libuuid" ,util-linux) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("nasm" ,nasm) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("python" ,python-2) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("acpica" ,acpica) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("file" ,file)
+       ("linuxboot"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/osresearch/linuxboot.git")
+                   (commit "b5376a441e8e85cbf722e943bb8294958e87c784")
+                   (recursive? #t)))
+             (file-name "linuxboot-checkout")
+             (sha256
+              (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
+       ,@(package-native-inputs heads)))))
D
D
Danny Milosavljevic wrote on 20 Sep 2019 09:31
[PATCH 4/4] gnu: Add heads-qemu-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190920073149.2933-4-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-qemu-linuxboot): New variable.
---
gnu/packages/heads.scm | 9 +++++++++
1 file changed, 9 insertions(+)

Toggle diff (17 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 4412770ae3..815634116b 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -546,3 +546,12 @@ servers.")
              (sha256
               (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
        ,@(package-native-inputs heads)))))
+
+(define-public heads-qemu-linuxboot
+  (package
+    (inherit heads-linuxboot)
+    (name "heads-qemu-linuxboot")
+    (arguments
+     `(#:make-flags
+       '("BOARD=qemu-linuxboot")
+       ,@(package-arguments heads-linuxboot)))))
B
B
Björn Höfling wrote on 20 Sep 2019 14:05
Re: [bug#37466] [PATCH 2/4] gnu: Add heads.
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 37466@debbugs.gnu.org)
20190920140529.234c55ad@alma-ubu
Hi Danny,

no full review, just one remark:

On Fri, 20 Sep 2019 09:31:47 +0200
Danny Milosavljevic <dannym@scratchpost.org> wrote:

Toggle quote (2 lines)
> * gnu/packages/heads.scm (heads): New variable.

[..]

Toggle quote (3 lines)
> + (native-inputs
> + `(("bash" ,bash)

[..]
Toggle quote (9 lines)
> + ("linux"
> + ,(origin
> + (method url-fetch)
> + (uri
> "https://cdntt.kernel.org/pub/linux/kernel/v4.x/linux-4.14.62.tar.xz")
> + (sha256
> + (base32
> "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji"))))

That's the non-free kernel, right?
Besides that neither DNS nor Google knows that host.

In general, this long list of source-files looks a bit strange: I think
all/most of these packages are already a Guix package, where
the source code is (more or less) verified to be FSDG-compatible,
possibly with a snipped. Now this package is just getting a huge list of
unreviewed source tarballs in. Hm.

Could we at least somehow reference the source package from Guix?

Björn
-----BEGIN PGP SIGNATURE-----

iF0EARECAB0WIQQiGUP0np8nb5SZM4K/KGy2WT5f/QUCXYTAiQAKCRC/KGy2WT5f
/Q9zAJ9yohTt3/KBrnSmw3y7mB9kSlZqIgCgs0HqbtaWyb1axffFifsqbcbtq5U=
=t6F7
-----END PGP SIGNATURE-----


D
D
Danny Milosavljevic wrote on 20 Sep 2019 15:49
(name . Björn Höfling)(address . bjoern.hoefling@bjoernhoefling.de)(address . 37466@debbugs.gnu.org)
20190920154954.35713605@scratchpost.org
Hi Björn,

On Fri, 20 Sep 2019 14:05:29 +0200
Björn Höfling <bjoern.hoefling@bjoernhoefling.de> wrote:

Toggle quote (2 lines)
> That's the non-free kernel, right?

Right.

Toggle quote (2 lines)
> Besides that neither DNS nor Google knows that host.

Hmm, you're right, but it worked for me. Doesn't work now.
Using "www" is probably better anyhow (and works).

Toggle quote (8 lines)
> In general, this long list of source-files looks a bit strange: I think
> all/most of these packages are already a Guix package, where
> the source code is (more or less) verified to be FSDG-compatible,
> possibly with a snipped. Now this package is just getting a huge list of
> unreviewed source tarballs in. Hm.
>
> Could we at least somehow reference the source package from Guix?

Well, heads provides an initrd and they want reproducible builds for it for
security purposes--that's the main reason they build a "cross" compiler too:
To have the compiler produce verifiable executables.

So basically if we change the version or anything, the hashes won't match
any more and any person going along their installation guide should
abort the installation--because heads has presumably been tampered with.

Not sure what to do about it.

Maybe at least linux-libre produces bitwise identical outputs to Linux
for what they care about. I'll try it.
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl2E2QIACgkQ5xo1VCww
uqVHzAf/RqxETW1BnnaY0oqKiqDlOsU8lMhebn4DblVj0wWQc/Frk8V4X8ysD5g9
BPN7SORWfm5DSY9Bp0lEuj5pY93yCHNaIWSduGLLZ7ypQYz/9jAgM4agDY5B2AW+
V00Byfas5tRpvosxEMjOTDaM4hh0Lr8+llKnJCI6vJjdI3DXClpwfRQ7xmNzAadU
w8QEBj2iZC2NWkf56dv4sm23M8weHZMjhXOBIKfmG/P72Tr4libp8nhCe62En6if
02h9jEkdMlVcTQziQ6oxhEqoRDLQLxDGkUh+zdd+KcLPhHULrE230hRE1DZhpAqh
75lahkQNWeiEHz8upkVXgQvQcBnN0Q==
=VP1E
-----END PGP SIGNATURE-----


J
J
Julien Lepiller wrote on 20 Sep 2019 16:45
(address . 37466@debbugs.gnu.org)
A5384874-68C4-4127-9EB1-BA83BED549A7@lepiller.eu
Le 20 septembre 2019 15:49:54 GMT+02:00, Danny Milosavljevic <dannym@scratchpost.org> a écrit :
Toggle quote (41 lines)
>Hi Björn,
>
>On Fri, 20 Sep 2019 14:05:29 +0200
>Björn Höfling <bjoern.hoefling@bjoernhoefling.de> wrote:
>
>> That's the non-free kernel, right?
>
>Right.
>
>> Besides that neither DNS nor Google knows that host.
>
>Hmm, you're right, but it worked for me. Doesn't work now.
>Using "www" is probably better anyhow (and works).
>
>> In general, this long list of source-files looks a bit strange: I
>think
>> all/most of these packages are already a Guix package, where
>> the source code is (more or less) verified to be FSDG-compatible,
>> possibly with a snipped. Now this package is just getting a huge list
>of
>> unreviewed source tarballs in. Hm.
>>
>> Could we at least somehow reference the source package from Guix?
>
>Well, heads provides an initrd and they want reproducible builds for it
>for
>security purposes--that's the main reason they build a "cross" compiler
>too:
>To have the compiler produce verifiable executables.
>
>So basically if we change the version or anything, the hashes won't
>match
>any more and any person going along their installation guide should
>abort the installation--because heads has presumably been tampered
>with.
>
>Not sure what to do about it.
>
>Maybe at least linux-libre produces bitwise identical outputs to Linux
>for what they care about. I'll try it.

Not sure about heads, but some build systems specify the exact version of their dependencies, but we don't package all of them in guix. In that case, the guix build-system overwrites the declared hash with the actual hash of the package that is used instead. Can't you do something similar?
D
D
Danny Milosavljevic wrote on 24 Sep 2019 16:40
20190924164018.082a3733@scratchpost.org
Toggle quote (3 lines)
> Maybe at least linux-libre produces bitwise identical outputs to Linux
> for what they care about. I'll try it.

Status (*mumbles*):

I tried substituting linux-4.14.62 with our linux-libre-4.14.62-source.
It doesn't provide identical output--the bzImage is different, the modules are
different and the initrd is different (why the latter? weird...).
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl2KKtIACgkQ5xo1VCww
uqVgeQf7BJ3k27yENkpApuhPJXw6EM1fx+PZHwkmz6FW5EawyrChsbnnCJ+uZfVg
RuBWIImNNVdS1y0d8Sq9Bv/QiaJjJQZySl8fXIoQqFl0XhmZ6fK3G94qaDIEG4/9
AzhnQrOxEzPifOToS8JrB8qQfHcqrjUuSwizWbRHmdB0A4YAn/rktnsAtbFZVKpe
cMh5/RdkXfJuQ/IO5FvpAy5nuRi/uRnfMzA/j0VSvUgHgDsc6k6Ll+WgaTTdZJ6m
LKEvlVrWYPMDo/RX1eA3qGboqFEqQirYv1CN0CEvIOUEaaFtISrz8aXNVu6Yn4IN
LkITGls72ZNDcbyxhTji+6h6FRhyyA==
=hw/n
-----END PGP SIGNATURE-----


D
D
Danny Milosavljevic wrote on 24 Sep 2019 16:01
[WIP v2 0/7] Add heads.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190924140157.23564-1-dannym@scratchpost.org
This adds heads to Guix. Heads is minimal Linux that runs as a coreboot or
LinuxBoot payload to provide a secure, flexible boot environment for laptops
and servers.

Heads uses checksums to make sure that all the components are what they are
supposed to be, at build time, at BOOT time and when resuming.

Therefore, it's difficult to replace stuff with our versions.
I'm not sure whether we should--since Heads is supposed to build the same
thing reproducibly everywhere.

A future version will be a variant which does replace Linux by Linux-libre,
but that also changes both the source hashes and the output (and thus the
output hashes).

Danny Milosavljevic (7):
gnu: Add musl-cross.
gnu: Add heads.
gnu: Add heads-linuxboot.
gnu: Add heads-qemu-linuxboot.
gnu: Add heads-coreboot.
gnu: Add heads-qemu-coreboot.
gnu: Add heads-kgpe-d16.

gnu/local.mk | 2 +
gnu/packages/heads.scm | 607 ++++++++++++++++++
.../patches/heads-make-environment.patch | 446 +++++++++++++
3 files changed, 1055 insertions(+)
create mode 100644 gnu/packages/heads.scm
create mode 100644 gnu/packages/patches/heads-make-environment.patch
D
D
Danny Milosavljevic wrote on 24 Sep 2019 16:01
[WIP v2 1/7] gnu: Add musl-cross.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190924140157.23564-2-dannym@scratchpost.org
* gnu/packages/heads.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
gnu/local.mk | 1 +
gnu/packages/heads.scm | 124 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 125 insertions(+)
create mode 100644 gnu/packages/heads.scm

Toggle diff (142 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 8e535e208b..2ca70bdeaf 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -245,6 +245,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/haskell-web.scm			\
   %D%/packages/haskell-xyz.scm			\
   %D%/packages/ham-radio.scm			\
+  %D%/packages/heads.scm			\
   %D%/packages/hexedit.scm			\
   %D%/packages/hugs.scm				\
   %D%/packages/hurd.scm				\
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
new file mode 100644
index 0000000000..b547a374e0
--- /dev/null
+++ b/gnu/packages/heads.scm
@@ -0,0 +1,124 @@
+(define-module (gnu packages heads)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages elf)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages cpio)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages virtualization))
+
+(define-public musl-cross
+  (let ((revision "1")
+        (commit "b7f2249b665705939dc4eca67d11553c72164f4b"))
+  (package
+    (name "musl-cross")
+    (version (git-version "0.1" revision commit))
+    (source
+          (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/GregorR/musl-cross")
+                   (commit "3b5b118f1cdddecda3f04b5005f69f962278fc1e")))
+             (file-name "musl-cross-checkout")
+             (sha256
+              (base32 "0pd1b7k4gwbvnyw0677p56d7j0xmv80k5iihkkjrd1mp9zdx90gj"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; No tests in main project.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda _
+             (setenv "SHELL" "bash")
+             (setenv "CONFIG_SHELL" "bash")
+             #t))
+         (add-after 'unpack 'unpack-dependencies
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (define (install-file* source-key destination-directory
+                                    destination-suffix)
+               (let* ((source-file (assoc-ref inputs source-key))
+                      (source-basename (basename source-file))
+                      (source-parts (string-split source-basename #\-))
+                      (drop (@ (srfi srfi-1) drop))
+                      (destination-file
+                       (string-join (drop source-parts 1) "-")))
+                 (copy-file source-file
+                  (string-append destination-directory "/"
+                                 destination-file destination-suffix))))
+             (for-each (lambda (name)
+                         (install-file* name "tarballs" ""))
+                       '("binutils" "target-gcc-5" "kernel-headers" "musl"))
+             (substitute* "config.sh"
+              (("^CC_BASE_PREFIX=.*")
+               (string-append "CC_BASE_PREFIX=" (assoc-ref outputs "out")
+                              "/crossgcc\n")))
+             ;; Note: Important: source/gcc-5.3.0/gcc/exec-tool.in
+             ;; Note: Important: source/kernel-headers-3.12.6-5/tools/install.sh
+             ;; Note: Important: move-if-change (twice)
+             ;; Make sure that shebangs are patched after new extractions.
+             (substitute* "defs.sh"
+              (("touch \"[$]2/extracted\"")
+               (string-append "touch \"$2/extracted\"
+for s in mkinstalldirs move-if-change compile depcomp callprocs configure \\
+mkdep compile libtool-ldflags config.guess install-sh missing config.sub \\
+config.rpath progtest.m4 lib-ld.m4 acx.m4 gen-fixed.sh mkheader.sh ylwrap \\
+merge.sh godeps.sh lock-and-run.sh print-sysroot-suffix.sh mkconfig.sh \\
+genmultilib exec-tool.in install.sh
+do
+  find . -name $s -exec sed -i -e 's;!/bin/sh;!" (assoc-ref inputs "bash")
+"/bin/sh;' '{}' ';'
+  find . -name $s -exec sed -i -e 's; /bin/sh; " (assoc-ref inputs "bash")
+"/bin/sh;' '{}' ';'
+done
+" )))
+             #t))
+         (replace 'build
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "./build.sh")))
+         (delete 'install))))
+    (native-inputs
+     `(("bash" ,bash)
+       ("flex" ,flex)
+       ("gmp" ,gmp)
+       ("mpfr" ,mpfr)
+       ("mpc" ,mpc)
+       ("binutils"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gnu/binutils/binutils-2.25.1.tar.bz2")
+           (sha256
+            (base32 "08lzmhidzc16af1zbx34f8cy4z7mzrswpdbhrb8shy3xxpflmcdm"))))
+       ("target-gcc-5"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.bz2")
+           (sha256
+            (base32 "1ny4smkp5bzs3cp8ss7pl6lk8yss0d9m4av1mvdp72r1x695akxq"))))
+       ("kernel-headers"
+        ,(origin
+           (method url-fetch)
+           (uri "http://ftp.barfooze.de/pub/sabotage/tarballs/kernel-headers-3.12.6-5.tar.xz")
+           (sha256
+            (base32 "0p43lvbpy69lbjmvq39g570imj0p8z791bhzrpdnp1nygwshj2wf"))))
+       ("musl"
+        ,(origin
+           (method url-fetch)
+           (uri "http://www.musl-libc.org/releases/musl-1.1.21.tar.gz")
+           (sha256
+            (base32 "0i2z52zgc86af1n1gjiz43hgd85mxjgvgn345zsybja9dxpvchn7"))))))
+    (home-page "https://github.com/osresearch/heads")
+    (synopsis "Musl-cross gcc 5 toolchain")
+    (description "Musl-cross toolchain: binutils, gcc 5 and musl.")
+    (license license:isc))))
D
D
Danny Milosavljevic wrote on 24 Sep 2019 16:01
[WIP v2 3/7] gnu: Add heads-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190924140157.23564-4-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-linuxboot): New variable.
---
gnu/packages/heads.scm | 46 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)

Toggle diff (54 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 94764e9a1f..72565531e3 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -507,3 +507,49 @@ done
 payload to provide a secure, flexible boot environment for laptops and
 servers.")
     (license license:gpl2+))))
+
+(define-public heads-linuxboot
+  (package
+    (inherit heads)
+    (name "heads-linuxboot")
+    (arguments
+     (substitute-keyword-arguments (package-arguments heads)
+      ((#:phases phases)
+       `(modify-phases ,phases
+          (add-before 'unpack-heads-packages 'unpack-linuxboot
+            (lambda* (#:key inputs #:allow-other-keys)
+               (mkdir-p "build")
+               (copy-recursively (assoc-ref inputs "linuxboot") "build/linuxboot-git")
+               (copy-recursively (assoc-ref inputs "edk2") "build/linuxboot-git/edk2")
+               (invoke "chmod" "-R" "u+w" "build/linuxboot-git")
+               (chmod "build/linuxboot-git/Makefile" #o664)
+               (substitute* "build/linuxboot-git/dxe/Makefile"
+                (("/usr/bin/") ""))
+               #t))))))
+    (native-inputs
+     `(("edk2"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/linuxboot/edk2")
+                   (commit "UDK2018")
+                   (recursive? #t))) ; openssl
+             (file-name "edk2-checkout")
+             (sha256
+              (base32 "0crjx1hg1m5mir2qm96dbcc3glrnww3ni0bc9f370qmm337wzlhi"))))
+       ("libuuid" ,util-linux) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("nasm" ,nasm) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("python" ,python-2) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("acpica" ,acpica) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("file" ,file)
+       ("linuxboot"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/osresearch/linuxboot.git")
+                   (commit "b5376a441e8e85cbf722e943bb8294958e87c784")
+                   (recursive? #t)))
+             (file-name "linuxboot-checkout")
+             (sha256
+              (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
+       ,@(package-native-inputs heads)))))
D
D
Danny Milosavljevic wrote on 24 Sep 2019 16:01
[WIP v2 2/7] gnu: Add heads.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190924140157.23564-3-dannym@scratchpost.org
* gnu/packages/heads.scm (heads): New variable.
* gnu/packages/patches/heads-make-environment.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/heads.scm | 385 +++++++++++++++
.../patches/heads-make-environment.patch | 446 ++++++++++++++++++
3 files changed, 832 insertions(+)
create mode 100644 gnu/packages/patches/heads-make-environment.patch

Toggle diff (875 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 2ca70bdeaf..b2f801b05f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -947,6 +947,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/hdf-eos5-remove-gctp.patch		\
   %D%/packages/patches/hdf-eos5-fix-szip.patch			\
   %D%/packages/patches/hdf-eos5-fortrantests.patch		\
+  %D%/packages/patches/heads-make-environment.patch		\
   %D%/packages/patches/higan-remove-march-native-flag.patch	\
   %D%/packages/patches/hubbub-sort-entities.patch		\
   %D%/packages/patches/hurd-fix-eth-multiplexer-dependency.patch        \
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index b547a374e0..94764e9a1f 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -4,8 +4,12 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix utils)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages assembly)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages flex)
@@ -13,8 +17,11 @@
   #:use-module (gnu packages elf)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages cpio)
+  #:use-module (gnu packages file)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages virtualization))
@@ -122,3 +129,381 @@ done
     (synopsis "Musl-cross gcc 5 toolchain")
     (description "Musl-cross toolchain: binutils, gcc 5 and musl.")
     (license license:isc))))
+
+(define heads
+  (let ((revision "1")
+        (commit "b7f2249b665705939dc4eca67d11553c72164f4b"))
+  (package
+    (name "heads")
+    (version (git-version "0.1" revision commit))
+    (source
+     (origin
+      (method git-fetch)
+      (uri (git-reference
+             (url "https://github.com/osresearch/heads.git")
+             (commit commit)))
+      (file-name (git-file-name name version))
+      (sha256
+       (base32
+        "0sgyqm4ss88hfp8miz40mw40kj7qp2khr7jcvscwv87bd5g9nwnx"))
+      (patches (search-patches "heads-make-environment.patch"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bash" ,bash)
+       ("git" ,git)
+       ("perl" ,perl)
+       ("cpio" ,cpio)
+       ("m4" ,m4)
+       ("bison" ,bison)
+       ("flex" ,flex)
+       ("curl" ,curl) ; unused
+       ("zlibx" ,zlib)
+       ("musl-cross" ,musl-cross)
+       ("elfutils" ,elfutils)
+       ("bc" ,bc)
+       ("findutils" ,findutils)
+       ("flashtools"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/flashtools.git")
+                 (commit "9acce09aeb635c5bef01843e495b95e75e8da135")))
+           (file-name "flashtools-checkout")
+           (sha256
+            (base32 "0r4gj3nzr67ycd39k1vjzxfzkp90yacrdgxhc1z5jfvxfq4x91c1"))))
+       ("tpmtotp"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/tpmtotp.git")
+                 (commit "18b860fdcf5a55537c8395b891f2b2a5c24fc00a")))
+           (file-name "tpmtotp-checkout")
+           (sha256
+            (base32 "112p5afkrbipr0d8x9r9mrxrr3xyf97s2y3f32p41vs951sksqnv"))))
+       ("msrtools"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/msr-tools.git")
+                 (commit "572ef8a2b873eda15a322daa48861140a078b92c")))
+           (file-name "msr-tools-checkout")
+           (sha256
+            (base32 "0an1ypj5pin9l413vn4gxzi3x6ir1rba9jv6n5gk6s9dq803lb6p"))))
+       ("coreboot-blobs"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-blobs-4.8.1.tar.xz")
+           (sha256
+            (base32 "15g222xj1zdn8i8qz0pw2jf28h66dljb1q5isw2ml05gwfd51ahq"))))
+       ("coreboot"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-4.8.1.tar.xz")
+           (sha256
+            (base32 "08xdd5drk8yd37a3z5hc81qmgsybv6201i28hcggxh980vdz9pgh"))))
+       ("linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.62.tar.xz")
+           (sha256
+            (base32 "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji"))))
+       ("musl" ; useless
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.musl-libc.org/releases/musl-1.1.15.tar.gz")
+           (sha256
+            (base32 "1ymhxkskivzph0q34zadwfglc5gyahqajm7chqqn2zraxv3lgr4p"))))
+       ("busybox"
+        ,(origin
+           (method url-fetch)
+           (uri "https://busybox.net/downloads/busybox-1.28.0.tar.bz2")
+           (sha256
+            (base32 "1701carjf02y7r3djm1yvyd5kzrcxm4szinp7agfv7fmvfvm6ib0"))))
+       ("zlib"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.zlib.net/zlib-1.2.11.tar.gz")
+           (sha256
+            (base32 "18dighcs333gsvajvvgqp8l4cx7h1x7yx9gd5xacnk80spyykrf3"))))
+       ("mbedtls"
+        ,(origin
+           (method url-fetch)
+           (uri "https://tls.mbed.org/download/mbedtls-2.4.2-gpl.tgz")
+           (sha256
+            (base32 "17r9qs585gqghcf5yavb1cnvsigl0f8r0k8rklr5a855hrajs7yh"))))
+       ("kexec-tools"
+        ,(origin
+           (method url-fetch)
+           (uri "https://kernel.org/pub/linux/utils/kernel/kexec/kexec-tools-2.0.16.tar.gz")
+           (sha256
+            (base32 "0fkg5y3wxvkqrjii90iz1i59qd6hhq7ar27f0sgv7jbppyczq5yg"))))
+       ("qrencode"
+        ,(origin
+           (method url-fetch)
+           (uri "https://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz")
+           (sha256
+            (base32 "0wiagx7i8p9zal53smf5abrnh9lr31mv0p36wg017401jrmf5577"))))
+       ("pciutils"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/software/utils/pciutils/pciutils-3.5.4.tar.xz")
+           (sha256
+            (base32 "0rpy7kkb2y89wmbcbfjjjxsk2x89v5xxhxib4vpl131ip5m3qab4"))))
+       ("util-linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/util-linux/v2.29/util-linux-2.29.2.tar.xz")
+           (sha256
+            (base32 "1qz81w8vzrmy8xn9yx7ls4amkbgwx6vr62pl6kv9g7r0g3ba9kmc"))))
+       ("flashrom"
+        ,(origin
+           (method url-fetch)
+           (uri "https://download.flashrom.org/releases/flashrom-1.0.tar.bz2")
+           (sha256
+            (base32 "0r7fkpfc8w51n8ffbhclj4wa3kwrk0ijv1acwpw5myx5bchzl0ip"))))
+       ("popt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://launchpad.net/popt/head/1.16/+download/popt-1.16.tar.gz")
+           (sha256
+            (base32 "1j2c61nn2n351nhj4d25mnf3vpiddcykq005w2h6kw79dwlysa77"))))
+       ("lvm2"
+        ,(origin
+           (method url-fetch)
+           (uri "https://mirrors.kernel.org/sourceware/lvm2/LVM2.2.02.168.tgz")
+           (sha256
+            (base32 "03b62hcsj9z37ckd8c21wwpm07s9zblq7grfh58yzcs1vp6x38r3"))))
+       ("cryptsetup"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/cryptsetup/v1.7/cryptsetup-1.7.3.tar.xz")
+           (sha256
+            (base32 "00nwd96m9yq4k3cayc04i5y7iakkzana35zxky6hpx2w8zl08axg"))))
+       ("libgpg-error"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.32.tar.bz2")
+           (sha256
+            (base32 "1jj08ns4sh1hmafqp1giskvdicdz18la516va26jycy27kkwaif3"))))
+       ("libgcrypt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.3.tar.bz2")
+           (sha256
+            (base32 "0z5gs1khzyknyfjr19k8gk4q148s6q987ya85cpn0iv70fz91v36"))))
+       ("libksba"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libksba/libksba-1.3.5.tar.bz2")
+           (sha256
+            (base32 "0h53q4sns1jz1pkmhcz5wp9qrfn9f5g9i3vjv6dafwzzlvblyi21"))))
+       ("libassuan"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libassuan/libassuan-2.5.1.tar.bz2")
+           (sha256
+            (base32 "0jb4nb4nrjr949gd3lw8lh4v5d6qigxaq6xwy24w5apjnhvnrya7"))))
+       ("npth"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/npth/npth-1.6.tar.bz2")
+           (sha256
+            (base32 "1lg2lkdd3z1s3rpyf88786l243adrzyk9p4q8z9n41ygmpcsp4qk"))))
+       ("libusb"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.21/libusb-1.0.21.tar.bz2")
+           (sha256
+            (base32 "0jw2n5kdnrqvp7zh792fd6mypzzfap6jp4gfcmq4n6c1kb79rkkx"))))
+       ("libusb-compat"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-compat-0.1/libusb-compat-0.1.5/libusb-compat-0.1.5.tar.bz2")
+           (sha256
+            (base32 "0nn5icrfm9lkhzw1xjvaks9bq3w6mjg86ggv3fn7kgi4nfvg8kj0"))))
+       ("dropbear"
+        ,(origin
+           (method url-fetch)
+           (uri "https://matt.ucc.asn.au/dropbear/releases/dropbear-2016.74.tar.bz2")
+           (sha256
+            (base32 "14c8f4gzixf0j9fkx68jgl85q7b05852kk0vf09gi6h0xmafl817"))))
+       ("pinentry"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/pinentry/pinentry-1.1.0.tar.bz2")
+           (sha256
+            (base32 "0w35ypl960pczg5kp6km3dyr000m1hf0vpwwlh72jjkjza36c1v8"))))
+       ("gnupg"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.10.tar.bz2")
+           (sha256
+            (base32 "05f9804g72pffdxgvxjmjzkfcpjg1x221g9rwcr8fi51hrxd77br"))))
+       ("slang"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.jedsoft.org/releases/slang/slang-2.3.1a.tar.bz2")
+           (sha256
+            (base32 "0dlcy0hn0j6cj9qj5x6hpb0axifnvzzmv5jqq0wq14fygw0c7w2l"))))
+       ("newt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://releases.pagure.org/newt/newt-0.52.20.tar.gz")
+           (sha256
+            (base32 "1g3dpfnvaw7vljbr7nzq1rl88d6r8cmrvvng9inphgzwxxmvlrld"))))
+
+       ;;; coreboot cross; FIXME: Extract.
+
+       ("gmp"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gmp/gmp-6.1.2.tar.xz")
+           (sha256
+            (base32 "04hrwahdxyqdik559604r7wrj9ffklwvipgfxgj4ys4skbl6bdc7"))))
+       ("mpfr"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/mpfr/mpfr-3.1.5.tar.xz")
+           (sha256
+            (base32 "1g32l2fg8f62lcyzzh88y3fsh6rk539qc6ahhdgvx7wpnf1dwpq1"))))
+       ("mpc"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/mpc/mpc-1.0.3.tar.gz")
+           (sha256
+            (base32 "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))
+       ("binutils-2.30"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/binutils/binutils-2.30.tar.xz")
+           (sha256
+            (base32 "1rhshw4m5m2pjz8g15hpiwhp52kn0pj0b5dxy0v7lwigmspbhikf"))))
+       ("gcc-8"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gcc/gcc-8.1.0/gcc-8.1.0.tar.xz")
+           (sha256
+            (base32 "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x"))))
+       ;; Note: Non-coreboot heads really doesn't need that.
+       ("acpica-coreboot"
+        ,(origin
+           (method url-fetch)
+           (uri "https://acpica.org/sites/acpica/files/acpica-unix2-20180531.tar.gz")
+           (sha256
+            (base32 "0q7vg1nr51f3rg16vjh4glz361a64r6gpm46fqkl2jf4fq7g43g5"))))))
+    (arguments
+     `(#:tests? #f ; Toplevel makefile has no tests.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; For edk2.
+             (setenv "BUILD_CC" "gcc") ; FIXME: musl *musl-cross*/x86_64-linux-musl/bin/x86_64-linux-musl-gcc || ./x86_64-linux-musl/x86_64-linux-musl/bin/musl-gcc.
+             ;; busybox needs the original values (for VERY few tools, but more than 0).
+             ;; Disable wget.
+             (setenv "WGET" "true")
+             ;; Work around mcheck.h problem (in glibc!?)
+             (substitute* "modules/popt"
+              (("[.]/configure") "CFLAGS=\"-D__END_DECLS -D__BEGIN_DECLS -D__THROW\" ./configure"))
+             #t))
+         (add-after 'unpack 'unpack-heads-packages
+           (lambda* (#:key inputs #:allow-other-keys)
+             (define (install-file* source-key destination-directory destination-suffix)
+               (let* ((source-file (assoc-ref inputs source-key))
+                      (source-basename (basename source-file))
+                      (source-parts (string-split source-basename #\-))
+                      (drop (@ (srfi srfi-1) drop))
+                      (destination-file
+                       (string-join (drop source-parts 1) "-")))
+                 (copy-file source-file
+                  (string-append destination-directory "/"
+                                 destination-file destination-suffix))
+                 ;(invoke "tar" "-xf" source-file "-C" "build")
+))
+             (mkdir-p "packages")
+             (setenv "GUIX_C_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
+             (setenv "GUIX_CPLUS_INCLUDE_PATH" (getenv "CPLUS_INCLUDE_PATH"))
+             (setenv "GUIX_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
+             (setenv "GUIX_CPATH" (getenv "CPATH"))
+             (for-each (lambda (name)
+                         (install-file* name "packages" ".tmp"))
+                       '("linux" "coreboot-blobs" "coreboot" "busybox" "zlib" "mbedtls" "kexec-tools" "qrencode" "pciutils" "util-linux" "flashrom" "popt" "lvm2" "cryptsetup" "libgpg-error" "libgcrypt" "libksba" "libassuan" "npth" "libusb" "libusb-compat" "dropbear" "pinentry" "gnupg" "slang" "newt" "musl"))
+             (mkdir-p "build")
+             (mkdir-p "build/musl-cross-git/tarballs")
+             (mkdir-p "build/coreboot-4.8.1/util/crossgcc/tarballs")
+             (for-each (lambda (name)
+                         (install-file* name "build/coreboot-4.8.1/util/crossgcc/tarballs" ""))
+                       '("gmp" "mpfr" "mpc" "binutils-2.30" "gcc-8" "acpica-coreboot"))
+             (copy-recursively (assoc-ref inputs "musl-cross") "build/musl-cross-git")
+             (copy-recursively (assoc-ref inputs "tpmtotp") "build/tpmtotp-git")
+             (copy-recursively (assoc-ref inputs "flashtools") "build/flashtools-0.0.1")
+             (copy-recursively (assoc-ref inputs "msrtools") "build/msrtools-git")
+
+             (setenv "MUSL_DIR" (assoc-ref inputs "musl-cross"))
+             (setenv "CROSS" (string-append (getenv "MUSL_DIR") "/crossgcc/x86_64-linux-musl/bin/x86_64-musl-linux-")) ; Note: Useless
+             (substitute* "Makefile"
+              ;; Disable our non-cross toolchain environment.
+              (("CROSS_TOOLS_NOCC := ")
+               ; CPP=" (getenv "CROSS") "cpp CXXCPP=" (getenv "CROSS") "cpp "
+               (string-append "CROSS_TOOLS_NOCC := C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH= CPATH= "))
+              ;; Disable git.
+              (("git submodule update --init")
+               "true submodule update --init")
+              ;; Re-enable our non-cross toolchain environment selectively.
+              (("^WGET.*")
+               (string-append "HOSTCC =" ; for busybox
+                              " C_INCLUDE_PATH=" (or (getenv "GUIX_C_INCLUDE_PATH") "")
+                              " CPLUS_INCLUDE_PATH=" (or (getenv "GUIX_CPLUS_INCLUDE_PATH") "")
+                              " CPATH=" (or (getenv "GUIX_CPATH") "")
+                              " LIBRARY_PATH=" (or (getenv "GUIX_LIBRARY_PATH") "")
+                              " gcc\n"
+                              "CC_FOR_BUILD = $(HOSTCC)\n" ; for libgpg-error
+                              "BUILD_CC = $(HOSTCC)\n")) ; for kexec-tools
+              ;; Disable git, patch shebangs, and selectively re-enable host compiler.
+              (("(git clone.*)." _ tar)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' \"$$$$s\" ; fi ; done)
+" "true" (assoc-ref inputs "bash") (assoc-ref inputs "bash") (assoc-ref inputs "bash")))
+              (("(tar -xf.*)." _ tar)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' \"$$$$s\" ; fi ; done)
+" tar (assoc-ref inputs "bash") (assoc-ref inputs "bash") (assoc-ref inputs "bash"))))
+             ;(substitute* "modules/musl-cross"
+             ; (("/bin/echo") "echo"))
+             (call-with-output-file "patches/coreboot-4.8.1/9999-shell.patch"
+               (lambda (port)
+                 (format port "--- coreboot-4.8.1/util/crossgcc/buildgcc.orig 2019-09-13 14:45:12.463998974 +0200
++++ coreboot-4.8.1/util/crossgcc/buildgcc 2019-09-13 14:46:49.808268216 +0200
+@@ -462,6 +462,13 @@
+ 			}
+ 		done
+ 		touch \"${dir}/.unpack_success\"
++  for s in \"${dir}/Makefile\" \"${dir}/configure\" \"${dir}/config.sub\" \"${dir}/config.guess\" \"${dir}/mpn/cpp-ccas\" \"${dir}/mpn/m4-ccas\" \"${dir}/missing\" \"${dir}/\"*\"/configure\" \"${dir}/move-if-change\" \"${dir}/libgcc/mkheader.sh\" \"${dir}/gcc/genmultilib\"
++  do
++   if [ -f \"${s}\" ]
++   then
++    sed -i -e 's;/bin/sh\\>;~a/bin/sh;' \"${s}\"
++   fi
++  done
+ 	)
+ }
+ 
+" (assoc-ref inputs "bash"))))
+             #t))
+         (add-after 'install 'install-images
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (make-flags-assoc (map (lambda (x)
+                                             (string-split x #\=))
+                                           make-flags))
+                    (BOARD (car (assoc-ref make-flags-assoc "BOARD")))
+                    (out-images (string-append out "/libexec/heads/" BOARD "/images")))
+               (mkdir-p out-images)
+               (copy-recursively (string-append "build/" BOARD) out-images)
+               ;; Contains timestamp.
+               (delete-file (string-append out-images "/hashes.txt"))
+               #t))))))
+    (home-page "https://github.com/osresearch/heads")
+    (synopsis "Heads: coreboot/LinuxBoot payload")
+    (description "A minimal Linux that runs as a coreboot or LinuxBoot ROM
+payload to provide a secure, flexible boot environment for laptops and
+servers.")
+    (license license:gpl2+))))
diff --git a/gnu/packages/patches/heads-make-environment.patch b/gnu/packages/patches/heads-make-environment.patch
new file mode 100644
index 0000000000..f38d08ee51
--- /dev/null
+++ b/gnu/packages/patches/heads-make-environment.patch
@@ -0,0 +1,446 @@
+diff --git a/Makefile b/Makefile
+index cc5cac6..ae8d7e7 100644
+--- a/Makefile
++++ b/Makefile
+@@ -124,10 +124,14 @@ CROSS_TOOLS_NOCC := \
+ 
+ CROSS_TOOLS := \
+ 	CC="$(heads_cc)" \
++	CPP="$(CROSS)cpp" \
++	CXXCPP="$(CROSS)cpp" \
++	CC_FOR_BUILD="$(CC_FOR_BUILD)" \
++	BUILD_CC="$(BUILD_CC)" \
++	HOSTCC="$(HOSTCC)" \
+ 	$(CROSS_TOOLS_NOCC) \
+ 
+ 
+-
+ ifeq "$(CONFIG_COREBOOT)" "y"
+ all: $(build)/$(BOARD)/coreboot.rom
+ else ifeq "$(CONFIG_LINUXBOOT)" "y"
+@@ -348,7 +352,7 @@ define define_module =
+ 		echo "$(MAKE) \
+ 			-C \"$(build)/$($1_dir)\" \
+ 			$($1_target)" ;  \
+-		$(MAKE) \
++		$($1_make_environment) $(MAKE) \
+ 			-C "$(build)/$($1_dir)" \
+ 			$($1_target)  \
+ 	) \
+@@ -453,7 +457,7 @@ $(COREBOOT_UTIL_DIR)/inteltool/inteltool \
+ : $(build)/$(coreboot_base_dir)/.canary \
+ 	$(build)/$(musl_dir)/.build
+ 	+$(call do,MAKE,$(notdir $@),\
+-		$(MAKE) -C "$(dir $@)" $(CROSS_TOOLS) \
++		CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH= $(MAKE) -C "$(dir $@)" $(CROSS_TOOLS) \
+ 	)
+ 
+ # superio depends on zlib and pciutils
+diff --git a/modules/busybox b/modules/busybox
+index f8f8a83..4836780 100644
+--- a/modules/busybox
++++ b/modules/busybox
+@@ -11,6 +11,7 @@ busybox_hash := 604553b7dbd59ded9e3ad7c6af49ed2cff599adf3e54d9463e5e0027b362019c
+ busybox_configure := $(MAKE) CC="$(heads_cc)" oldconfig
+ busybox_config := config/busybox.config
+ busybox_output := busybox
++busybox_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ busybox_target := \
+ 	$(CROSS_TOOLS) \
+ 	$(MAKE_JOBS) \
+diff --git a/modules/cairo b/modules/cairo
+index 647ed2c..00f6cac 100644
+--- a/modules/cairo
++++ b/modules/cairo
+@@ -23,6 +23,7 @@ cairo_configure := \
+ 	&& mv libtool-2 libtool \
+ 	&& chmod 755 libtool
+ 
++cairo_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ cairo_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/cryptsetup b/modules/cryptsetup
+index 4cea7f3..d68da0c 100644
+--- a/modules/cryptsetup
++++ b/modules/cryptsetup
+@@ -20,6 +20,7 @@ cryptsetup_configure := ./configure \
+ 
+ # but after building, replace prefix so that they will be installed
+ # in the correct directory.
++cryptsetup_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ cryptsetup_target := \
+ 	$(MAKE_JOBS) \
+ 	&& $(MAKE) \
+diff --git a/modules/dropbear b/modules/dropbear
+index 998087c..834a3ef 100644
+--- a/modules/dropbear
++++ b/modules/dropbear
+@@ -19,6 +19,7 @@ dropbear_configure := ./configure \
+ 	--disable-wtmpx \
+ 	
+ dropbear_output := ssh scp dropbear
++dropbear_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ dropbear_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/fbwhiptail b/modules/fbwhiptail
+index f54a62d..1359677 100644
+--- a/modules/fbwhiptail
++++ b/modules/fbwhiptail
+@@ -6,6 +6,7 @@ fbwhiptail_version := git
+ fbwhiptail_dir := fbwhiptail
+ fbwhiptail_repo := https://source.puri.sm/coreboot/fbwhiptail.git
+ 
++fbwhiptail_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ fbwhiptail_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/flashrom b/modules/flashrom
+index 0a29b18..d695818 100644
+--- a/modules/flashrom
++++ b/modules/flashrom
+@@ -11,6 +11,7 @@ flashrom_tar := flashrom-$(flashrom_version).tar.bz2
+ flashrom_url := https://download.flashrom.org/releases/$(flashrom_tar)
+ flashrom_hash := 3702fa215ba5fb5af8e54c852d239899cfa1389194c1e51cb2a170c4dc9dee64
+ 
++flashrom_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ flashrom_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/flashtools b/modules/flashtools
+index d95c215..090362c 100644
+--- a/modules/flashtools
++++ b/modules/flashtools
+@@ -11,6 +11,7 @@ flashtools_tar := flashtools-$(flashtools_version).tar.gz
+ flashtools_url := https://github.com/osresearch/flashtools/archive/v$(flashtools_version).tar.gz
+ flashtools_hash := e8205aa3d19e536080f5974ed06ab9a88c4c3f37870c2f6a3a08a2f39302c22c
+ 
++flashtools_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ flashtools_target := \
+ 	$(CROSS_TOOLS) \
+ 	CFLAGS="-I$(INSTALL)/include" \
+diff --git a/modules/frotz b/modules/frotz
+index 611e04a..e2c2e22 100644
+--- a/modules/frotz
++++ b/modules/frotz
+@@ -8,6 +8,7 @@ frotz_hash := dbb5eb3bc95275dcb984c4bdbaea58bc1f1b085b20092ce6e86d9f0bf3ba858f
+ 
+ frotz_configure := touch .config
+ 
++frotz_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ frotz_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/gpg b/modules/gpg
+index 4d4440a..6a48664 100644
+--- a/modules/gpg
++++ b/modules/gpg
+@@ -39,6 +39,7 @@ gpg_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++gpg_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ gpg_target := $(MAKE_JOBS) \
+ 	&& $(MAKE) -C $(build)/$(gpg_dir) \
+ 		DESTDIR="$(INSTALL)" \
+diff --git a/modules/gpg2 b/modules/gpg2
+index 318a4cd..522e518 100644
+--- a/modules/gpg2
++++ b/modules/gpg2
+@@ -50,6 +50,7 @@ gpg2_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++gpg2_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ gpg2_target := $(MAKE_JOBS) \
+ 	&& $(MAKE) -C $(build)/$(gpg2_dir) \
+ 		DESTDIR="$(INSTALL)" \
+diff --git a/modules/kexec b/modules/kexec
+index d2311c2..b507d81 100644
+--- a/modules/kexec
++++ b/modules/kexec
+@@ -14,6 +14,7 @@ kexec_configure := ./configure \
+ 	--without-lzma \
+ 	&& $(MAKE) clean
+ 
++kexec_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ kexec_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libassuan b/modules/libassuan
+index 3c4e319..6138ec2 100644
+--- a/modules/libassuan
++++ b/modules/libassuan
+@@ -14,6 +14,7 @@ libassuan_configure := ./configure \
+ 	--with-libgpg-error-prefix="$(INSTALL)" \
+ 	--disable-asm \
+ 
++libassuan_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libassuan_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libgcrypt b/modules/libgcrypt
+index aa7e1ef..384f672 100644
+--- a/modules/libgcrypt
++++ b/modules/libgcrypt
+@@ -14,6 +14,7 @@ libgcrypt_configure := ./configure \
+ 	--disable-asm \
+ 	--disable-nls \
+ 	
++libgcrypt_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libgcrypt_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libgpg-error b/modules/libgpg-error
+index 752e11a..3d4d217 100644
+--- a/modules/libgpg-error
++++ b/modules/libgpg-error
+@@ -16,6 +16,7 @@ libgpg-error_configure := ./configure \
+ 	--disable-tests \
+ 	--disable-asm \
+ 
++libgpg-error_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH= CC_FOR_BUILD="$(CC_FOR_BUILD)"
+ libgpg-error_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libksba b/modules/libksba
+index d352913..bd1835b 100644
+--- a/modules/libksba
++++ b/modules/libksba
+@@ -14,6 +14,7 @@ libksba_configure := ./configure \
+ 	--with-libgpg-error-prefix="$(INSTALL)" \
+ 	--disable-asm \
+ 
++libksba_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libksba_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libpng b/modules/libpng
+index d6d9e65..33306e2 100644
+--- a/modules/libpng
++++ b/modules/libpng
+@@ -12,6 +12,7 @@ libpng_configure := \
+         --host i386-elf-linux \
+ 	--prefix="/" \
+ 
++libpng_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libpng_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libremkey-hotp-verification b/modules/libremkey-hotp-verification
+index c9b9d45..e7fab7d 100644
+--- a/modules/libremkey-hotp-verification
++++ b/modules/libremkey-hotp-verification
+@@ -6,6 +6,7 @@ libremkey-hotp-verification_version := git
+ libremkey-hotp-verification_dir := libremkey-hotp-verification
+ libremkey-hotp-verification_repo := --recursive https://github.com/Nitrokey/nitrokey-hotp-verification
+ 
++libremkey-hotp-verification_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libremkey-hotp-verification_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libusb b/modules/libusb
+index b7fe959..fe274e9 100644
+--- a/modules/libusb
++++ b/modules/libusb
+@@ -19,6 +19,7 @@ libusb_configure := ./configure\
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
+ 
++libusb_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libusb_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libusb-compat b/modules/libusb-compat
+index f95854e..78033ef 100644
+--- a/modules/libusb-compat
++++ b/modules/libusb-compat
+@@ -22,6 +22,7 @@ libusb-compat_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++libusb-compat_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libusb-compat_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/lvm2 b/modules/lvm2
+index 91f0f53..def7544 100644
+--- a/modules/lvm2
++++ b/modules/lvm2
+@@ -34,6 +34,7 @@ lvm2_configure := \
+ 	--with-cluster=none \
+ 
+ # not sure why LIB_SUFFIX is not defined in the cross build
++lvm2_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ lvm2_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/mbedtls b/modules/mbedtls
+index d844b16..2611866 100644
+--- a/modules/mbedtls
++++ b/modules/mbedtls
+@@ -10,6 +10,7 @@ mbedtls_libraries := library/libmbedcrypto.so.0
+ 
+ mbedtls_configure :=
+ 
++mbedtls_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ mbedtls_target := \
+ 	SHARED=1 \
+ 	DESTDIR=$(INSTALL) \
+diff --git a/modules/msrtools b/modules/msrtools
+index 9adfab0..85b5954 100644
+--- a/modules/msrtools
++++ b/modules/msrtools
+@@ -11,6 +11,7 @@ msrtools_tar := msr-tools-$(msrtools_version).tar.gz
+ msrtools_url := https://github.com/intel/msr-tools/archive/msr-tools-$(msrtools_version).tar.gz
+ msrtools_hash := e8205aa3d19e536080f5974ed06ab9a88c4c3f37870c2f6a3a08a2f39302c22c
+ 
++msrtools_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ msrtools_target := \
+ 	$(CROSS_TOOLS) \
+ 	CFLAGS="-I$(INSTALL)/include" \
+diff --git a/modules/musl b/modules/musl
+index eec76de..89b9a0f 100644
+--- a/modules/musl
++++ b/modules/musl
+@@ -24,6 +24,7 @@ musl_configure := ./configure \
+ 	--enable-gcc-wrapper \
+ 	--enable-shared \
+ 
++musl_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ musl_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS_NOCC) \
+diff --git a/modules/newt b/modules/newt
+index cc6341d..bad67c7 100644
+--- a/modules/newt
++++ b/modules/newt
+@@ -8,6 +8,7 @@ newt_tar := newt-$(newt_version).tar.gz
+ newt_url := https://releases.pagure.org/newt/$(newt_tar)
+ newt_hash := 8d66ba6beffc3f786d4ccfee9d2b43d93484680ef8db9397a4fb70b5adbb6dbc
+ 
++newt_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ newt_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/npth b/modules/npth
+index e0f30c6..a43d626 100644
+--- a/modules/npth
++++ b/modules/npth
+@@ -14,6 +14,7 @@ npth_configure := ./configure \
+ 	--with-libgpg-error-prefix="$(INSTALL)" \
+ 	--disable-asm \
+ 
++npth_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ npth_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/pciutils b/modules/pciutils
+index 2ea5b9b..dfee3a0 100644
+--- a/modules/pciutils
++++ b/modules/pciutils
+@@ -16,6 +16,7 @@ pciutils_hash := 64293c6ab9318c40ef262b76d87bd9097531759752bac556e50979b1e63cfe6
+ # reproducible.  Otherwise the build path will be embedded
+ # in the library and executables.
+ 
++pciutils_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ pciutils_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/pinentry b/modules/pinentry
+index c0e93d7..a541ce0 100644
+--- a/modules/pinentry
++++ b/modules/pinentry
+@@ -33,6 +33,7 @@ pinentry_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++pinentry_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ pinentry_target := $(MAKE_JOBS) \
+ 	&& $(MAKE) -C $(build)/$(pinentry_dir) \
+ 		DESTDIR="$(INSTALL)" \
+diff --git a/modules/pixman b/modules/pixman
+index 65a2e20..198f8ac 100644
+--- a/modules/pixman
++++ b/modules/pixman
+@@ -13,6 +13,7 @@ pixman_configure := \
+ 	--prefix="/" \
+ 	--disable-gtk
+ 
++pixman_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ pixman_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/popt b/modules/popt
+index b3b0b04..242ae03 100644
+--- a/modules/popt
++++ b/modules/popt
+@@ -11,6 +11,7 @@ popt_configure := ./configure \
+ 	--prefix "/" \
+ 	--host i386-elf-linux \
+ 
++popt_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ popt_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/qrencode b/modules/qrencode
+index fb73c7b..afded70 100644
+--- a/modules/qrencode
++++ b/modules/qrencode
+@@ -14,6 +14,7 @@ qrencode_configure := ./configure \
+ 	--without-tools \
+ 	--host i386-elf-linux \
+ 
++qrencode_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ qrencode_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/slang b/modules/slang
+index a4ac84b..a338639 100644
+--- a/modules/slang
++++ b/modules/slang
+@@ -18,6 +18,7 @@ slang_configure := ./configure \
+   && mkdir -p src/elfobjs
+ 
+ # Disable parallel make for the install target
++slang_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ slang_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/tpmtotp b/modules/tpmtotp
+index 792dd51..02c6c10 100644
+--- a/modules/tpmtotp
++++ b/modules/tpmtotp
+@@ -11,6 +11,7 @@ tpmtotp_tar := tpmtotp-$(tpmtotp_version).tar.gz
+ tpmtotp_url := https://github.com/osresearch/tpmtotp/archive/v$(tpmtotp_version).tar.gz
+ tpmtotp_hash := e8205aa3d19e536080f5974ed06ab9a88c4c3f37870c2f6a3a08a2f39302c22c
+ 
++tpmtotp_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ tpmtotp_target := \
+ 	$(CROSS_TOOLS) \
+ 	CFLAGS="-I$(INSTALL)/include" \
+diff --git a/modules/util-linux b/modules/util-linux
+index e3377f6..a50bf40 100644
+--- a/modules/util-linux
++++ b/modules/util-linux
+@@ -22,6 +22,7 @@ util-linux_configure := ./configure \
+ 	--enable-libblkid \
+ 
+ 
++util-linux_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ util-linux_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/zlib b/modules/zlib
+index dbdb44e..a6290b2 100644
+--- a/modules/zlib
++++ b/modules/zlib
+@@ -12,6 +12,7 @@ zlib_configure := \
+ 	./configure \
+ 	--prefix="/" \
+ 
++zlib_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ zlib_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
D
D
Danny Milosavljevic wrote on 24 Sep 2019 16:01
[WIP v2 4/7] gnu: Add heads-qemu-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190924140157.23564-5-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-qemu-linuxboot): New variable.
---
gnu/packages/heads.scm | 9 +++++++++
1 file changed, 9 insertions(+)

Toggle diff (17 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 72565531e3..8982dc1fd3 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -553,3 +553,12 @@ servers.")
              (sha256
               (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
        ,@(package-native-inputs heads)))))
+
+(define-public heads-qemu-linuxboot
+  (package
+    (inherit heads-linuxboot)
+    (name "heads-qemu-linuxboot")
+    (arguments
+     `(#:make-flags
+       '("BOARD=qemu-linuxboot")
+       ,@(package-arguments heads-linuxboot)))))
D
D
Danny Milosavljevic wrote on 24 Sep 2019 16:01
[WIP v2 6/7] gnu: Add heads-qemu-coreboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190924140157.23564-7-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-qemu-coreboot): New variable.
---
gnu/packages/heads.scm | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

Toggle diff (27 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index ef1748b992..8436bf2880 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -24,7 +24,8 @@
   #:use-module (gnu packages file)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages version-control)
-  #:use-module (gnu packages virtualization))
+  #:use-module (gnu packages virtualization)
+  #:use-module ((guix build utils) #:select (alist-replace)))
 
 (define-public musl-cross
   (let ((revision "1")
@@ -578,3 +579,12 @@ servers.")
     (native-inputs
      `(("file" ,file)
        ,@(package-native-inputs heads)))))
+
+(define-public heads-qemu-coreboot
+  (package
+    (inherit heads-coreboot)
+    (name "heads-qemu-coreboot")
+    (arguments
+     `(#:make-flags
+       '("BOARD=qemu-coreboot")
+       ,@(package-arguments heads-coreboot)))))
D
D
Danny Milosavljevic wrote on 24 Sep 2019 16:01
[WIP v2 5/7] gnu: Add heads-coreboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190924140157.23564-6-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-coreboot): New variable.
---
gnu/packages/heads.scm | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

Toggle diff (24 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 8982dc1fd3..ef1748b992 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -562,3 +562,19 @@ servers.")
      `(#:make-flags
        '("BOARD=qemu-linuxboot")
        ,@(package-arguments heads-linuxboot)))))
+
+(define heads-coreboot
+  (package
+    (inherit heads)
+    (name "heads-coreboot")
+    (arguments
+     (substitute-keyword-arguments (package-arguments heads)
+      ((#:phases phases)
+       `(modify-phases ,phases
+          (add-before 'unpack-heads-packages 'unpack-coreboot
+            (lambda* (#:key inputs #:allow-other-keys)
+               (mkdir-p "build")
+               #t))))))
+    (native-inputs
+     `(("file" ,file)
+       ,@(package-native-inputs heads)))))
D
D
Danny Milosavljevic wrote on 24 Sep 2019 16:01
[WIP v2 7/7] gnu: Add heads-kgpe-d16.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190924140157.23564-8-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-kgpe-d16): New variable.
---
gnu/packages/heads.scm | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

Toggle diff (25 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 8436bf2880..9128a4f426 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -588,3 +588,20 @@ servers.")
      `(#:make-flags
        '("BOARD=qemu-coreboot")
        ,@(package-arguments heads-coreboot)))))
+
+(define-public heads-kgpe-d16
+  (package
+    (inherit heads-coreboot)
+    (name "heads-kgpe-d16")
+    (native-inputs
+     (alist-replace "gnupg"
+       (list (origin
+         (method url-fetch)
+         (uri "https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-1.4.21.tar.bz2")
+         (sha256
+          (base32 "0xi2mshq8f6zbarb5f61c9w2qzwrdbjm4q8fqsrwlzc51h8a6ivb"))))
+      (package-native-inputs heads-coreboot)))
+    (arguments
+     `(#:make-flags
+       '("BOARD=kgpe-d16")
+       ,@(package-arguments heads-coreboot)))))
D
D
Danny Milosavljevic wrote on 24 Sep 2019 16:41
Re: [bug#37466] [PATCH 2/4] gnu: Add heads.
20190924164139.1d827100@scratchpost.org
To use our linux-libre (with the mentioned problems):

Toggle diff (52 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 9128a4f426..e9c0b6b41c 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -202,12 +202,13 @@ done
            (uri "https://www.coreboot.org/releases/coreboot-4.8.1.tar.xz")
            (sha256
             (base32 "08xdd5drk8yd37a3z5hc81qmgsybv6201i28hcggxh980vdz9pgh"))))
-       ("linux"
-        ,(origin
-           (method url-fetch)
-           (uri "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.62.tar.xz")
-           (sha256
-            (base32 "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji"))))
+;       ("linux"
+;        ,(origin
+;           (method url-fetch)
+;           (uri "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.62.tar.xz")
+;           (sha256
+;            (base32 "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji"))))
+       ("linux" ,linux-libre-4.14-source)
        ("musl" ; useless
         ,(origin
            (method url-fetch)
@@ -422,13 +423,16 @@ done
                  ;(invoke "tar" "-xf" source-file "-C" "build")
 ))
              (mkdir-p "packages")
+             (setenv "V" "1") ; verbose
              (setenv "GUIX_C_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
              (setenv "GUIX_CPLUS_INCLUDE_PATH" (getenv "CPLUS_INCLUDE_PATH"))
              (setenv "GUIX_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
              (setenv "GUIX_CPATH" (getenv "CPATH"))
+             (copy-file (assoc-ref inputs "linux")
+                        "packages/linux-4.14.62.tar.xz.tmp")
              (for-each (lambda (name)
                          (install-file* name "packages" ".tmp"))
-                       '("linux" "coreboot-blobs" "coreboot" "busybox" "zlib" "mbedtls" "kexec-tools" "qrencode" "pciutils" "util-linux" "flashrom" "popt" "lvm2" "cryptsetup" "libgpg-error" "libgcrypt" "libksba" "libassuan" "npth" "libusb" "libusb-compat" "dropbear" "pinentry" "gnupg" "slang" "newt" "musl"))
+                       '("coreboot-blobs" "coreboot" "busybox" "zlib" "mbedtls" "kexec-tools" "qrencode" "pciutils" "util-linux" "flashrom" "popt" "lvm2" "cryptsetup" "libgpg-error" "libgcrypt" "libksba" "libassuan" "npth" "libusb" "libusb-compat" "dropbear" "pinentry" "gnupg" "slang" "newt" "musl"))
              (mkdir-p "build")
              (mkdir-p "build/musl-cross-git/tarballs")
              (mkdir-p "build/coreboot-4.8.1/util/crossgcc/tarballs")
@@ -443,6 +447,9 @@ done
              (setenv "MUSL_DIR" (assoc-ref inputs "musl-cross"))
              (setenv "CROSS" (string-append (getenv "MUSL_DIR") "/crossgcc/x86_64-linux-musl/bin/x86_64-musl-linux-")) ; Note: Useless
              (substitute* "Makefile"
+              ;; Disable checksum verification--we do it ourselves.
+              (("sha256sum --check")
+               "cat")
               ;; Disable our non-cross toolchain environment.
               (("CROSS_TOOLS_NOCC := ")
                ; CPP=" (getenv "CROSS") "cpp CXXCPP=" (getenv "CROSS") "cpp "
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl2KKyMACgkQ5xo1VCww
uqV4wQgAouQa5UpEq1aFDYw+R7xvcErVqcss/BSwi0AJKEYXNsOvGxBE1rzfR2Zt
mWxHvaxf7oIp3eigZSAcBBaCNBZkcAENi+CTITTlv8y2OPFVLN7ztwOr4XOcTMTM
sAcv3wsdnjptKnm4R+50w+PudA4WEFuXj0XlOYlKtQqHDfs+ZsImqNd15elaLgRH
H0SC5ub7fGs5IDbfw4PyMnDzBjrZZLi7yEmV06j8J8JAB1/NpknrVDljVaaxoLtb
fNxKjMp5aL9Zt9f5objk7y32Ng8znv1stB+0DvmIZsXXeG8LJAVajOuZblvw8gpI
GPhN8opnhYXwWaPJNR6EZpiAZMFutg==
=9stl
-----END PGP SIGNATURE-----


D
D
Danny Milosavljevic wrote on 25 Sep 2019 02:24
20190925022439.3c989874@scratchpost.org
Better version:

Toggle diff (94 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 9128a4f426..01b9eeaa90 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -202,12 +202,13 @@ done
            (uri "https://www.coreboot.org/releases/coreboot-4.8.1.tar.xz")
            (sha256
             (base32 "08xdd5drk8yd37a3z5hc81qmgsybv6201i28hcggxh980vdz9pgh"))))
-       ("linux"
-        ,(origin
-           (method url-fetch)
-           (uri "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.62.tar.xz")
-           (sha256
-            (base32 "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji"))))
+;       ("linux"
+;        ,(origin
+;           (method url-fetch)
+;           (uri "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.62.tar.xz")
+;           (sha256
+;            (base32 "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji"))))
+       ("linux" ,linux-libre-4.14-source)
        ("musl" ; useless
         ,(origin
            (method url-fetch)
@@ -422,13 +423,16 @@ done
                  ;(invoke "tar" "-xf" source-file "-C" "build")
 ))
              (mkdir-p "packages")
+             (setenv "V" "1") ; verbose
              (setenv "GUIX_C_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
              (setenv "GUIX_CPLUS_INCLUDE_PATH" (getenv "CPLUS_INCLUDE_PATH"))
              (setenv "GUIX_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
              (setenv "GUIX_CPATH" (getenv "CPATH"))
+             (copy-file (assoc-ref inputs "linux")
+                        "packages/linux-4.14.62.tar.xz.tmp")
              (for-each (lambda (name)
                          (install-file* name "packages" ".tmp"))
-                       '("linux" "coreboot-blobs" "coreboot" "busybox" "zlib" "mbedtls" "kexec-tools" "qrencode" "pciutils" "util-linux" "flashrom" "popt" "lvm2" "cryptsetup" "libgpg-error" "libgcrypt" "libksba" "libassuan" "npth" "libusb" "libusb-compat" "dropbear" "pinentry" "gnupg" "slang" "newt" "musl"))
+                       '("coreboot-blobs" "coreboot" "busybox" "zlib" "mbedtls" "kexec-tools" "qrencode" "pciutils" "util-linux" "flashrom" "popt" "lvm2" "cryptsetup" "libgpg-error" "libgcrypt" "libksba" "libassuan" "npth" "libusb" "libusb-compat" "dropbear" "pinentry" "gnupg" "slang" "newt" "musl"))
              (mkdir-p "build")
              (mkdir-p "build/musl-cross-git/tarballs")
              (mkdir-p "build/coreboot-4.8.1/util/crossgcc/tarballs")
@@ -443,6 +447,9 @@ done
              (setenv "MUSL_DIR" (assoc-ref inputs "musl-cross"))
              (setenv "CROSS" (string-append (getenv "MUSL_DIR") "/crossgcc/x86_64-linux-musl/bin/x86_64-musl-linux-")) ; Note: Useless
              (substitute* "Makefile"
+              ;; Disable checksum verification--we do it ourselves.
+              (("sha256sum --check")
+               "cat")
               ;; Disable our non-cross toolchain environment.
               (("CROSS_TOOLS_NOCC := ")
                ; CPP=" (getenv "CROSS") "cpp CXXCPP=" (getenv "CROSS") "cpp "
@@ -461,11 +468,13 @@ done
                               "CC_FOR_BUILD = $(HOSTCC)\n" ; for libgpg-error
                               "BUILD_CC = $(HOSTCC)\n")) ; for kexec-tools
               ;; Disable git, patch shebangs, and selectively re-enable host compiler.
+              ;; (Note: $HOSTCC is too complicated for bash, for example
+              ;;  HOSTCC="a=b c=d gcc", then issuing $HOSTCC won't work).
               (("(git clone.*)." _ tar)
-               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' \"$$$$s\" ; fi ; done)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed applets/busybox.mkll applets/busybox.mksuid po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' -e 's;^\\(\\$$$$HOSTCC[^|]*\\);(echo \\1 | bash);' \"$$$$s\" ; fi ; done)
 " "true" (assoc-ref inputs "bash") (assoc-ref inputs "bash") (assoc-ref inputs "bash")))
               (("(tar -xf.*)." _ tar)
-               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' \"$$$$s\" ; fi ; done)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed applets/busybox.mkll applets/busybox.mksuid po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' -e 's;^\\(\\$$$$HOSTCC[^|]*\\);(echo \\1 | bash);' \"$$$$s\" ; fi ; done)
 " tar (assoc-ref inputs "bash") (assoc-ref inputs "bash") (assoc-ref inputs "bash"))))
              ;(substitute* "modules/musl-cross"
              ; (("/bin/echo") "echo"))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 59874b097c..5b234a1ba9 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -194,7 +194,7 @@ defconfig.  Return the appropriate make target if applicable, otherwise return
 
 (define deblob-scripts-4.14
   (linux-libre-deblob-scripts
-   "4.14.140"
+   "4.14.62"
    (base32 "091jk9jkn9jf39bxpc7395bhcb7p96nkg3a8047380ki06lnfxh6")
    (base32 "0x9nd3hnyrm753cbgdqmy92mbnyw86w64g4hvyibnkpq5n7s3z9n")))
 
@@ -366,10 +366,10 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.142")
+(define-public linux-libre-4.14-version "4.14.62")
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "1wwhnm1n1b6yzsd2zzzf9i3n4hlvgnph70p67cwahw0ik4ssayz6")))
+        (hash (base32 "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl2Ks8cACgkQ5xo1VCww
uqVYtQgAl3LkYQumV3//kaKRpVS309m4k/vZBV1EcB/4+/XRqP9991CDR07YTi9x
/LbKNB15/xuwy/XOuAppl8VAHabvTMZafl7F1SzCFHcQka7QF7jF0/MuSkW5bVd0
ihyeppT3TOv79KgRXJNZtlhqbuWNodxDIkbvrZThkBVqFLSmict2wSwsHuIAGCpY
HAb/3PIUHh5tZVeI5oWX/cIAvK/DFRJV+R1kdpCA4+7TxgezZ5W9XHRZSArmZIgc
60vw4mmgU5T64pt8H0YQhAlCG9zRmgEhLgk18gyd/N+5NysOQdcs7F4x/I2yHxIE
aYuFTQhK5kzFm6S0lHiuJpnj8ZPwqg==
=sl6l
-----END PGP SIGNATURE-----


D
D
Danny Milosavljevic wrote on 29 Sep 2019 13:07
[WIP v3 0/7] Add heads.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190929110750.21214-1-dannym@scratchpost.org
This adds heads to Guix. Heads is minimal Linux that runs as a coreboot or
LinuxBoot payload to provide a secure, flexible boot environment for laptops
and servers.

Heads uses checksums to make sure that all the components are what they are
supposed to be, at build time, at BOOT time and when resuming.

Therefore, it's difficult to replace stuff with our versions.
I'm not sure whether we should--since Heads is supposed to build the same
thing reproducibly everywhere.

A future version will be a variant which does replace Linux by Linux-libre,
but that also changes both the source hashes and the output (and thus the
output hashes).

Danny Milosavljevic (7):
gnu: Add musl-cross.
gnu: Add heads.
gnu: Add heads-linuxboot.
gnu: Add heads-qemu-linuxboot.
gnu: Add heads-coreboot.
gnu: Add heads-qemu-coreboot.
gnu: Add heads-kgpe-d16.

gnu/local.mk | 2 +
gnu/packages/heads.scm | 610 ++++++++++++++++++
.../patches/heads-make-environment.patch | 446 +++++++++++++
3 files changed, 1058 insertions(+)
create mode 100644 gnu/packages/heads.scm
create mode 100644 gnu/packages/patches/heads-make-environment.patch
D
D
Danny Milosavljevic wrote on 29 Sep 2019 13:07
[WIP v3 1/7] gnu: Add musl-cross.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190929110750.21214-2-dannym@scratchpost.org
* gnu/packages/heads.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
gnu/local.mk | 1 +
gnu/packages/heads.scm | 124 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 125 insertions(+)
create mode 100644 gnu/packages/heads.scm

Toggle diff (142 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index b04a5d796e..01c726d8cf 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -246,6 +246,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/haskell-web.scm			\
   %D%/packages/haskell-xyz.scm			\
   %D%/packages/ham-radio.scm			\
+  %D%/packages/heads.scm			\
   %D%/packages/hexedit.scm			\
   %D%/packages/hugs.scm				\
   %D%/packages/hurd.scm				\
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
new file mode 100644
index 0000000000..b547a374e0
--- /dev/null
+++ b/gnu/packages/heads.scm
@@ -0,0 +1,124 @@
+(define-module (gnu packages heads)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages elf)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages cpio)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages virtualization))
+
+(define-public musl-cross
+  (let ((revision "1")
+        (commit "b7f2249b665705939dc4eca67d11553c72164f4b"))
+  (package
+    (name "musl-cross")
+    (version (git-version "0.1" revision commit))
+    (source
+          (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/GregorR/musl-cross")
+                   (commit "3b5b118f1cdddecda3f04b5005f69f962278fc1e")))
+             (file-name "musl-cross-checkout")
+             (sha256
+              (base32 "0pd1b7k4gwbvnyw0677p56d7j0xmv80k5iihkkjrd1mp9zdx90gj"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; No tests in main project.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda _
+             (setenv "SHELL" "bash")
+             (setenv "CONFIG_SHELL" "bash")
+             #t))
+         (add-after 'unpack 'unpack-dependencies
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (define (install-file* source-key destination-directory
+                                    destination-suffix)
+               (let* ((source-file (assoc-ref inputs source-key))
+                      (source-basename (basename source-file))
+                      (source-parts (string-split source-basename #\-))
+                      (drop (@ (srfi srfi-1) drop))
+                      (destination-file
+                       (string-join (drop source-parts 1) "-")))
+                 (copy-file source-file
+                  (string-append destination-directory "/"
+                                 destination-file destination-suffix))))
+             (for-each (lambda (name)
+                         (install-file* name "tarballs" ""))
+                       '("binutils" "target-gcc-5" "kernel-headers" "musl"))
+             (substitute* "config.sh"
+              (("^CC_BASE_PREFIX=.*")
+               (string-append "CC_BASE_PREFIX=" (assoc-ref outputs "out")
+                              "/crossgcc\n")))
+             ;; Note: Important: source/gcc-5.3.0/gcc/exec-tool.in
+             ;; Note: Important: source/kernel-headers-3.12.6-5/tools/install.sh
+             ;; Note: Important: move-if-change (twice)
+             ;; Make sure that shebangs are patched after new extractions.
+             (substitute* "defs.sh"
+              (("touch \"[$]2/extracted\"")
+               (string-append "touch \"$2/extracted\"
+for s in mkinstalldirs move-if-change compile depcomp callprocs configure \\
+mkdep compile libtool-ldflags config.guess install-sh missing config.sub \\
+config.rpath progtest.m4 lib-ld.m4 acx.m4 gen-fixed.sh mkheader.sh ylwrap \\
+merge.sh godeps.sh lock-and-run.sh print-sysroot-suffix.sh mkconfig.sh \\
+genmultilib exec-tool.in install.sh
+do
+  find . -name $s -exec sed -i -e 's;!/bin/sh;!" (assoc-ref inputs "bash")
+"/bin/sh;' '{}' ';'
+  find . -name $s -exec sed -i -e 's; /bin/sh; " (assoc-ref inputs "bash")
+"/bin/sh;' '{}' ';'
+done
+" )))
+             #t))
+         (replace 'build
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "./build.sh")))
+         (delete 'install))))
+    (native-inputs
+     `(("bash" ,bash)
+       ("flex" ,flex)
+       ("gmp" ,gmp)
+       ("mpfr" ,mpfr)
+       ("mpc" ,mpc)
+       ("binutils"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gnu/binutils/binutils-2.25.1.tar.bz2")
+           (sha256
+            (base32 "08lzmhidzc16af1zbx34f8cy4z7mzrswpdbhrb8shy3xxpflmcdm"))))
+       ("target-gcc-5"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.bz2")
+           (sha256
+            (base32 "1ny4smkp5bzs3cp8ss7pl6lk8yss0d9m4av1mvdp72r1x695akxq"))))
+       ("kernel-headers"
+        ,(origin
+           (method url-fetch)
+           (uri "http://ftp.barfooze.de/pub/sabotage/tarballs/kernel-headers-3.12.6-5.tar.xz")
+           (sha256
+            (base32 "0p43lvbpy69lbjmvq39g570imj0p8z791bhzrpdnp1nygwshj2wf"))))
+       ("musl"
+        ,(origin
+           (method url-fetch)
+           (uri "http://www.musl-libc.org/releases/musl-1.1.21.tar.gz")
+           (sha256
+            (base32 "0i2z52zgc86af1n1gjiz43hgd85mxjgvgn345zsybja9dxpvchn7"))))))
+    (home-page "https://github.com/osresearch/heads")
+    (synopsis "Musl-cross gcc 5 toolchain")
+    (description "Musl-cross toolchain: binutils, gcc 5 and musl.")
+    (license license:isc))))
D
D
Danny Milosavljevic wrote on 29 Sep 2019 13:07
[WIP v3 4/7] gnu: Add heads-qemu-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190929110750.21214-5-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-qemu-linuxboot): New variable.
---
gnu/packages/heads.scm | 9 +++++++++
1 file changed, 9 insertions(+)

Toggle diff (17 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 7d1f70a621..179dab1546 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -556,3 +556,12 @@ servers.")
              (sha256
               (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
        ,@(package-native-inputs heads)))))
+
+(define-public heads-qemu-linuxboot
+  (package
+    (inherit heads-linuxboot)
+    (name "heads-qemu-linuxboot")
+    (arguments
+     `(#:make-flags
+       '("BOARD=qemu-linuxboot")
+       ,@(package-arguments heads-linuxboot)))))
D
D
Danny Milosavljevic wrote on 29 Sep 2019 13:07
[WIP v3 5/7] gnu: Add heads-coreboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190929110750.21214-6-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-coreboot): New variable.
---
gnu/packages/heads.scm | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

Toggle diff (24 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 179dab1546..0b6a93d744 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -565,3 +565,19 @@ servers.")
      `(#:make-flags
        '("BOARD=qemu-linuxboot")
        ,@(package-arguments heads-linuxboot)))))
+
+(define heads-coreboot
+  (package
+    (inherit heads)
+    (name "heads-coreboot")
+    (arguments
+     (substitute-keyword-arguments (package-arguments heads)
+      ((#:phases phases)
+       `(modify-phases ,phases
+          (add-before 'unpack-heads-packages 'unpack-coreboot
+            (lambda* (#:key inputs #:allow-other-keys)
+               (mkdir-p "build")
+               #t))))))
+    (native-inputs
+     `(("file" ,file)
+       ,@(package-native-inputs heads)))))
D
D
Danny Milosavljevic wrote on 29 Sep 2019 13:07
[WIP v3 6/7] gnu: Add heads-qemu-coreboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190929110750.21214-7-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-qemu-coreboot): New variable.
---
gnu/packages/heads.scm | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

Toggle diff (27 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 0b6a93d744..80e570b097 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -24,7 +24,8 @@
   #:use-module (gnu packages file)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages version-control)
-  #:use-module (gnu packages virtualization))
+  #:use-module (gnu packages virtualization)
+  #:use-module ((guix build utils) #:select (alist-replace)))
 
 (define-public musl-cross
   (let ((revision "1")
@@ -581,3 +582,12 @@ servers.")
     (native-inputs
      `(("file" ,file)
        ,@(package-native-inputs heads)))))
+
+(define-public heads-qemu-coreboot
+  (package
+    (inherit heads-coreboot)
+    (name "heads-qemu-coreboot")
+    (arguments
+     `(#:make-flags
+       '("BOARD=qemu-coreboot")
+       ,@(package-arguments heads-coreboot)))))
D
D
Danny Milosavljevic wrote on 29 Sep 2019 13:07
[WIP v3 3/7] gnu: Add heads-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190929110750.21214-4-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-linuxboot): New variable.
---
gnu/packages/heads.scm | 46 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)

Toggle diff (54 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 311eeeb1a1..7d1f70a621 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -510,3 +510,49 @@ done
 payload to provide a secure, flexible boot environment for laptops and
 servers.")
     (license license:gpl2+))))
+
+(define-public heads-linuxboot
+  (package
+    (inherit heads)
+    (name "heads-linuxboot")
+    (arguments
+     (substitute-keyword-arguments (package-arguments heads)
+      ((#:phases phases)
+       `(modify-phases ,phases
+          (add-before 'unpack-heads-packages 'unpack-linuxboot
+            (lambda* (#:key inputs #:allow-other-keys)
+               (mkdir-p "build")
+               (copy-recursively (assoc-ref inputs "linuxboot") "build/linuxboot-git")
+               (copy-recursively (assoc-ref inputs "edk2") "build/linuxboot-git/edk2")
+               (invoke "chmod" "-R" "u+w" "build/linuxboot-git")
+               (chmod "build/linuxboot-git/Makefile" #o664)
+               (substitute* "build/linuxboot-git/dxe/Makefile"
+                (("/usr/bin/") ""))
+               #t))))))
+    (native-inputs
+     `(("edk2"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/linuxboot/edk2")
+                   (commit "UDK2018")
+                   (recursive? #t))) ; openssl
+             (file-name "edk2-checkout")
+             (sha256
+              (base32 "0crjx1hg1m5mir2qm96dbcc3glrnww3ni0bc9f370qmm337wzlhi"))))
+       ("libuuid" ,util-linux) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("nasm" ,nasm) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("python" ,python-2) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("acpica" ,acpica) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("file" ,file)
+       ("linuxboot"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/osresearch/linuxboot.git")
+                   (commit "b5376a441e8e85cbf722e943bb8294958e87c784")
+                   (recursive? #t)))
+             (file-name "linuxboot-checkout")
+             (sha256
+              (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
+       ,@(package-native-inputs heads)))))
D
D
Danny Milosavljevic wrote on 29 Sep 2019 13:07
[WIP v3 7/7] gnu: Add heads-kgpe-d16.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190929110750.21214-8-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-kgpe-d16): New variable.
---
gnu/packages/heads.scm | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

Toggle diff (25 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 80e570b097..22f3f60d75 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -591,3 +591,20 @@ servers.")
      `(#:make-flags
        '("BOARD=qemu-coreboot")
        ,@(package-arguments heads-coreboot)))))
+
+(define-public heads-kgpe-d16
+  (package
+    (inherit heads-coreboot)
+    (name "heads-kgpe-d16")
+    (native-inputs
+     (alist-replace "gnupg"
+       (list (origin
+         (method url-fetch)
+         (uri "https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-1.4.21.tar.bz2")
+         (sha256
+          (base32 "0xi2mshq8f6zbarb5f61c9w2qzwrdbjm4q8fqsrwlzc51h8a6ivb"))))
+      (package-native-inputs heads-coreboot)))
+    (arguments
+     `(#:make-flags
+       '("BOARD=kgpe-d16")
+       ,@(package-arguments heads-coreboot)))))
D
D
Danny Milosavljevic wrote on 29 Sep 2019 13:07
[WIP v3 2/7] gnu: Add heads.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20190929110750.21214-3-dannym@scratchpost.org
* gnu/packages/heads.scm (heads): New variable.
* gnu/packages/patches/heads-make-environment.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/heads.scm | 388 +++++++++++++++
.../patches/heads-make-environment.patch | 446 ++++++++++++++++++
3 files changed, 835 insertions(+)
create mode 100644 gnu/packages/patches/heads-make-environment.patch

Toggle diff (878 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 01c726d8cf..fb3c913f2c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -948,6 +948,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/hdf-eos5-remove-gctp.patch		\
   %D%/packages/patches/hdf-eos5-fix-szip.patch			\
   %D%/packages/patches/hdf-eos5-fortrantests.patch		\
+  %D%/packages/patches/heads-make-environment.patch		\
   %D%/packages/patches/higan-remove-march-native-flag.patch	\
   %D%/packages/patches/hubbub-sort-entities.patch		\
   %D%/packages/patches/hurd-fix-eth-multiplexer-dependency.patch        \
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index b547a374e0..311eeeb1a1 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -4,8 +4,12 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix utils)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages assembly)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages flex)
@@ -13,8 +17,11 @@
   #:use-module (gnu packages elf)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages cpio)
+  #:use-module (gnu packages file)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages virtualization))
@@ -122,3 +129,384 @@ done
     (synopsis "Musl-cross gcc 5 toolchain")
     (description "Musl-cross toolchain: binutils, gcc 5 and musl.")
     (license license:isc))))
+
+(define heads
+  (let ((revision "1")
+        (commit "b7f2249b665705939dc4eca67d11553c72164f4b"))
+  (package
+    (name "heads")
+    (version (git-version "0.1" revision commit))
+    (source
+     (origin
+      (method git-fetch)
+      (uri (git-reference
+             (url "https://github.com/osresearch/heads.git")
+             (commit commit)))
+      (file-name (git-file-name name version))
+      (sha256
+       (base32
+        "0sgyqm4ss88hfp8miz40mw40kj7qp2khr7jcvscwv87bd5g9nwnx"))
+      (patches (search-patches "heads-make-environment.patch"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bash" ,bash)
+       ("git" ,git)
+       ("perl" ,perl)
+       ("cpio" ,cpio)
+       ("m4" ,m4)
+       ("bison" ,bison)
+       ("flex" ,flex)
+       ("curl" ,curl) ; unused
+       ("zlibx" ,zlib)
+       ("musl-cross" ,musl-cross)
+       ("elfutils" ,elfutils)
+       ("bc" ,bc)
+       ("findutils" ,findutils)
+       ("flashtools"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/flashtools.git")
+                 (commit "9acce09aeb635c5bef01843e495b95e75e8da135")))
+           (file-name "flashtools-checkout")
+           (sha256
+            (base32 "0r4gj3nzr67ycd39k1vjzxfzkp90yacrdgxhc1z5jfvxfq4x91c1"))))
+       ("tpmtotp"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/tpmtotp.git")
+                 (commit "18b860fdcf5a55537c8395b891f2b2a5c24fc00a")))
+           (file-name "tpmtotp-checkout")
+           (sha256
+            (base32 "112p5afkrbipr0d8x9r9mrxrr3xyf97s2y3f32p41vs951sksqnv"))))
+       ("msrtools"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/msr-tools.git")
+                 (commit "572ef8a2b873eda15a322daa48861140a078b92c")))
+           (file-name "msr-tools-checkout")
+           (sha256
+            (base32 "0an1ypj5pin9l413vn4gxzi3x6ir1rba9jv6n5gk6s9dq803lb6p"))))
+       ("coreboot-blobs"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-blobs-4.8.1.tar.xz")
+           (sha256
+            (base32 "15g222xj1zdn8i8qz0pw2jf28h66dljb1q5isw2ml05gwfd51ahq"))))
+       ("coreboot"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-4.8.1.tar.xz")
+           (sha256
+            (base32 "08xdd5drk8yd37a3z5hc81qmgsybv6201i28hcggxh980vdz9pgh"))))
+       ("linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.62.tar.xz")
+           (sha256
+            (base32 "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji"))))
+       ("musl" ; useless
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.musl-libc.org/releases/musl-1.1.15.tar.gz")
+           (sha256
+            (base32 "1ymhxkskivzph0q34zadwfglc5gyahqajm7chqqn2zraxv3lgr4p"))))
+       ("busybox"
+        ,(origin
+           (method url-fetch)
+           (uri "https://busybox.net/downloads/busybox-1.28.0.tar.bz2")
+           (sha256
+            (base32 "1701carjf02y7r3djm1yvyd5kzrcxm4szinp7agfv7fmvfvm6ib0"))))
+       ("zlib"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.zlib.net/zlib-1.2.11.tar.gz")
+           (sha256
+            (base32 "18dighcs333gsvajvvgqp8l4cx7h1x7yx9gd5xacnk80spyykrf3"))))
+       ("mbedtls"
+        ,(origin
+           (method url-fetch)
+           (uri "https://tls.mbed.org/download/mbedtls-2.4.2-gpl.tgz")
+           (sha256
+            (base32 "17r9qs585gqghcf5yavb1cnvsigl0f8r0k8rklr5a855hrajs7yh"))))
+       ("kexec-tools"
+        ,(origin
+           (method url-fetch)
+           (uri "https://kernel.org/pub/linux/utils/kernel/kexec/kexec-tools-2.0.16.tar.gz")
+           (sha256
+            (base32 "0fkg5y3wxvkqrjii90iz1i59qd6hhq7ar27f0sgv7jbppyczq5yg"))))
+       ("qrencode"
+        ,(origin
+           (method url-fetch)
+           (uri "https://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz")
+           (sha256
+            (base32 "0wiagx7i8p9zal53smf5abrnh9lr31mv0p36wg017401jrmf5577"))))
+       ("pciutils"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/software/utils/pciutils/pciutils-3.5.4.tar.xz")
+           (sha256
+            (base32 "0rpy7kkb2y89wmbcbfjjjxsk2x89v5xxhxib4vpl131ip5m3qab4"))))
+       ("util-linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/util-linux/v2.29/util-linux-2.29.2.tar.xz")
+           (sha256
+            (base32 "1qz81w8vzrmy8xn9yx7ls4amkbgwx6vr62pl6kv9g7r0g3ba9kmc"))))
+       ("flashrom"
+        ,(origin
+           (method url-fetch)
+           (uri "https://download.flashrom.org/releases/flashrom-1.0.tar.bz2")
+           (sha256
+            (base32 "0r7fkpfc8w51n8ffbhclj4wa3kwrk0ijv1acwpw5myx5bchzl0ip"))))
+       ("popt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://launchpad.net/popt/head/1.16/+download/popt-1.16.tar.gz")
+           (sha256
+            (base32 "1j2c61nn2n351nhj4d25mnf3vpiddcykq005w2h6kw79dwlysa77"))))
+       ("lvm2"
+        ,(origin
+           (method url-fetch)
+           (uri "https://mirrors.kernel.org/sourceware/lvm2/LVM2.2.02.168.tgz")
+           (sha256
+            (base32 "03b62hcsj9z37ckd8c21wwpm07s9zblq7grfh58yzcs1vp6x38r3"))))
+       ("cryptsetup"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/cryptsetup/v1.7/cryptsetup-1.7.3.tar.xz")
+           (sha256
+            (base32 "00nwd96m9yq4k3cayc04i5y7iakkzana35zxky6hpx2w8zl08axg"))))
+       ("libgpg-error"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.32.tar.bz2")
+           (sha256
+            (base32 "1jj08ns4sh1hmafqp1giskvdicdz18la516va26jycy27kkwaif3"))))
+       ("libgcrypt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.3.tar.bz2")
+           (sha256
+            (base32 "0z5gs1khzyknyfjr19k8gk4q148s6q987ya85cpn0iv70fz91v36"))))
+       ("libksba"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libksba/libksba-1.3.5.tar.bz2")
+           (sha256
+            (base32 "0h53q4sns1jz1pkmhcz5wp9qrfn9f5g9i3vjv6dafwzzlvblyi21"))))
+       ("libassuan"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libassuan/libassuan-2.5.1.tar.bz2")
+           (sha256
+            (base32 "0jb4nb4nrjr949gd3lw8lh4v5d6qigxaq6xwy24w5apjnhvnrya7"))))
+       ("npth"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/npth/npth-1.6.tar.bz2")
+           (sha256
+            (base32 "1lg2lkdd3z1s3rpyf88786l243adrzyk9p4q8z9n41ygmpcsp4qk"))))
+       ("libusb"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.21/libusb-1.0.21.tar.bz2")
+           (sha256
+            (base32 "0jw2n5kdnrqvp7zh792fd6mypzzfap6jp4gfcmq4n6c1kb79rkkx"))))
+       ("libusb-compat"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-compat-0.1/libusb-compat-0.1.5/libusb-compat-0.1.5.tar.bz2")
+           (sha256
+            (base32 "0nn5icrfm9lkhzw1xjvaks9bq3w6mjg86ggv3fn7kgi4nfvg8kj0"))))
+       ("dropbear"
+        ,(origin
+           (method url-fetch)
+           (uri "https://matt.ucc.asn.au/dropbear/releases/dropbear-2016.74.tar.bz2")
+           (sha256
+            (base32 "14c8f4gzixf0j9fkx68jgl85q7b05852kk0vf09gi6h0xmafl817"))))
+       ("pinentry"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/pinentry/pinentry-1.1.0.tar.bz2")
+           (sha256
+            (base32 "0w35ypl960pczg5kp6km3dyr000m1hf0vpwwlh72jjkjza36c1v8"))))
+       ("gnupg"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.10.tar.bz2")
+           (sha256
+            (base32 "05f9804g72pffdxgvxjmjzkfcpjg1x221g9rwcr8fi51hrxd77br"))))
+       ("slang"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.jedsoft.org/releases/slang/slang-2.3.1a.tar.bz2")
+           (sha256
+            (base32 "0dlcy0hn0j6cj9qj5x6hpb0axifnvzzmv5jqq0wq14fygw0c7w2l"))))
+       ("newt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://releases.pagure.org/newt/newt-0.52.20.tar.gz")
+           (sha256
+            (base32 "1g3dpfnvaw7vljbr7nzq1rl88d6r8cmrvvng9inphgzwxxmvlrld"))))
+
+       ;;; coreboot cross; FIXME: Extract.
+
+       ("gmp"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gmp/gmp-6.1.2.tar.xz")
+           (sha256
+            (base32 "04hrwahdxyqdik559604r7wrj9ffklwvipgfxgj4ys4skbl6bdc7"))))
+       ("mpfr"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/mpfr/mpfr-3.1.5.tar.xz")
+           (sha256
+            (base32 "1g32l2fg8f62lcyzzh88y3fsh6rk539qc6ahhdgvx7wpnf1dwpq1"))))
+       ("mpc"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/mpc/mpc-1.0.3.tar.gz")
+           (sha256
+            (base32 "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))
+       ("binutils-2.30"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/binutils/binutils-2.30.tar.xz")
+           (sha256
+            (base32 "1rhshw4m5m2pjz8g15hpiwhp52kn0pj0b5dxy0v7lwigmspbhikf"))))
+       ("gcc-8"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gcc/gcc-8.1.0/gcc-8.1.0.tar.xz")
+           (sha256
+            (base32 "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x"))))
+       ;; Note: Non-coreboot heads really doesn't need that.
+       ("acpica-coreboot"
+        ,(origin
+           (method url-fetch)
+           (uri "https://acpica.org/sites/acpica/files/acpica-unix2-20180531.tar.gz")
+           (sha256
+            (base32 "0q7vg1nr51f3rg16vjh4glz361a64r6gpm46fqkl2jf4fq7g43g5"))))))
+    (arguments
+     `(#:tests? #f ; Toplevel makefile has no tests.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; For edk2.
+             (setenv "BUILD_CC" "gcc") ; FIXME: musl *musl-cross*/x86_64-linux-musl/bin/x86_64-linux-musl-gcc || ./x86_64-linux-musl/x86_64-linux-musl/bin/musl-gcc.
+             ;; busybox needs the original values (for VERY few tools, but more than 0).
+             ;; Disable wget.
+             (setenv "WGET" "true")
+             ;; Work around mcheck.h problem (in glibc!?)
+             (substitute* "modules/popt"
+              (("[.]/configure") "CFLAGS=\"-D__END_DECLS -D__BEGIN_DECLS -D__THROW\" ./configure"))
+             #t))
+         (add-after 'unpack 'unpack-heads-packages
+           (lambda* (#:key inputs #:allow-other-keys)
+             (define (install-file* source-key destination-directory destination-suffix)
+               (let* ((source-file (assoc-ref inputs source-key))
+                      (source-basename (basename source-file))
+                      (source-parts (string-split source-basename #\-))
+                      (drop (@ (srfi srfi-1) drop))
+                      (destination-file
+                       (string-join (drop source-parts 1) "-")))
+                 (copy-file source-file
+                  (string-append destination-directory "/"
+                                 destination-file destination-suffix))
+                 ;(invoke "tar" "-xf" source-file "-C" "build")
+))
+             (mkdir-p "packages")
+             (setenv "V" "1") ; verbose
+             (setenv "GUIX_C_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
+             (setenv "GUIX_CPLUS_INCLUDE_PATH" (getenv "CPLUS_INCLUDE_PATH"))
+             (setenv "GUIX_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
+             (setenv "GUIX_CPATH" (getenv "CPATH"))
+             (for-each (lambda (name)
+                         (install-file* name "packages" ".tmp"))
+                       '("linux" "coreboot-blobs" "coreboot" "busybox" "zlib" "mbedtls" "kexec-tools" "qrencode" "pciutils" "util-linux" "flashrom" "popt" "lvm2" "cryptsetup" "libgpg-error" "libgcrypt" "libksba" "libassuan" "npth" "libusb" "libusb-compat" "dropbear" "pinentry" "gnupg" "slang" "newt" "musl"))
+             (mkdir-p "build")
+             (mkdir-p "build/musl-cross-git/tarballs")
+             (mkdir-p "build/coreboot-4.8.1/util/crossgcc/tarballs")
+             (for-each (lambda (name)
+                         (install-file* name "build/coreboot-4.8.1/util/crossgcc/tarballs" ""))
+                       '("gmp" "mpfr" "mpc" "binutils-2.30" "gcc-8" "acpica-coreboot"))
+             (copy-recursively (assoc-ref inputs "musl-cross") "build/musl-cross-git")
+             (copy-recursively (assoc-ref inputs "tpmtotp") "build/tpmtotp-git")
+             (copy-recursively (assoc-ref inputs "flashtools") "build/flashtools-0.0.1")
+             (copy-recursively (assoc-ref inputs "msrtools") "build/msrtools-git")
+
+             (setenv "MUSL_DIR" (assoc-ref inputs "musl-cross"))
+             (setenv "CROSS" (string-append (getenv "MUSL_DIR") "/crossgcc/x86_64-linux-musl/bin/x86_64-musl-linux-")) ; Note: Useless
+             (substitute* "Makefile"
+              ;; Disable our non-cross toolchain environment.
+              (("CROSS_TOOLS_NOCC := ")
+               ; CPP=" (getenv "CROSS") "cpp CXXCPP=" (getenv "CROSS") "cpp "
+               (string-append "CROSS_TOOLS_NOCC := C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH= CPATH= "))
+              ;; Disable git.
+              (("git submodule update --init")
+               "true submodule update --init")
+              ;; Re-enable our non-cross toolchain environment selectively.
+              (("^WGET.*")
+               (string-append "HOSTCC =" ; for busybox
+                              " C_INCLUDE_PATH=" (or (getenv "GUIX_C_INCLUDE_PATH") "")
+                              " CPLUS_INCLUDE_PATH=" (or (getenv "GUIX_CPLUS_INCLUDE_PATH") "")
+                              " CPATH=" (or (getenv "GUIX_CPATH") "")
+                              " LIBRARY_PATH=" (or (getenv "GUIX_LIBRARY_PATH") "")
+                              " gcc\n"
+                              "CC_FOR_BUILD = $(HOSTCC)\n" ; for libgpg-error
+                              "BUILD_CC = $(HOSTCC)\n")) ; for kexec-tools
+              ;; Disable git, patch shebangs, and selectively re-enable host compiler.
+              ;; (Note: $HOSTCC is too complicated for bash, for example
+              ;; HOSTCC="a=b c=d gcc", then invoking $HOSTCC won't work).
+              (("(git clone.*)." _ tar)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed applets/busybox.mkll applets/busybox.mksuid po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' -e 's;^\\(\\$$$$HOSTCC[^|]*\\);(echo \\1 | bash);' \"$$$$s\" ; fi ; done)
+" "true" (assoc-ref inputs "bash") (assoc-ref inputs "bash") (assoc-ref inputs "bash")))
+              (("(tar -xf.*)." _ tar)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed applets/busybox.mkll applets/busybox.mksuid  po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' -e 's;^\\(\\$$$$HOSTCC[^|]*\\);(echo \\1 | bash);' \"$$$$s\" ; fi ; done)
+" tar (assoc-ref inputs "bash") (assoc-ref inputs "bash") (assoc-ref inputs "bash"))))
+             ;(substitute* "modules/musl-cross"
+             ; (("/bin/echo") "echo"))
+             (call-with-output-file "patches/coreboot-4.8.1/9999-shell.patch"
+               (lambda (port)
+                 (format port "--- coreboot-4.8.1/util/crossgcc/buildgcc.orig 2019-09-13 14:45:12.463998974 +0200
++++ coreboot-4.8.1/util/crossgcc/buildgcc 2019-09-13 14:46:49.808268216 +0200
+@@ -462,6 +462,13 @@
+ 			}
+ 		done
+ 		touch \"${dir}/.unpack_success\"
++  for s in \"${dir}/Makefile\" \"${dir}/configure\" \"${dir}/config.sub\" \"${dir}/config.guess\" \"${dir}/mpn/cpp-ccas\" \"${dir}/mpn/m4-ccas\" \"${dir}/missing\" \"${dir}/\"*\"/configure\" \"${dir}/move-if-change\" \"${dir}/libgcc/mkheader.sh\" \"${dir}/gcc/genmultilib\"
++  do
++   if [ -f \"${s}\" ]
++   then
++    sed -i -e 's;/bin/sh\\>;~a/bin/sh;' \"${s}\"
++   fi
++  done
+ 	)
+ }
+ 
+" (assoc-ref inputs "bash"))))
+             #t))
+         (add-after 'install 'install-images
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (make-flags-assoc (map (lambda (x)
+                                             (string-split x #\=))
+                                           make-flags))
+                    (BOARD (car (assoc-ref make-flags-assoc "BOARD")))
+                    (out-images (string-append out "/libexec/heads/" BOARD "/images")))
+               (mkdir-p out-images)
+               (copy-recursively (string-append "build/" BOARD) out-images)
+               ;; Contains timestamp.
+               (delete-file (string-append out-images "/hashes.txt"))
+               #t))))))
+    (home-page "https://github.com/osresearch/heads")
+    (synopsis "Heads: coreboot/LinuxBoot payload")
+    (description "A minimal Linux that runs as a coreboot or LinuxBoot ROM
+payload to provide a secure, flexible boot environment for laptops and
+servers.")
+    (license license:gpl2+))))
diff --git a/gnu/packages/patches/heads-make-environment.patch b/gnu/packages/patches/heads-make-environment.patch
new file mode 100644
index 0000000000..f38d08ee51
--- /dev/null
+++ b/gnu/packages/patches/heads-make-environment.patch
@@ -0,0 +1,446 @@
+diff --git a/Makefile b/Makefile
+index cc5cac6..ae8d7e7 100644
+--- a/Makefile
++++ b/Makefile
+@@ -124,10 +124,14 @@ CROSS_TOOLS_NOCC := \
+ 
+ CROSS_TOOLS := \
+ 	CC="$(heads_cc)" \
++	CPP="$(CROSS)cpp" \
++	CXXCPP="$(CROSS)cpp" \
++	CC_FOR_BUILD="$(CC_FOR_BUILD)" \
++	BUILD_CC="$(BUILD_CC)" \
++	HOSTCC="$(HOSTCC)" \
+ 	$(CROSS_TOOLS_NOCC) \
+ 
+ 
+-
+ ifeq "$(CONFIG_COREBOOT)" "y"
+ all: $(build)/$(BOARD)/coreboot.rom
+ else ifeq "$(CONFIG_LINUXBOOT)" "y"
+@@ -348,7 +352,7 @@ define define_module =
+ 		echo "$(MAKE) \
+ 			-C \"$(build)/$($1_dir)\" \
+ 			$($1_target)" ;  \
+-		$(MAKE) \
++		$($1_make_environment) $(MAKE) \
+ 			-C "$(build)/$($1_dir)" \
+ 			$($1_target)  \
+ 	) \
+@@ -453,7 +457,7 @@ $(COREBOOT_UTIL_DIR)/inteltool/inteltool \
+ : $(build)/$(coreboot_base_dir)/.canary \
+ 	$(build)/$(musl_dir)/.build
+ 	+$(call do,MAKE,$(notdir $@),\
+-		$(MAKE) -C "$(dir $@)" $(CROSS_TOOLS) \
++		CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH= $(MAKE) -C "$(dir $@)" $(CROSS_TOOLS) \
+ 	)
+ 
+ # superio depends on zlib and pciutils
+diff --git a/modules/busybox b/modules/busybox
+index f8f8a83..4836780 100644
+--- a/modules/busybox
++++ b/modules/busybox
+@@ -11,6 +11,7 @@ busybox_hash := 604553b7dbd59ded9e3ad7c6af49ed2cff599adf3e54d9463e5e0027b362019c
+ busybox_configure := $(MAKE) CC="$(heads_cc)" oldconfig
+ busybox_config := config/busybox.config
+ busybox_output := busybox
++busybox_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ busybox_target := \
+ 	$(CROSS_TOOLS) \
+ 	$(MAKE_JOBS) \
+diff --git a/modules/cairo b/modules/cairo
+index 647ed2c..00f6cac 100644
+--- a/modules/cairo
++++ b/modules/cairo
+@@ -23,6 +23,7 @@ cairo_configure := \
+ 	&& mv libtool-2 libtool \
+ 	&& chmod 755 libtool
+ 
++cairo_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ cairo_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/cryptsetup b/modules/cryptsetup
+index 4cea7f3..d68da0c 100644
+--- a/modules/cryptsetup
++++ b/modules/cryptsetup
+@@ -20,6 +20,7 @@ cryptsetup_configure := ./configure \
+ 
+ # but after building, replace prefix so that they will be installed
+ # in the correct directory.
++cryptsetup_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ cryptsetup_target := \
+ 	$(MAKE_JOBS) \
+ 	&& $(MAKE) \
+diff --git a/modules/dropbear b/modules/dropbear
+index 998087c..834a3ef 100644
+--- a/modules/dropbear
++++ b/modules/dropbear
+@@ -19,6 +19,7 @@ dropbear_configure := ./configure \
+ 	--disable-wtmpx \
+ 	
+ dropbear_output := ssh scp dropbear
++dropbear_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ dropbear_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/fbwhiptail b/modules/fbwhiptail
+index f54a62d..1359677 100644
+--- a/modules/fbwhiptail
++++ b/modules/fbwhiptail
+@@ -6,6 +6,7 @@ fbwhiptail_version := git
+ fbwhiptail_dir := fbwhiptail
+ fbwhiptail_repo := https://source.puri.sm/coreboot/fbwhiptail.git
+ 
++fbwhiptail_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ fbwhiptail_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/flashrom b/modules/flashrom
+index 0a29b18..d695818 100644
+--- a/modules/flashrom
++++ b/modules/flashrom
+@@ -11,6 +11,7 @@ flashrom_tar := flashrom-$(flashrom_version).tar.bz2
+ flashrom_url := https://download.flashrom.org/releases/$(flashrom_tar)
+ flashrom_hash := 3702fa215ba5fb5af8e54c852d239899cfa1389194c1e51cb2a170c4dc9dee64
+ 
++flashrom_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ flashrom_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/flashtools b/modules/flashtools
+index d95c215..090362c 100644
+--- a/modules/flashtools
++++ b/modules/flashtools
+@@ -11,6 +11,7 @@ flashtools_tar := flashtools-$(flashtools_version).tar.gz
+ flashtools_url := https://github.com/osresearch/flashtools/archive/v$(flashtools_version).tar.gz
+ flashtools_hash := e8205aa3d19e536080f5974ed06ab9a88c4c3f37870c2f6a3a08a2f39302c22c
+ 
++flashtools_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ flashtools_target := \
+ 	$(CROSS_TOOLS) \
+ 	CFLAGS="-I$(INSTALL)/include" \
+diff --git a/modules/frotz b/modules/frotz
+index 611e04a..e2c2e22 100644
+--- a/modules/frotz
++++ b/modules/frotz
+@@ -8,6 +8,7 @@ frotz_hash := dbb5eb3bc95275dcb984c4bdbaea58bc1f1b085b20092ce6e86d9f0bf3ba858f
+ 
+ frotz_configure := touch .config
+ 
++frotz_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ frotz_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/gpg b/modules/gpg
+index 4d4440a..6a48664 100644
+--- a/modules/gpg
++++ b/modules/gpg
+@@ -39,6 +39,7 @@ gpg_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++gpg_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ gpg_target := $(MAKE_JOBS) \
+ 	&& $(MAKE) -C $(build)/$(gpg_dir) \
+ 		DESTDIR="$(INSTALL)" \
+diff --git a/modules/gpg2 b/modules/gpg2
+index 318a4cd..522e518 100644
+--- a/modules/gpg2
++++ b/modules/gpg2
+@@ -50,6 +50,7 @@ gpg2_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++gpg2_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ gpg2_target := $(MAKE_JOBS) \
+ 	&& $(MAKE) -C $(build)/$(gpg2_dir) \
+ 		DESTDIR="$(INSTALL)" \
+diff --git a/modules/kexec b/modules/kexec
+index d2311c2..b507d81 100644
+--- a/modules/kexec
++++ b/modules/kexec
+@@ -14,6 +14,7 @@ kexec_configure := ./configure \
+ 	--without-lzma \
+ 	&& $(MAKE) clean
+ 
++kexec_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ kexec_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libassuan b/modules/libassuan
+index 3c4e319..6138ec2 100644
+--- a/modules/libassuan
++++ b/modules/libassuan
+@@ -14,6 +14,7 @@ libassuan_configure := ./configure \
+ 	--with-libgpg-error-prefix="$(INSTALL)" \
+ 	--disable-asm \
+ 
++libassuan_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libassuan_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libgcrypt b/modules/libgcrypt
+index aa7e1ef..384f672 100644
+--- a/modules/libgcrypt
++++ b/modules/libgcrypt
+@@ -14,6 +14,7 @@ libgcrypt_configure := ./configure \
+ 	--disable-asm \
+ 	--disable-nls \
+ 	
++libgcrypt_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libgcrypt_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libgpg-error b/modules/libgpg-error
+index 752e11a..3d4d217 100644
+--- a/modules/libgpg-error
++++ b/modules/libgpg-error
+@@ -16,6 +16,7 @@ libgpg-error_configure := ./configure \
+ 	--disable-tests \
+ 	--disable-asm \
+ 
++libgpg-error_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH= CC_FOR_BUILD="$(CC_FOR_BUILD)"
+ libgpg-error_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libksba b/modules/libksba
+index d352913..bd1835b 100644
+--- a/modules/libksba
++++ b/modules/libksba
+@@ -14,6 +14,7 @@ libksba_configure := ./configure \
+ 	--with-libgpg-error-prefix="$(INSTALL)" \
+ 	--disable-asm \
+ 
++libksba_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libksba_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libpng b/modules/libpng
+index d6d9e65..33306e2 100644
+--- a/modules/libpng
++++ b/modules/libpng
+@@ -12,6 +12,7 @@ libpng_configure := \
+         --host i386-elf-linux \
+ 	--prefix="/" \
+ 
++libpng_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libpng_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libremkey-hotp-verification b/modules/libremkey-hotp-verification
+index c9b9d45..e7fab7d 100644
+--- a/modules/libremkey-hotp-verification
++++ b/modules/libremkey-hotp-verification
+@@ -6,6 +6,7 @@ libremkey-hotp-verification_version := git
+ libremkey-hotp-verification_dir := libremkey-hotp-verification
+ libremkey-hotp-verification_repo := --recursive https://github.com/Nitrokey/nitrokey-hotp-verification
+ 
++libremkey-hotp-verification_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libremkey-hotp-verification_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libusb b/modules/libusb
+index b7fe959..fe274e9 100644
+--- a/modules/libusb
++++ b/modules/libusb
+@@ -19,6 +19,7 @@ libusb_configure := ./configure\
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
+ 
++libusb_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libusb_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libusb-compat b/modules/libusb-compat
+index f95854e..78033ef 100644
+--- a/modules/libusb-compat
++++ b/modules/libusb-compat
+@@ -22,6 +22,7 @@ libusb-compat_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++libusb-compat_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libusb-compat_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/lvm2 b/modules/lvm2
+index 91f0f53..def7544 100644
+--- a/modules/lvm2
++++ b/modules/lvm2
+@@ -34,6 +34,7 @@ lvm2_configure := \
+ 	--with-cluster=none \
+ 
+ # not sure why LIB_SUFFIX is not defined in the cross build
++lvm2_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ lvm2_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/mbedtls b/modules/mbedtls
+index d844b16..2611866 100644
+--- a/modules/mbedtls
++++ b/modules/mbedtls
+@@ -10,6 +10,7 @@ mbedtls_libraries := library/libmbedcrypto.so.0
+ 
+ mbedtls_configure :=
+ 
++mbedtls_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ mbedtls_target := \
+ 	SHARED=1 \
+ 	DESTDIR=$(INSTALL) \
+diff --git a/modules/msrtools b/modules/msrtools
+index 9adfab0..85b5954 100644
+--- a/modules/msrtools
++++ b/modules/msrtools
+@@ -11,6 +11,7 @@ msrtools_tar := msr-tools-$(msrtools_version).tar.gz
+ msrtools_url := https://github.com/intel/msr-tools/archive/msr-tools-$(msrtools_version).tar.gz
+ msrtools_hash := e8205aa3d19e536080f5974ed06ab9a88c4c3f37870c2f6a3a08a2f39302c22c
+ 
++msrtools_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ msrtools_target := \
+ 	$(CROSS_TOOLS) \
+ 	CFLAGS="-I$(INSTALL)/include" \
+diff --git a/modules/musl b/modules/musl
+index eec76de..89b9a0f 100644
+--- a/modules/musl
++++ b/modules/musl
+@@ -24,6 +24,7 @@ musl_configure := ./configure \
+ 	--enable-gcc-wrapper \
+ 	--enable-shared \
+ 
++musl_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ musl_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS_NOCC) \
+diff --git a/modules/newt b/modules/newt
+index cc6341d..bad67c7 100644
+--- a/modules/newt
++++ b/modules/newt
+@@ -8,6 +8,7 @@ newt_tar := newt-$(newt_version).tar.gz
+ newt_url := https://releases.pagure.org/newt/$(newt_tar)
+ newt_hash := 8d66ba6beffc3f786d4ccfee9d2b43d93484680ef8db9397a4fb70b5adbb6dbc
+ 
++newt_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ newt_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/npth b/modules/npth
+index e0f30c6..a43d626 100644
+--- a/modules/npth
++++ b/modules/npth
+@@ -14,6 +14,7 @@ npth_configure := ./configure \
+ 	--with-libgpg-error-prefix="$(INSTALL)" \
+ 	--disable-asm \
+ 
++npth_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ npth_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/pciutils b/modules/pciutils
+index 2ea5b9b..dfee3a0 100644
+--- a/modules/pciutils
++++ b/modules/pciutils
+@@ -16,6 +16,7 @@ pciutils_hash := 64293c6ab9318c40ef262b76d87bd9097531759752bac556e50979b1e63cfe6
+ # reproducible.  Otherwise the build path will be embedded
+ # in the library and executables.
+ 
++pciutils_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ pciutils_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/pinentry b/modules/pinentry
+index c0e93d7..a541ce0 100644
+--- a/modules/pinentry
++++ b/modules/pinentry
+@@ -33,6 +33,7 @@ pinentry_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++pinentry_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ pinentry_target := $(MAKE_JOBS) \
+ 	&& $(MAKE) -C $(build)/$(pinentry_dir) \
+ 		DESTDIR="$(INSTALL)" \
+diff --git a/modules/pixman b/modules/pixman
+index 65a2e20..198f8ac 100644
+--- a/modules/pixman
++++ b/modules/pixman
+@@ -13,6 +13,7 @@ pixman_configure := \
+ 	--prefix="/" \
+ 	--disable-gtk
+ 
++pixman_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ pixman_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/popt b/modules/popt
+index b3b0b04..242ae03 100644
+--- a/modules/popt
++++ b/modules/popt
+@@ -11,6 +11,7 @@ popt_configure := ./configure \
+ 	--prefix "/" \
+ 	--host i386-elf-linux \
+ 
++popt_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ popt_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/qrencode b/modules/qrencode
+index fb73c7b..afded70 100644
+--- a/modules/qrencode
++++ b/modules/qrencode
+@@ -14,6 +14,7 @@ qrencode_configure := ./configure \
+ 	--without-tools \
+ 	--host i386-elf-linux \
+ 
++qrencode_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ qrencode_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/slang b/modules/slang
+index a4ac84b..a338639 100644
+--- a/modules/slang
++++ b/modules/slang
+@@ -18,6 +18,7 @@ slang_configure := ./configure \
+   && mkdir -p src/elfobjs
+ 
+ # Disable parallel make for the install target
++slang_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ slang_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/tpmtotp b/modules/tpmtotp
+index 792dd51..02c6c10 100644
+--- a/modules/tpmtotp
++++ b/modules/tpmtotp
+@@ -11,6 +11,7 @@ tpmtotp_tar := tpmtotp-$(tpmtotp_version).tar.gz
+ tpmtotp_url := https://github.com/osresearch/tpmtotp/archive/v$(tpmtotp_version).tar.gz
+ tpmtotp_hash := e8205aa3d19e536080f5974ed06ab9a88c4c3f37870c2f6a3a08a2f39302c22c
+ 
++tpmtotp_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ tpmtotp_target := \
+ 	$(CROSS_TOOLS) \
+ 	CFLAGS="-I$(INSTALL)/include" \
+diff --git a/modules/util-linux b/modules/util-linux
+index e3377f6..a50bf40 100644
+--- a/modules/util-linux
++++ b/modules/util-linux
+@@ -22,6 +22,7 @@ util-linux_configure := ./configure \
+ 	--enable-libblkid \
+ 
+ 
++util-linux_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ util-linux_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/zlib b/modules/zlib
+index dbdb44e..a6290b2 100644
+--- a/modules/zlib
++++ b/modules/zlib
+@@ -12,6 +12,7 @@ zlib_configure := \
+ 	./configure \
+ 	--prefix="/" \
+ 
++zlib_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ zlib_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
D
D
Danny Milosavljevic wrote on 2 Oct 2019 23:15
[WIP v4 0/7] Add heads.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191002211602.16635-1-dannym@scratchpost.org
This adds heads to Guix. Heads is minimal Linux that runs as a coreboot or
LinuxBoot payload to provide a secure, flexible boot environment for laptops
and servers.

Heads uses checksums to make sure that all the components are what they are
supposed to be, at build time, at BOOT time and when resuming.

Therefore, it's difficult to replace stuff with our versions.
I'm not sure whether we should--since Heads is supposed to build the same
thing reproducibly everywhere.

A future version will be a variant which does replace Linux by Linux-libre,
but that also changes both the source hashes and the output (and thus the
output hashes).

Danny Milosavljevic (7):
gnu: Add musl-cross.
gnu: Add heads.
gnu: Add heads-linuxboot.
gnu: Add heads-qemu-linuxboot.
gnu: Add heads-coreboot.
gnu: Add heads-qemu-coreboot.
gnu: Add heads-kgpe-d16.

gnu/local.mk | 3 +
gnu/packages/heads.scm | 615 ++++++++++++++++++
.../patches/heads-kgpe-d16-nonalignment.patch | 23 +
.../patches/heads-make-environment.patch | 446 +++++++++++++
4 files changed, 1087 insertions(+)
create mode 100644 gnu/packages/heads.scm
create mode 100644 gnu/packages/patches/heads-kgpe-d16-nonalignment.patch
create mode 100644 gnu/packages/patches/heads-make-environment.patch
D
D
Danny Milosavljevic wrote on 2 Oct 2019 23:15
[WIP v4 1/7] gnu: Add musl-cross.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191002211602.16635-2-dannym@scratchpost.org
* gnu/packages/heads.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
gnu/local.mk | 1 +
gnu/packages/heads.scm | 124 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 125 insertions(+)
create mode 100644 gnu/packages/heads.scm

Toggle diff (142 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index b04a5d796e..01c726d8cf 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -246,6 +246,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/haskell-web.scm			\
   %D%/packages/haskell-xyz.scm			\
   %D%/packages/ham-radio.scm			\
+  %D%/packages/heads.scm			\
   %D%/packages/hexedit.scm			\
   %D%/packages/hugs.scm				\
   %D%/packages/hurd.scm				\
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
new file mode 100644
index 0000000000..b547a374e0
--- /dev/null
+++ b/gnu/packages/heads.scm
@@ -0,0 +1,124 @@
+(define-module (gnu packages heads)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages elf)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages cpio)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages virtualization))
+
+(define-public musl-cross
+  (let ((revision "1")
+        (commit "b7f2249b665705939dc4eca67d11553c72164f4b"))
+  (package
+    (name "musl-cross")
+    (version (git-version "0.1" revision commit))
+    (source
+          (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/GregorR/musl-cross")
+                   (commit "3b5b118f1cdddecda3f04b5005f69f962278fc1e")))
+             (file-name "musl-cross-checkout")
+             (sha256
+              (base32 "0pd1b7k4gwbvnyw0677p56d7j0xmv80k5iihkkjrd1mp9zdx90gj"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; No tests in main project.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda _
+             (setenv "SHELL" "bash")
+             (setenv "CONFIG_SHELL" "bash")
+             #t))
+         (add-after 'unpack 'unpack-dependencies
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (define (install-file* source-key destination-directory
+                                    destination-suffix)
+               (let* ((source-file (assoc-ref inputs source-key))
+                      (source-basename (basename source-file))
+                      (source-parts (string-split source-basename #\-))
+                      (drop (@ (srfi srfi-1) drop))
+                      (destination-file
+                       (string-join (drop source-parts 1) "-")))
+                 (copy-file source-file
+                  (string-append destination-directory "/"
+                                 destination-file destination-suffix))))
+             (for-each (lambda (name)
+                         (install-file* name "tarballs" ""))
+                       '("binutils" "target-gcc-5" "kernel-headers" "musl"))
+             (substitute* "config.sh"
+              (("^CC_BASE_PREFIX=.*")
+               (string-append "CC_BASE_PREFIX=" (assoc-ref outputs "out")
+                              "/crossgcc\n")))
+             ;; Note: Important: source/gcc-5.3.0/gcc/exec-tool.in
+             ;; Note: Important: source/kernel-headers-3.12.6-5/tools/install.sh
+             ;; Note: Important: move-if-change (twice)
+             ;; Make sure that shebangs are patched after new extractions.
+             (substitute* "defs.sh"
+              (("touch \"[$]2/extracted\"")
+               (string-append "touch \"$2/extracted\"
+for s in mkinstalldirs move-if-change compile depcomp callprocs configure \\
+mkdep compile libtool-ldflags config.guess install-sh missing config.sub \\
+config.rpath progtest.m4 lib-ld.m4 acx.m4 gen-fixed.sh mkheader.sh ylwrap \\
+merge.sh godeps.sh lock-and-run.sh print-sysroot-suffix.sh mkconfig.sh \\
+genmultilib exec-tool.in install.sh
+do
+  find . -name $s -exec sed -i -e 's;!/bin/sh;!" (assoc-ref inputs "bash")
+"/bin/sh;' '{}' ';'
+  find . -name $s -exec sed -i -e 's; /bin/sh; " (assoc-ref inputs "bash")
+"/bin/sh;' '{}' ';'
+done
+" )))
+             #t))
+         (replace 'build
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "./build.sh")))
+         (delete 'install))))
+    (native-inputs
+     `(("bash" ,bash)
+       ("flex" ,flex)
+       ("gmp" ,gmp)
+       ("mpfr" ,mpfr)
+       ("mpc" ,mpc)
+       ("binutils"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gnu/binutils/binutils-2.25.1.tar.bz2")
+           (sha256
+            (base32 "08lzmhidzc16af1zbx34f8cy4z7mzrswpdbhrb8shy3xxpflmcdm"))))
+       ("target-gcc-5"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.bz2")
+           (sha256
+            (base32 "1ny4smkp5bzs3cp8ss7pl6lk8yss0d9m4av1mvdp72r1x695akxq"))))
+       ("kernel-headers"
+        ,(origin
+           (method url-fetch)
+           (uri "http://ftp.barfooze.de/pub/sabotage/tarballs/kernel-headers-3.12.6-5.tar.xz")
+           (sha256
+            (base32 "0p43lvbpy69lbjmvq39g570imj0p8z791bhzrpdnp1nygwshj2wf"))))
+       ("musl"
+        ,(origin
+           (method url-fetch)
+           (uri "http://www.musl-libc.org/releases/musl-1.1.21.tar.gz")
+           (sha256
+            (base32 "0i2z52zgc86af1n1gjiz43hgd85mxjgvgn345zsybja9dxpvchn7"))))))
+    (home-page "https://github.com/osresearch/heads")
+    (synopsis "Musl-cross gcc 5 toolchain")
+    (description "Musl-cross toolchain: binutils, gcc 5 and musl.")
+    (license license:isc))))
D
D
Danny Milosavljevic wrote on 2 Oct 2019 23:15
[WIP v4 3/7] gnu: Add heads-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191002211602.16635-4-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-linuxboot): New variable.
---
gnu/packages/heads.scm | 46 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)

Toggle diff (54 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 311eeeb1a1..7d1f70a621 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -510,3 +510,49 @@ done
 payload to provide a secure, flexible boot environment for laptops and
 servers.")
     (license license:gpl2+))))
+
+(define-public heads-linuxboot
+  (package
+    (inherit heads)
+    (name "heads-linuxboot")
+    (arguments
+     (substitute-keyword-arguments (package-arguments heads)
+      ((#:phases phases)
+       `(modify-phases ,phases
+          (add-before 'unpack-heads-packages 'unpack-linuxboot
+            (lambda* (#:key inputs #:allow-other-keys)
+               (mkdir-p "build")
+               (copy-recursively (assoc-ref inputs "linuxboot") "build/linuxboot-git")
+               (copy-recursively (assoc-ref inputs "edk2") "build/linuxboot-git/edk2")
+               (invoke "chmod" "-R" "u+w" "build/linuxboot-git")
+               (chmod "build/linuxboot-git/Makefile" #o664)
+               (substitute* "build/linuxboot-git/dxe/Makefile"
+                (("/usr/bin/") ""))
+               #t))))))
+    (native-inputs
+     `(("edk2"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/linuxboot/edk2")
+                   (commit "UDK2018")
+                   (recursive? #t))) ; openssl
+             (file-name "edk2-checkout")
+             (sha256
+              (base32 "0crjx1hg1m5mir2qm96dbcc3glrnww3ni0bc9f370qmm337wzlhi"))))
+       ("libuuid" ,util-linux) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("nasm" ,nasm) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("python" ,python-2) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("acpica" ,acpica) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("file" ,file)
+       ("linuxboot"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/osresearch/linuxboot.git")
+                   (commit "b5376a441e8e85cbf722e943bb8294958e87c784")
+                   (recursive? #t)))
+             (file-name "linuxboot-checkout")
+             (sha256
+              (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
+       ,@(package-native-inputs heads)))))
D
D
Danny Milosavljevic wrote on 2 Oct 2019 23:15
[WIP v4 4/7] gnu: Add heads-qemu-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191002211602.16635-5-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-qemu-linuxboot): New variable.
---
gnu/packages/heads.scm | 9 +++++++++
1 file changed, 9 insertions(+)

Toggle diff (17 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 7d1f70a621..179dab1546 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -556,3 +556,12 @@ servers.")
              (sha256
               (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
        ,@(package-native-inputs heads)))))
+
+(define-public heads-qemu-linuxboot
+  (package
+    (inherit heads-linuxboot)
+    (name "heads-qemu-linuxboot")
+    (arguments
+     `(#:make-flags
+       '("BOARD=qemu-linuxboot")
+       ,@(package-arguments heads-linuxboot)))))
D
D
Danny Milosavljevic wrote on 2 Oct 2019 23:16
[WIP v4 6/7] gnu: Add heads-qemu-coreboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191002211602.16635-7-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-qemu-coreboot): New variable.
---
gnu/packages/heads.scm | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

Toggle diff (27 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 0b6a93d744..80e570b097 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -24,7 +24,8 @@
   #:use-module (gnu packages file)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages version-control)
-  #:use-module (gnu packages virtualization))
+  #:use-module (gnu packages virtualization)
+  #:use-module ((guix build utils) #:select (alist-replace)))
 
 (define-public musl-cross
   (let ((revision "1")
@@ -581,3 +582,12 @@ servers.")
     (native-inputs
      `(("file" ,file)
        ,@(package-native-inputs heads)))))
+
+(define-public heads-qemu-coreboot
+  (package
+    (inherit heads-coreboot)
+    (name "heads-qemu-coreboot")
+    (arguments
+     `(#:make-flags
+       '("BOARD=qemu-coreboot")
+       ,@(package-arguments heads-coreboot)))))
D
D
Danny Milosavljevic wrote on 2 Oct 2019 23:16
[WIP v4 5/7] gnu: Add heads-coreboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191002211602.16635-6-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-coreboot): New variable.
---
gnu/packages/heads.scm | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

Toggle diff (24 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 179dab1546..0b6a93d744 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -565,3 +565,19 @@ servers.")
      `(#:make-flags
        '("BOARD=qemu-linuxboot")
        ,@(package-arguments heads-linuxboot)))))
+
+(define heads-coreboot
+  (package
+    (inherit heads)
+    (name "heads-coreboot")
+    (arguments
+     (substitute-keyword-arguments (package-arguments heads)
+      ((#:phases phases)
+       `(modify-phases ,phases
+          (add-before 'unpack-heads-packages 'unpack-coreboot
+            (lambda* (#:key inputs #:allow-other-keys)
+               (mkdir-p "build")
+               #t))))))
+    (native-inputs
+     `(("file" ,file)
+       ,@(package-native-inputs heads)))))
D
D
Danny Milosavljevic wrote on 2 Oct 2019 23:16
[WIP v4 7/7] gnu: Add heads-kgpe-d16.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191002211602.16635-8-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-kgpe-d16): New variable.
* gnu/packages/patches/heads-kgpe-d16-nonalignment.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/heads.scm | 22 ++++++++++++++++++
.../patches/heads-kgpe-d16-nonalignment.patch | 23 +++++++++++++++++++
3 files changed, 46 insertions(+)
create mode 100644 gnu/packages/patches/heads-kgpe-d16-nonalignment.patch

Toggle diff (71 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index fb3c913f2c..10bac6c77b 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -948,6 +948,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/hdf-eos5-remove-gctp.patch		\
   %D%/packages/patches/hdf-eos5-fix-szip.patch			\
   %D%/packages/patches/hdf-eos5-fortrantests.patch		\
+  %D%/packages/patches/heads-kgpe-d16-nonalignment.patch	\
   %D%/packages/patches/heads-make-environment.patch		\
   %D%/packages/patches/higan-remove-march-native-flag.patch	\
   %D%/packages/patches/hubbub-sort-entities.patch		\
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 80e570b097..5e14c95775 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -591,3 +591,25 @@ servers.")
      `(#:make-flags
        '("BOARD=qemu-coreboot")
        ,@(package-arguments heads-coreboot)))))
+
+(define-public heads-kgpe-d16
+  (package
+    (inherit heads-coreboot)
+    (name "heads-kgpe-d16")
+    (source
+     (origin
+      (inherit (package-source heads-coreboot))
+      (patches (search-patches "heads-make-environment.patch"
+                               "heads-kgpe-d16-nonalignment.patch"))))
+    (native-inputs
+     (alist-replace "gnupg"
+       (list (origin
+         (method url-fetch)
+         (uri "https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-1.4.21.tar.bz2")
+         (sha256
+          (base32 "0xi2mshq8f6zbarb5f61c9w2qzwrdbjm4q8fqsrwlzc51h8a6ivb"))))
+      (package-native-inputs heads-coreboot)))
+    (arguments
+     `(#:make-flags
+       '("BOARD=kgpe-d16")
+       ,@(package-arguments heads-coreboot)))))
diff --git a/gnu/packages/patches/heads-kgpe-d16-nonalignment.patch b/gnu/packages/patches/heads-kgpe-d16-nonalignment.patch
new file mode 100644
index 0000000000..cbbab1ea40
--- /dev/null
+++ b/gnu/packages/patches/heads-kgpe-d16-nonalignment.patch
@@ -0,0 +1,23 @@
+Source: https://github.com/osresearch/heads/pull/478
+From 25113cb8c2f431bb0e0c038cbd2a306069159bcb Mon Sep 17 00:00:00 2001
+From: Francis Lam <flam@alum.mit.edu>
+Date: Sat, 10 Nov 2018 13:41:01 -0800
+Subject: [PATCH] Fix coreboot build for kgpe-d16
+
+---
+ modules/coreboot | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules/coreboot b/modules/coreboot
+index 7081fe08..7c62b6f3 100644
+--- a/modules/coreboot
++++ b/modules/coreboot
+@@ -16,7 +16,7 @@ CONFIG_COREBOOT_CONFIG ?= config/coreboot-$(BOARD).config
+ # Ensure that touching the config file will force a rebuild
+ $(build)/$(coreboot_dir)/.configured: $(CONFIG_COREBOOT_CONFIG)
+ 
+-EXTRA_FLAGS := -fdebug-prefix-map=$(pwd)=heads -gno-record-gcc-switches
++EXTRA_FLAGS := -fdebug-prefix-map=$(pwd)=heads -gno-record-gcc-switches -Wno-error=packed-not-aligned
+ 
+ coreboot_configure := \
+ 	mkdir -p "$(build)/$(coreboot_dir)" \
D
D
Danny Milosavljevic wrote on 2 Oct 2019 23:15
[WIP v4 2/7] gnu: Add heads.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191002211602.16635-3-dannym@scratchpost.org
* gnu/packages/heads.scm (heads): New variable.
* gnu/packages/patches/heads-make-environment.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/heads.scm | 388 +++++++++++++++
.../patches/heads-make-environment.patch | 446 ++++++++++++++++++
3 files changed, 835 insertions(+)
create mode 100644 gnu/packages/patches/heads-make-environment.patch

Toggle diff (878 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 01c726d8cf..fb3c913f2c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -948,6 +948,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/hdf-eos5-remove-gctp.patch		\
   %D%/packages/patches/hdf-eos5-fix-szip.patch			\
   %D%/packages/patches/hdf-eos5-fortrantests.patch		\
+  %D%/packages/patches/heads-make-environment.patch		\
   %D%/packages/patches/higan-remove-march-native-flag.patch	\
   %D%/packages/patches/hubbub-sort-entities.patch		\
   %D%/packages/patches/hurd-fix-eth-multiplexer-dependency.patch        \
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index b547a374e0..311eeeb1a1 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -4,8 +4,12 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix utils)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages assembly)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages flex)
@@ -13,8 +17,11 @@
   #:use-module (gnu packages elf)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages cpio)
+  #:use-module (gnu packages file)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages virtualization))
@@ -122,3 +129,384 @@ done
     (synopsis "Musl-cross gcc 5 toolchain")
     (description "Musl-cross toolchain: binutils, gcc 5 and musl.")
     (license license:isc))))
+
+(define heads
+  (let ((revision "1")
+        (commit "b7f2249b665705939dc4eca67d11553c72164f4b"))
+  (package
+    (name "heads")
+    (version (git-version "0.1" revision commit))
+    (source
+     (origin
+      (method git-fetch)
+      (uri (git-reference
+             (url "https://github.com/osresearch/heads.git")
+             (commit commit)))
+      (file-name (git-file-name name version))
+      (sha256
+       (base32
+        "0sgyqm4ss88hfp8miz40mw40kj7qp2khr7jcvscwv87bd5g9nwnx"))
+      (patches (search-patches "heads-make-environment.patch"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bash" ,bash)
+       ("git" ,git)
+       ("perl" ,perl)
+       ("cpio" ,cpio)
+       ("m4" ,m4)
+       ("bison" ,bison)
+       ("flex" ,flex)
+       ("curl" ,curl) ; unused
+       ("zlibx" ,zlib)
+       ("musl-cross" ,musl-cross)
+       ("elfutils" ,elfutils)
+       ("bc" ,bc)
+       ("findutils" ,findutils)
+       ("flashtools"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/flashtools.git")
+                 (commit "9acce09aeb635c5bef01843e495b95e75e8da135")))
+           (file-name "flashtools-checkout")
+           (sha256
+            (base32 "0r4gj3nzr67ycd39k1vjzxfzkp90yacrdgxhc1z5jfvxfq4x91c1"))))
+       ("tpmtotp"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/tpmtotp.git")
+                 (commit "18b860fdcf5a55537c8395b891f2b2a5c24fc00a")))
+           (file-name "tpmtotp-checkout")
+           (sha256
+            (base32 "112p5afkrbipr0d8x9r9mrxrr3xyf97s2y3f32p41vs951sksqnv"))))
+       ("msrtools"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/msr-tools.git")
+                 (commit "572ef8a2b873eda15a322daa48861140a078b92c")))
+           (file-name "msr-tools-checkout")
+           (sha256
+            (base32 "0an1ypj5pin9l413vn4gxzi3x6ir1rba9jv6n5gk6s9dq803lb6p"))))
+       ("coreboot-blobs"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-blobs-4.8.1.tar.xz")
+           (sha256
+            (base32 "15g222xj1zdn8i8qz0pw2jf28h66dljb1q5isw2ml05gwfd51ahq"))))
+       ("coreboot"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-4.8.1.tar.xz")
+           (sha256
+            (base32 "08xdd5drk8yd37a3z5hc81qmgsybv6201i28hcggxh980vdz9pgh"))))
+       ("linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.62.tar.xz")
+           (sha256
+            (base32 "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji"))))
+       ("musl" ; useless
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.musl-libc.org/releases/musl-1.1.15.tar.gz")
+           (sha256
+            (base32 "1ymhxkskivzph0q34zadwfglc5gyahqajm7chqqn2zraxv3lgr4p"))))
+       ("busybox"
+        ,(origin
+           (method url-fetch)
+           (uri "https://busybox.net/downloads/busybox-1.28.0.tar.bz2")
+           (sha256
+            (base32 "1701carjf02y7r3djm1yvyd5kzrcxm4szinp7agfv7fmvfvm6ib0"))))
+       ("zlib"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.zlib.net/zlib-1.2.11.tar.gz")
+           (sha256
+            (base32 "18dighcs333gsvajvvgqp8l4cx7h1x7yx9gd5xacnk80spyykrf3"))))
+       ("mbedtls"
+        ,(origin
+           (method url-fetch)
+           (uri "https://tls.mbed.org/download/mbedtls-2.4.2-gpl.tgz")
+           (sha256
+            (base32 "17r9qs585gqghcf5yavb1cnvsigl0f8r0k8rklr5a855hrajs7yh"))))
+       ("kexec-tools"
+        ,(origin
+           (method url-fetch)
+           (uri "https://kernel.org/pub/linux/utils/kernel/kexec/kexec-tools-2.0.16.tar.gz")
+           (sha256
+            (base32 "0fkg5y3wxvkqrjii90iz1i59qd6hhq7ar27f0sgv7jbppyczq5yg"))))
+       ("qrencode"
+        ,(origin
+           (method url-fetch)
+           (uri "https://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz")
+           (sha256
+            (base32 "0wiagx7i8p9zal53smf5abrnh9lr31mv0p36wg017401jrmf5577"))))
+       ("pciutils"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/software/utils/pciutils/pciutils-3.5.4.tar.xz")
+           (sha256
+            (base32 "0rpy7kkb2y89wmbcbfjjjxsk2x89v5xxhxib4vpl131ip5m3qab4"))))
+       ("util-linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/util-linux/v2.29/util-linux-2.29.2.tar.xz")
+           (sha256
+            (base32 "1qz81w8vzrmy8xn9yx7ls4amkbgwx6vr62pl6kv9g7r0g3ba9kmc"))))
+       ("flashrom"
+        ,(origin
+           (method url-fetch)
+           (uri "https://download.flashrom.org/releases/flashrom-1.0.tar.bz2")
+           (sha256
+            (base32 "0r7fkpfc8w51n8ffbhclj4wa3kwrk0ijv1acwpw5myx5bchzl0ip"))))
+       ("popt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://launchpad.net/popt/head/1.16/+download/popt-1.16.tar.gz")
+           (sha256
+            (base32 "1j2c61nn2n351nhj4d25mnf3vpiddcykq005w2h6kw79dwlysa77"))))
+       ("lvm2"
+        ,(origin
+           (method url-fetch)
+           (uri "https://mirrors.kernel.org/sourceware/lvm2/LVM2.2.02.168.tgz")
+           (sha256
+            (base32 "03b62hcsj9z37ckd8c21wwpm07s9zblq7grfh58yzcs1vp6x38r3"))))
+       ("cryptsetup"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/cryptsetup/v1.7/cryptsetup-1.7.3.tar.xz")
+           (sha256
+            (base32 "00nwd96m9yq4k3cayc04i5y7iakkzana35zxky6hpx2w8zl08axg"))))
+       ("libgpg-error"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.32.tar.bz2")
+           (sha256
+            (base32 "1jj08ns4sh1hmafqp1giskvdicdz18la516va26jycy27kkwaif3"))))
+       ("libgcrypt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.3.tar.bz2")
+           (sha256
+            (base32 "0z5gs1khzyknyfjr19k8gk4q148s6q987ya85cpn0iv70fz91v36"))))
+       ("libksba"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libksba/libksba-1.3.5.tar.bz2")
+           (sha256
+            (base32 "0h53q4sns1jz1pkmhcz5wp9qrfn9f5g9i3vjv6dafwzzlvblyi21"))))
+       ("libassuan"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libassuan/libassuan-2.5.1.tar.bz2")
+           (sha256
+            (base32 "0jb4nb4nrjr949gd3lw8lh4v5d6qigxaq6xwy24w5apjnhvnrya7"))))
+       ("npth"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/npth/npth-1.6.tar.bz2")
+           (sha256
+            (base32 "1lg2lkdd3z1s3rpyf88786l243adrzyk9p4q8z9n41ygmpcsp4qk"))))
+       ("libusb"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.21/libusb-1.0.21.tar.bz2")
+           (sha256
+            (base32 "0jw2n5kdnrqvp7zh792fd6mypzzfap6jp4gfcmq4n6c1kb79rkkx"))))
+       ("libusb-compat"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-compat-0.1/libusb-compat-0.1.5/libusb-compat-0.1.5.tar.bz2")
+           (sha256
+            (base32 "0nn5icrfm9lkhzw1xjvaks9bq3w6mjg86ggv3fn7kgi4nfvg8kj0"))))
+       ("dropbear"
+        ,(origin
+           (method url-fetch)
+           (uri "https://matt.ucc.asn.au/dropbear/releases/dropbear-2016.74.tar.bz2")
+           (sha256
+            (base32 "14c8f4gzixf0j9fkx68jgl85q7b05852kk0vf09gi6h0xmafl817"))))
+       ("pinentry"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/pinentry/pinentry-1.1.0.tar.bz2")
+           (sha256
+            (base32 "0w35ypl960pczg5kp6km3dyr000m1hf0vpwwlh72jjkjza36c1v8"))))
+       ("gnupg"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.10.tar.bz2")
+           (sha256
+            (base32 "05f9804g72pffdxgvxjmjzkfcpjg1x221g9rwcr8fi51hrxd77br"))))
+       ("slang"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.jedsoft.org/releases/slang/slang-2.3.1a.tar.bz2")
+           (sha256
+            (base32 "0dlcy0hn0j6cj9qj5x6hpb0axifnvzzmv5jqq0wq14fygw0c7w2l"))))
+       ("newt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://releases.pagure.org/newt/newt-0.52.20.tar.gz")
+           (sha256
+            (base32 "1g3dpfnvaw7vljbr7nzq1rl88d6r8cmrvvng9inphgzwxxmvlrld"))))
+
+       ;;; coreboot cross.
+
+       ("gmp"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gmp/gmp-6.1.2.tar.xz")
+           (sha256
+            (base32 "04hrwahdxyqdik559604r7wrj9ffklwvipgfxgj4ys4skbl6bdc7"))))
+       ("mpfr"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/mpfr/mpfr-3.1.5.tar.xz")
+           (sha256
+            (base32 "1g32l2fg8f62lcyzzh88y3fsh6rk539qc6ahhdgvx7wpnf1dwpq1"))))
+       ("mpc"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/mpc/mpc-1.0.3.tar.gz")
+           (sha256
+            (base32 "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))
+       ("binutils-2.30"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/binutils/binutils-2.30.tar.xz")
+           (sha256
+            (base32 "1rhshw4m5m2pjz8g15hpiwhp52kn0pj0b5dxy0v7lwigmspbhikf"))))
+       ("gcc-8"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gcc/gcc-8.1.0/gcc-8.1.0.tar.xz")
+           (sha256
+            (base32 "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x"))))
+       ;; Note: Non-coreboot heads really doesn't need that.
+       ("acpica-coreboot"
+        ,(origin
+           (method url-fetch)
+           (uri "https://acpica.org/sites/acpica/files/acpica-unix2-20180531.tar.gz")
+           (sha256
+            (base32 "0q7vg1nr51f3rg16vjh4glz361a64r6gpm46fqkl2jf4fq7g43g5"))))))
+    (arguments
+     `(#:tests? #f ; Toplevel makefile has no tests.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; For edk2 and kexec-tools.
+             ;; FIXME: musl *musl-cross*/x86_64-linux-musl/bin/x86_64-linux-musl-gcc || ./x86_64-linux-musl/x86_64-linux-musl/bin/musl-gcc.
+             (setenv "BUILD_CC" (string-append (assoc-ref inputs "musl-cross") "/crossgcc/x86_64-linux-musl/bin/x86_64-linux-musl-gcc"))
+             ;; Disable wget.
+             (setenv "WGET" "true")
+             ;; Work around mcheck.h problem (in glibc!?)
+             (substitute* "modules/popt"
+              (("[.]/configure") "CFLAGS=\"-D__END_DECLS -D__BEGIN_DECLS -D__THROW\" ./configure"))
+             #t))
+         (add-after 'unpack 'unpack-heads-packages
+           (lambda* (#:key inputs #:allow-other-keys)
+             (define (install-file* source-key destination-directory destination-suffix)
+               (let* ((source-file (assoc-ref inputs source-key))
+                      (source-basename (basename source-file))
+                      (source-parts (string-split source-basename #\-))
+                      (drop (@ (srfi srfi-1) drop))
+                      (destination-file
+                       (string-join (drop source-parts 1) "-")))
+                 (copy-file source-file
+                  (string-append destination-directory "/"
+                                 destination-file destination-suffix))
+                 ;(invoke "tar" "-xf" source-file "-C" "build")
+))
+             (mkdir-p "packages")
+             (setenv "V" "1") ; verbose
+             (setenv "GUIX_C_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
+             (setenv "GUIX_CPLUS_INCLUDE_PATH" (getenv "CPLUS_INCLUDE_PATH"))
+             (setenv "GUIX_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
+             (setenv "GUIX_CPATH" (getenv "CPATH"))
+             (for-each (lambda (name)
+                         (install-file* name "packages" ".tmp"))
+                       '("linux" "coreboot-blobs" "coreboot" "busybox" "zlib" "mbedtls" "kexec-tools" "qrencode" "pciutils" "util-linux" "flashrom" "popt" "lvm2" "cryptsetup" "libgpg-error" "libgcrypt" "libksba" "libassuan" "npth" "libusb" "libusb-compat" "dropbear" "pinentry" "gnupg" "slang" "newt" "musl"))
+             (mkdir-p "build")
+             (mkdir-p "build/musl-cross-git/tarballs")
+             (mkdir-p "build/coreboot-4.8.1/util/crossgcc/tarballs")
+             (for-each (lambda (name)
+                         (install-file* name "build/coreboot-4.8.1/util/crossgcc/tarballs" ""))
+                       '("gmp" "mpfr" "mpc" "binutils-2.30" "gcc-8" "acpica-coreboot"))
+             (copy-recursively (assoc-ref inputs "musl-cross") "build/musl-cross-git")
+             (copy-recursively (assoc-ref inputs "tpmtotp") "build/tpmtotp-git")
+             (copy-recursively (assoc-ref inputs "flashtools") "build/flashtools-0.0.1")
+             (copy-recursively (assoc-ref inputs "msrtools") "build/msrtools-git")
+
+             (setenv "MUSL_DIR" (assoc-ref inputs "musl-cross"))
+             (setenv "CROSS" (string-append (getenv "MUSL_DIR") "/crossgcc/x86_64-linux-musl/bin/x86_64-musl-linux-")) ; Note: Useless
+             (substitute* "Makefile"
+              ;; Disable our non-cross toolchain environment.
+              (("CROSS_TOOLS_NOCC := ")
+               ; CPP=" (getenv "CROSS") "cpp CXXCPP=" (getenv "CROSS") "cpp "
+               (string-append "CROSS_TOOLS_NOCC := C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH= CPATH= "))
+              ;; Disable git.
+              (("git submodule update --init")
+               "true submodule update --init")
+              ;; Re-enable our non-cross toolchain environment selectively.
+              (("^WGET.*")
+               (string-append "HOSTCC =" ; for busybox
+                              " C_INCLUDE_PATH=" (or (getenv "GUIX_C_INCLUDE_PATH") "")
+                              " CPLUS_INCLUDE_PATH=" (or (getenv "GUIX_CPLUS_INCLUDE_PATH") "")
+                              " CPATH=" (or (getenv "GUIX_CPATH") "")
+                              " LIBRARY_PATH=" (or (getenv "GUIX_LIBRARY_PATH") "")
+                              " gcc\n"
+                              "CC_FOR_BUILD = $(HOSTCC)\n" ; for libgpg-error
+                              "BUILD_CC = $(HOSTCC)\n")) ; for kexec-tools
+              ;; Disable git, patch shebangs, and selectively re-enable host compiler.
+              ;; (Note: $HOSTCC is too complicated for bash, for example
+              ;; HOSTCC="a=b c=d gcc", then invoking $HOSTCC won't work).
+              (("(git clone.*)." _ tar)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed applets/busybox.mkll applets/busybox.mksuid po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' -e 's;^\\(\\$$$$HOSTCC[^|]*\\);(echo \\1 | bash);' \"$$$$s\" ; fi ; done)
+" "true" (assoc-ref inputs "bash") (assoc-ref inputs "bash") (assoc-ref inputs "bash")))
+              (("(tar -xf.*)." _ tar)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed applets/busybox.mkll applets/busybox.mksuid  po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' -e 's;^\\(\\$$$$HOSTCC[^|]*\\);(echo \\1 | bash);' \"$$$$s\" ; fi ; done)
+" tar (assoc-ref inputs "bash") (assoc-ref inputs "bash") (assoc-ref inputs "bash"))))
+             ;(substitute* "modules/musl-cross"
+             ; (("/bin/echo") "echo"))
+             (call-with-output-file "patches/coreboot-4.8.1/9999-shell.patch"
+               (lambda (port)
+                 (format port "--- coreboot-4.8.1/util/crossgcc/buildgcc.orig 2019-09-13 14:45:12.463998974 +0200
++++ coreboot-4.8.1/util/crossgcc/buildgcc 2019-09-13 14:46:49.808268216 +0200
+@@ -462,6 +462,13 @@
+ 			}
+ 		done
+ 		touch \"${dir}/.unpack_success\"
++  for s in \"${dir}/Makefile\" \"${dir}/configure\" \"${dir}/config.sub\" \"${dir}/config.guess\" \"${dir}/mpn/cpp-ccas\" \"${dir}/mpn/m4-ccas\" \"${dir}/missing\" \"${dir}/\"*\"/configure\" \"${dir}/move-if-change\" \"${dir}/libgcc/mkheader.sh\" \"${dir}/gcc/genmultilib\"
++  do
++   if [ -f \"${s}\" ]
++   then
++    sed -i -e 's;/bin/sh\\>;~a/bin/sh;' \"${s}\"
++   fi
++  done
+ 	)
+ }
+ 
+" (assoc-ref inputs "bash"))))
+             #t))
+         (add-after 'install 'install-images
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (make-flags-assoc (map (lambda (x)
+                                             (string-split x #\=))
+                                           make-flags))
+                    (BOARD (car (assoc-ref make-flags-assoc "BOARD")))
+                    (out-images (string-append out "/libexec/heads/" BOARD "/images")))
+               (mkdir-p out-images)
+               (copy-recursively (string-append "build/" BOARD) out-images)
+               ;; Contains timestamp.
+               (delete-file (string-append out-images "/hashes.txt"))
+               #t))))))
+    (home-page "https://github.com/osresearch/heads")
+    (synopsis "Heads: coreboot/LinuxBoot payload")
+    (description "A minimal Linux that runs as a coreboot or LinuxBoot ROM
+payload to provide a secure, flexible boot environment for laptops and
+servers.")
+    (license license:gpl2+))))
diff --git a/gnu/packages/patches/heads-make-environment.patch b/gnu/packages/patches/heads-make-environment.patch
new file mode 100644
index 0000000000..f38d08ee51
--- /dev/null
+++ b/gnu/packages/patches/heads-make-environment.patch
@@ -0,0 +1,446 @@
+diff --git a/Makefile b/Makefile
+index cc5cac6..ae8d7e7 100644
+--- a/Makefile
++++ b/Makefile
+@@ -124,10 +124,14 @@ CROSS_TOOLS_NOCC := \
+ 
+ CROSS_TOOLS := \
+ 	CC="$(heads_cc)" \
++	CPP="$(CROSS)cpp" \
++	CXXCPP="$(CROSS)cpp" \
++	CC_FOR_BUILD="$(CC_FOR_BUILD)" \
++	BUILD_CC="$(BUILD_CC)" \
++	HOSTCC="$(HOSTCC)" \
+ 	$(CROSS_TOOLS_NOCC) \
+ 
+ 
+-
+ ifeq "$(CONFIG_COREBOOT)" "y"
+ all: $(build)/$(BOARD)/coreboot.rom
+ else ifeq "$(CONFIG_LINUXBOOT)" "y"
+@@ -348,7 +352,7 @@ define define_module =
+ 		echo "$(MAKE) \
+ 			-C \"$(build)/$($1_dir)\" \
+ 			$($1_target)" ;  \
+-		$(MAKE) \
++		$($1_make_environment) $(MAKE) \
+ 			-C "$(build)/$($1_dir)" \
+ 			$($1_target)  \
+ 	) \
+@@ -453,7 +457,7 @@ $(COREBOOT_UTIL_DIR)/inteltool/inteltool \
+ : $(build)/$(coreboot_base_dir)/.canary \
+ 	$(build)/$(musl_dir)/.build
+ 	+$(call do,MAKE,$(notdir $@),\
+-		$(MAKE) -C "$(dir $@)" $(CROSS_TOOLS) \
++		CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH= $(MAKE) -C "$(dir $@)" $(CROSS_TOOLS) \
+ 	)
+ 
+ # superio depends on zlib and pciutils
+diff --git a/modules/busybox b/modules/busybox
+index f8f8a83..4836780 100644
+--- a/modules/busybox
++++ b/modules/busybox
+@@ -11,6 +11,7 @@ busybox_hash := 604553b7dbd59ded9e3ad7c6af49ed2cff599adf3e54d9463e5e0027b362019c
+ busybox_configure := $(MAKE) CC="$(heads_cc)" oldconfig
+ busybox_config := config/busybox.config
+ busybox_output := busybox
++busybox_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ busybox_target := \
+ 	$(CROSS_TOOLS) \
+ 	$(MAKE_JOBS) \
+diff --git a/modules/cairo b/modules/cairo
+index 647ed2c..00f6cac 100644
+--- a/modules/cairo
++++ b/modules/cairo
+@@ -23,6 +23,7 @@ cairo_configure := \
+ 	&& mv libtool-2 libtool \
+ 	&& chmod 755 libtool
+ 
++cairo_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ cairo_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/cryptsetup b/modules/cryptsetup
+index 4cea7f3..d68da0c 100644
+--- a/modules/cryptsetup
++++ b/modules/cryptsetup
+@@ -20,6 +20,7 @@ cryptsetup_configure := ./configure \
+ 
+ # but after building, replace prefix so that they will be installed
+ # in the correct directory.
++cryptsetup_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ cryptsetup_target := \
+ 	$(MAKE_JOBS) \
+ 	&& $(MAKE) \
+diff --git a/modules/dropbear b/modules/dropbear
+index 998087c..834a3ef 100644
+--- a/modules/dropbear
++++ b/modules/dropbear
+@@ -19,6 +19,7 @@ dropbear_configure := ./configure \
+ 	--disable-wtmpx \
+ 	
+ dropbear_output := ssh scp dropbear
++dropbear_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ dropbear_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/fbwhiptail b/modules/fbwhiptail
+index f54a62d..1359677 100644
+--- a/modules/fbwhiptail
++++ b/modules/fbwhiptail
+@@ -6,6 +6,7 @@ fbwhiptail_version := git
+ fbwhiptail_dir := fbwhiptail
+ fbwhiptail_repo := https://source.puri.sm/coreboot/fbwhiptail.git
+ 
++fbwhiptail_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ fbwhiptail_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/flashrom b/modules/flashrom
+index 0a29b18..d695818 100644
+--- a/modules/flashrom
++++ b/modules/flashrom
+@@ -11,6 +11,7 @@ flashrom_tar := flashrom-$(flashrom_version).tar.bz2
+ flashrom_url := https://download.flashrom.org/releases/$(flashrom_tar)
+ flashrom_hash := 3702fa215ba5fb5af8e54c852d239899cfa1389194c1e51cb2a170c4dc9dee64
+ 
++flashrom_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ flashrom_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/flashtools b/modules/flashtools
+index d95c215..090362c 100644
+--- a/modules/flashtools
++++ b/modules/flashtools
+@@ -11,6 +11,7 @@ flashtools_tar := flashtools-$(flashtools_version).tar.gz
+ flashtools_url := https://github.com/osresearch/flashtools/archive/v$(flashtools_version).tar.gz
+ flashtools_hash := e8205aa3d19e536080f5974ed06ab9a88c4c3f37870c2f6a3a08a2f39302c22c
+ 
++flashtools_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ flashtools_target := \
+ 	$(CROSS_TOOLS) \
+ 	CFLAGS="-I$(INSTALL)/include" \
+diff --git a/modules/frotz b/modules/frotz
+index 611e04a..e2c2e22 100644
+--- a/modules/frotz
++++ b/modules/frotz
+@@ -8,6 +8,7 @@ frotz_hash := dbb5eb3bc95275dcb984c4bdbaea58bc1f1b085b20092ce6e86d9f0bf3ba858f
+ 
+ frotz_configure := touch .config
+ 
++frotz_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ frotz_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/gpg b/modules/gpg
+index 4d4440a..6a48664 100644
+--- a/modules/gpg
++++ b/modules/gpg
+@@ -39,6 +39,7 @@ gpg_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++gpg_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ gpg_target := $(MAKE_JOBS) \
+ 	&& $(MAKE) -C $(build)/$(gpg_dir) \
+ 		DESTDIR="$(INSTALL)" \
+diff --git a/modules/gpg2 b/modules/gpg2
+index 318a4cd..522e518 100644
+--- a/modules/gpg2
++++ b/modules/gpg2
+@@ -50,6 +50,7 @@ gpg2_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++gpg2_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ gpg2_target := $(MAKE_JOBS) \
+ 	&& $(MAKE) -C $(build)/$(gpg2_dir) \
+ 		DESTDIR="$(INSTALL)" \
+diff --git a/modules/kexec b/modules/kexec
+index d2311c2..b507d81 100644
+--- a/modules/kexec
++++ b/modules/kexec
+@@ -14,6 +14,7 @@ kexec_configure := ./configure \
+ 	--without-lzma \
+ 	&& $(MAKE) clean
+ 
++kexec_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ kexec_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libassuan b/modules/libassuan
+index 3c4e319..6138ec2 100644
+--- a/modules/libassuan
++++ b/modules/libassuan
+@@ -14,6 +14,7 @@ libassuan_configure := ./configure \
+ 	--with-libgpg-error-prefix="$(INSTALL)" \
+ 	--disable-asm \
+ 
++libassuan_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libassuan_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libgcrypt b/modules/libgcrypt
+index aa7e1ef..384f672 100644
+--- a/modules/libgcrypt
++++ b/modules/libgcrypt
+@@ -14,6 +14,7 @@ libgcrypt_configure := ./configure \
+ 	--disable-asm \
+ 	--disable-nls \
+ 	
++libgcrypt_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libgcrypt_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libgpg-error b/modules/libgpg-error
+index 752e11a..3d4d217 100644
+--- a/modules/libgpg-error
++++ b/modules/libgpg-error
+@@ -16,6 +16,7 @@ libgpg-error_configure := ./configure \
+ 	--disable-tests \
+ 	--disable-asm \
+ 
++libgpg-error_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH= CC_FOR_BUILD="$(CC_FOR_BUILD)"
+ libgpg-error_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libksba b/modules/libksba
+index d352913..bd1835b 100644
+--- a/modules/libksba
++++ b/modules/libksba
+@@ -14,6 +14,7 @@ libksba_configure := ./configure \
+ 	--with-libgpg-error-prefix="$(INSTALL)" \
+ 	--disable-asm \
+ 
++libksba_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libksba_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libpng b/modules/libpng
+index d6d9e65..33306e2 100644
+--- a/modules/libpng
++++ b/modules/libpng
+@@ -12,6 +12,7 @@ libpng_configure := \
+         --host i386-elf-linux \
+ 	--prefix="/" \
+ 
++libpng_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libpng_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libremkey-hotp-verification b/modules/libremkey-hotp-verification
+index c9b9d45..e7fab7d 100644
+--- a/modules/libremkey-hotp-verification
++++ b/modules/libremkey-hotp-verification
+@@ -6,6 +6,7 @@ libremkey-hotp-verification_version := git
+ libremkey-hotp-verification_dir := libremkey-hotp-verification
+ libremkey-hotp-verification_repo := --recursive https://github.com/Nitrokey/nitrokey-hotp-verification
+ 
++libremkey-hotp-verification_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libremkey-hotp-verification_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libusb b/modules/libusb
+index b7fe959..fe274e9 100644
+--- a/modules/libusb
++++ b/modules/libusb
+@@ -19,6 +19,7 @@ libusb_configure := ./configure\
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
+ 
++libusb_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libusb_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/libusb-compat b/modules/libusb-compat
+index f95854e..78033ef 100644
+--- a/modules/libusb-compat
++++ b/modules/libusb-compat
+@@ -22,6 +22,7 @@ libusb-compat_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++libusb-compat_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ libusb-compat_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/lvm2 b/modules/lvm2
+index 91f0f53..def7544 100644
+--- a/modules/lvm2
++++ b/modules/lvm2
+@@ -34,6 +34,7 @@ lvm2_configure := \
+ 	--with-cluster=none \
+ 
+ # not sure why LIB_SUFFIX is not defined in the cross build
++lvm2_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ lvm2_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/mbedtls b/modules/mbedtls
+index d844b16..2611866 100644
+--- a/modules/mbedtls
++++ b/modules/mbedtls
+@@ -10,6 +10,7 @@ mbedtls_libraries := library/libmbedcrypto.so.0
+ 
+ mbedtls_configure :=
+ 
++mbedtls_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ mbedtls_target := \
+ 	SHARED=1 \
+ 	DESTDIR=$(INSTALL) \
+diff --git a/modules/msrtools b/modules/msrtools
+index 9adfab0..85b5954 100644
+--- a/modules/msrtools
++++ b/modules/msrtools
+@@ -11,6 +11,7 @@ msrtools_tar := msr-tools-$(msrtools_version).tar.gz
+ msrtools_url := https://github.com/intel/msr-tools/archive/msr-tools-$(msrtools_version).tar.gz
+ msrtools_hash := e8205aa3d19e536080f5974ed06ab9a88c4c3f37870c2f6a3a08a2f39302c22c
+ 
++msrtools_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ msrtools_target := \
+ 	$(CROSS_TOOLS) \
+ 	CFLAGS="-I$(INSTALL)/include" \
+diff --git a/modules/musl b/modules/musl
+index eec76de..89b9a0f 100644
+--- a/modules/musl
++++ b/modules/musl
+@@ -24,6 +24,7 @@ musl_configure := ./configure \
+ 	--enable-gcc-wrapper \
+ 	--enable-shared \
+ 
++musl_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ musl_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS_NOCC) \
+diff --git a/modules/newt b/modules/newt
+index cc6341d..bad67c7 100644
+--- a/modules/newt
++++ b/modules/newt
+@@ -8,6 +8,7 @@ newt_tar := newt-$(newt_version).tar.gz
+ newt_url := https://releases.pagure.org/newt/$(newt_tar)
+ newt_hash := 8d66ba6beffc3f786d4ccfee9d2b43d93484680ef8db9397a4fb70b5adbb6dbc
+ 
++newt_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ newt_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/npth b/modules/npth
+index e0f30c6..a43d626 100644
+--- a/modules/npth
++++ b/modules/npth
+@@ -14,6 +14,7 @@ npth_configure := ./configure \
+ 	--with-libgpg-error-prefix="$(INSTALL)" \
+ 	--disable-asm \
+ 
++npth_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ npth_target := $(MAKE_JOBS) \
+ 	DESTDIR="$(INSTALL)" \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/pciutils b/modules/pciutils
+index 2ea5b9b..dfee3a0 100644
+--- a/modules/pciutils
++++ b/modules/pciutils
+@@ -16,6 +16,7 @@ pciutils_hash := 64293c6ab9318c40ef262b76d87bd9097531759752bac556e50979b1e63cfe6
+ # reproducible.  Otherwise the build path will be embedded
+ # in the library and executables.
+ 
++pciutils_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ pciutils_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/pinentry b/modules/pinentry
+index c0e93d7..a541ce0 100644
+--- a/modules/pinentry
++++ b/modules/pinentry
+@@ -33,6 +33,7 @@ pinentry_configure := ./configure \
+ # Run one build to generate the executables with the pre-defined
+ # exec_prefix and datarootdir, then a second make to install the binaries
+ # into our actual target location
++pinentry_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ pinentry_target := $(MAKE_JOBS) \
+ 	&& $(MAKE) -C $(build)/$(pinentry_dir) \
+ 		DESTDIR="$(INSTALL)" \
+diff --git a/modules/pixman b/modules/pixman
+index 65a2e20..198f8ac 100644
+--- a/modules/pixman
++++ b/modules/pixman
+@@ -13,6 +13,7 @@ pixman_configure := \
+ 	--prefix="/" \
+ 	--disable-gtk
+ 
++pixman_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ pixman_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/popt b/modules/popt
+index b3b0b04..242ae03 100644
+--- a/modules/popt
++++ b/modules/popt
+@@ -11,6 +11,7 @@ popt_configure := ./configure \
+ 	--prefix "/" \
+ 	--host i386-elf-linux \
+ 
++popt_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ popt_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/qrencode b/modules/qrencode
+index fb73c7b..afded70 100644
+--- a/modules/qrencode
++++ b/modules/qrencode
+@@ -14,6 +14,7 @@ qrencode_configure := ./configure \
+ 	--without-tools \
+ 	--host i386-elf-linux \
+ 
++qrencode_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ qrencode_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/slang b/modules/slang
+index a4ac84b..a338639 100644
+--- a/modules/slang
++++ b/modules/slang
+@@ -18,6 +18,7 @@ slang_configure := ./configure \
+   && mkdir -p src/elfobjs
+ 
+ # Disable parallel make for the install target
++slang_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ slang_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/tpmtotp b/modules/tpmtotp
+index 792dd51..02c6c10 100644
+--- a/modules/tpmtotp
++++ b/modules/tpmtotp
+@@ -11,6 +11,7 @@ tpmtotp_tar := tpmtotp-$(tpmtotp_version).tar.gz
+ tpmtotp_url := https://github.com/osresearch/tpmtotp/archive/v$(tpmtotp_version).tar.gz
+ tpmtotp_hash := e8205aa3d19e536080f5974ed06ab9a88c4c3f37870c2f6a3a08a2f39302c22c
+ 
++tpmtotp_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ tpmtotp_target := \
+ 	$(CROSS_TOOLS) \
+ 	CFLAGS="-I$(INSTALL)/include" \
+diff --git a/modules/util-linux b/modules/util-linux
+index e3377f6..a50bf40 100644
+--- a/modules/util-linux
++++ b/modules/util-linux
+@@ -22,6 +22,7 @@ util-linux_configure := ./configure \
+ 	--enable-libblkid \
+ 
+ 
++util-linux_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ util-linux_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
+diff --git a/modules/zlib b/modules/zlib
+index dbdb44e..a6290b2 100644
+--- a/modules/zlib
++++ b/modules/zlib
+@@ -12,6 +12,7 @@ zlib_configure := \
+ 	./configure \
+ 	--prefix="/" \
+ 
++zlib_make_environment := CPATH= C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH=
+ zlib_target := \
+ 	$(MAKE_JOBS) \
+ 	$(CROSS_TOOLS) \
D
D
Danny Milosavljevic wrote on 7 Oct 2019 15:50
Re: [WIP v4 1/7] gnu: Add musl-cross.
(address . 37466@debbugs.gnu.org)
20191007154955.4a338a13@scratchpost.org
Hi,

in two weeks, if there are no objections, I'll push (only) musl-cross to guix
master. It is the main thing you have to have on Guix so you can compile
Heads at all (even manually)--and I didn't modify it in some weeks now.
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl2bQowACgkQ5xo1VCww
uqVY7wf/axArj1qs8iKPofT0lkaNoSOWH+ysrUJI4wlQUgnZJfuNR54pwcPYMwMI
baH+7zPi8d7YUxGV6f1sfsRYAIvPpkNYdyJp6QltTcz4cviObAQ9LUqA49FIY53T
3pVatsYWfU7uwUbPtUZkVXHNfGCxkjWjY662LAh3niy5JCgJdP86DovAQE6hr8fp
Y8ohtHnqD+7n+TAwf7+1emd6wptjr18eSNby7v5bzOEjK86/VNcYeipLwx8yKG8t
WMI/3Dvj4oJwHgQ+2d+rRfay1P/0l4T8iu6F6M2d4vWkop8EAALwdcfSH715ybZU
SoaySJo6Mpg5l4+AasRZYEEMbjAxKA==
=D+Ey
-----END PGP SIGNATURE-----


D
D
Danny Milosavljevic wrote on 2 May 2020 17:52
Re: [bug#37466] [WIP v4 1/7] gnu: Add musl-cross.
(address . 37466@debbugs.gnu.org)
20200502175218.0cbed37a@scratchpost.org
Pushed musl-cross to guix master as commit f7228e317703808a8a193f6db8a3cb6ba5380f2f.
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl6tlzIACgkQ5xo1VCww
uqXonAf/SRdaDNkfuCXL5q65ocY1qe8Iazr9niskQ2IEBsR/AqZ4ASnxrvVh5T3h
Qy9IE8PifxiPcFkrIKqzuVp9taQZN9OrNLU0+SioLaPPQVI6hb+nDiaHJ5WEZHGJ
Flt5/e943e66Yi/GFjzGGCraHZW+AMsj7C3t35HDneyS9QoXy7pClE8JNYoFKObU
aWpW1Di3jV9mBPfAtuwwgO6ujhqjYibZKuZfBJBLvHgc8vwb0VMgRi0c0HQS1qW/
rrrbeLQy5DtIsfF/z30nwqs6mICiZxLWGwvCddWyKIqw431ePYlLKNEdgR//i8zV
PdYGV1sM4iS2eWqtwBYP5tubcxP6dw==
=wJWa
-----END PGP SIGNATURE-----


D
D
Danny Milosavljevic wrote on 2 May 2020 19:11
[WIP v5 1/8] gnu: Add elfutils@0.174.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200502171118.19989-2-dannym@scratchpost.org
* gnu/packages/heads.scm (elfutils-0.174): New variable.
---
gnu/packages/heads.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (21 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index b28433431c..86ab487b0f 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -161,3 +161,16 @@ done
     (synopsis "Musl-cross gcc 5 toolchain")
     (description "Musl-cross toolchain: binutils, gcc 5 and musl.")
     (license license:isc))))
+
+(define elfutils-0.174
+  (package
+    (inherit elfutils)
+    (version "0.174")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://sourceware.org/elfutils/ftp/"
+                                  version "/elfutils-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "12nhr8zrw4sjzrvpf38vl55bq5nm05qkd7nq76as443f0xq7xwnd"))
+              (patches (search-patches "elfutils-tests-ptrace.patch"))))))
D
D
Danny Milosavljevic wrote on 2 May 2020 19:11
[WIP v5 0/8] Add heads.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200502171118.19989-1-dannym@scratchpost.org
Danny Milosavljevic (8):
gnu: Add elfutils@0.174.
gnu: Add heads.
gnu: Add heads-linuxboot.
gnu: Add heads-qemu-linuxboot.
gnu: Add heads-coreboot.
gnu: Add heads-qemu-coreboot.
gnu: Add heads-kgpe-d16.
gnu: Add heads-diesel.

gnu/packages/heads.scm | 523 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 523 insertions(+)
D
D
Danny Milosavljevic wrote on 2 May 2020 19:11
[WIP v5 3/8] gnu: Add heads-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200502171118.19989-4-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-linuxboot): New variable.
---
gnu/packages/heads.scm | 46 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)

Toggle diff (54 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 3428573836..48030f8ed5 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -565,3 +565,49 @@ done
 payload to provide a secure, flexible boot environment for laptops and
 servers.")
     (license license:gpl2+))))
+
+(define heads-linuxboot
+  (package
+    (inherit heads)
+    (name "heads-linuxboot")
+    (arguments
+     (substitute-keyword-arguments (package-arguments heads)
+      ((#:phases phases)
+       `(modify-phases ,phases
+          (add-before 'unpack-heads-packages 'unpack-linuxboot
+            (lambda* (#:key inputs #:allow-other-keys)
+               (mkdir-p "build")
+               (copy-recursively (assoc-ref inputs "linuxboot") "build/linuxboot-git")
+               (copy-recursively (assoc-ref inputs "edk2") "build/linuxboot-git/edk2")
+               (invoke "chmod" "-R" "u+w" "build/linuxboot-git")
+               (chmod "build/linuxboot-git/Makefile" #o664)
+               (substitute* "build/linuxboot-git/dxe/Makefile"
+                (("/usr/bin/") ""))
+               #t))))))
+    (native-inputs
+     `(("edk2"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/linuxboot/edk2")
+                   (commit "UDK2018")
+                   (recursive? #t))) ; openssl
+             (file-name "edk2-checkout")
+             (sha256
+              (base32 "0crjx1hg1m5mir2qm96dbcc3glrnww3ni0bc9f370qmm337wzlhi"))))
+       ("libuuid" ,util-linux) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("nasm" ,nasm) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("python" ,python-2) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("acpica" ,acpica) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("file" ,file)
+       ("linuxboot"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/osresearch/linuxboot.git")
+                   (commit "b5376a441e8e85cbf722e943bb8294958e87c784")
+                   (recursive? #t)))
+             (file-name "linuxboot-checkout")
+             (sha256
+              (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
+       ,@(package-native-inputs heads)))))
D
D
Danny Milosavljevic wrote on 2 May 2020 19:11
[WIP v5 4/8] gnu: Add heads-qemu-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200502171118.19989-5-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-qemu-linuxboot): New variable.
---
gnu/packages/heads.scm | 9 +++++++++
1 file changed, 9 insertions(+)

Toggle diff (17 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 48030f8ed5..78c5aa23f9 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -611,3 +611,12 @@ servers.")
              (sha256
               (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
        ,@(package-native-inputs heads)))))
+
+(define-public heads-qemu-linuxboot
+  (package
+    (inherit heads-linuxboot)
+    (name "heads-qemu-linuxboot")
+    (arguments
+     `(#:make-flags
+       '("BOARD=qemu-linuxboot")
+       ,@(package-arguments heads-linuxboot)))))
D
D
Danny Milosavljevic wrote on 2 May 2020 19:11
[WIP v5 5/8] gnu: Add heads-coreboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200502171118.19989-6-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-coreboot): New variable.
---
gnu/packages/heads.scm | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

Toggle diff (24 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 78c5aa23f9..f6482d5f5a 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -620,3 +620,19 @@ servers.")
      `(#:make-flags
        '("BOARD=qemu-linuxboot")
        ,@(package-arguments heads-linuxboot)))))
+
+(define heads-coreboot
+  (package
+    (inherit heads)
+    (name "heads-coreboot")
+    (arguments
+     (substitute-keyword-arguments (package-arguments heads)
+      ((#:phases phases)
+       `(modify-phases ,phases
+          (add-before 'unpack-heads-packages 'unpack-coreboot
+            (lambda* (#:key inputs #:allow-other-keys)
+               (mkdir-p "build")
+               #t))))))
+    (native-inputs
+     `(("file" ,file)
+       ,@(package-native-inputs heads)))))
D
D
Danny Milosavljevic wrote on 2 May 2020 19:11
[WIP v5 8/8] gnu: Add heads-diesel.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200502171118.19989-9-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-diesel): New variable.
---
gnu/packages/heads.scm | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

Toggle diff (25 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index e42dc66c6c..10932967b5 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -667,3 +667,20 @@ servers.")
      `(#:make-flags
        '("BOARD=kgpe-d16")
        ,@(package-arguments heads-coreboot)))))
+
+(define-public heads-diesel
+  (package
+    (inherit heads-coreboot)
+    (name "heads-diesel")
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-extra-fv
+           (lambda _
+             (substitute* "edk2/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c"
+              (("ProduceFVBProtocolOnBuffer.*")
+               "\n"))
+             #t)))
+       #:make-flags
+       '("BOARD=diesel")
+       ,@(package-arguments heads-coreboot)))))
D
D
Danny Milosavljevic wrote on 2 May 2020 19:11
[WIP v5 7/8] gnu: Add heads-kgpe-d16.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200502171118.19989-8-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-kgpe-d16): New variable.
---
gnu/packages/heads.scm | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

Toggle diff (30 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 4e3d2ba216..e42dc66c6c 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -645,3 +645,25 @@ servers.")
      `(#:make-flags
        '("BOARD=qemu-coreboot")
        ,@(package-arguments heads-coreboot)))))
+
+(define-public heads-kgpe-d16
+  (package
+    (inherit heads-coreboot)
+    (name "heads-kgpe-d16")
+    (source
+     (origin
+      (inherit (package-source heads-coreboot))
+      (patches (search-patches "heads-make-environment.patch"
+                               "heads-kgpe-d16-nonalignment.patch"))))
+    (native-inputs
+     (alist-replace "gnupg"
+       (list (origin
+         (method url-fetch)
+         (uri "https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-1.4.21.tar.bz2")
+         (sha256
+          (base32 "0xi2mshq8f6zbarb5f61c9w2qzwrdbjm4q8fqsrwlzc51h8a6ivb"))))
+      (package-native-inputs heads-coreboot)))
+    (arguments
+     `(#:make-flags
+       '("BOARD=kgpe-d16")
+       ,@(package-arguments heads-coreboot)))))
D
D
Danny Milosavljevic wrote on 2 May 2020 19:11
[WIP v5 2/8] gnu: Add heads.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200502171118.19989-3-dannym@scratchpost.org
* gnu/packages/heads.scm (heads): New variable.
---
gnu/packages/heads.scm | 391 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 391 insertions(+)

Toggle diff (399 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 86ab487b0f..3428573836 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -174,3 +174,394 @@ done
                (base32
                 "12nhr8zrw4sjzrvpf38vl55bq5nm05qkd7nq76as443f0xq7xwnd"))
               (patches (search-patches "elfutils-tests-ptrace.patch"))))))
+
+(define heads
+  (let ((revision "2")
+        (commit "00a1a2bef6672f04cb69212cc657639c3cf476a4"))
+  (package
+    (name "heads")
+    (version (git-version "0.1" revision commit))
+    (source
+     (origin
+      (method git-fetch)
+      (uri (git-reference
+             (url "https://github.com/osresearch/heads.git")
+             (commit commit)))
+      (file-name (git-file-name name version))
+      (sha256
+       (base32
+        "0phgqpwriky6fl7xrvkfhrnbkmb3yf3gr924bfn0gg9abwjlvymh"))
+      (patches (search-patches "heads-make-environment.patch"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bash" ,bash)
+       ("git" ,git)
+       ("perl" ,perl)
+       ("cpio" ,cpio)
+       ("m4" ,m4)
+       ("bison" ,bison)
+       ("flex" ,flex)
+       ("curl" ,curl) ; unused
+       ("zlibx" ,zlib)
+       ("musl-cross" ,musl-cross)
+       ("target-musl-cross"
+        ,(origin
+          (method url-fetch)
+          (uri "https://github.com/richfelker/musl-cross-make/archive/38e52db8358c043ae82b346a2e6e66bc86a53bc1.tar.gz")
+          (file-name "musl-cross-38e52db8358c043ae82b346a2e6e66bc86a53bc1.tar.gz")
+          (sha256
+           (base32
+            "0071ml3d42w8m59dc1zvl9pk931zcxsyflqacnwg5c6s7mnmvf5l"))))
+       ;; Ours would be too new for musl-cross binutils.
+       ;; See also https://bbs.archlinux.org/viewtopic.php?id=242682
+       ("elfutils" ,elfutils-0.174)
+       ("bc" ,bc)
+       ("findutils" ,findutils)
+       ("flashtools"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/flashtools.git")
+                 (commit "9acce09aeb635c5bef01843e495b95e75e8da135")))
+           (file-name "flashtools-checkout")
+           (sha256
+            (base32 "0r4gj3nzr67ycd39k1vjzxfzkp90yacrdgxhc1z5jfvxfq4x91c1"))))
+       ("tpmtotp"
+        ,(origin
+           (method url-fetch)
+           (uri "https://github.com/osresearch/tpmtotp/archive/18b860fdcf5a55537c8395b891f2b2a5c24fc00a.tar.gz")
+           (file-name "tpmtotp-18b860fdcf5a55537c8395b891f2b2a5c24fc00a.tar.gz")
+           (sha256
+            (base32 "0v30biwwqyqf06xnhmnwwjgb77m3476fvp8d4823x0xgwjqg50hh"))))
+       ("msrtools"
+        ,(origin
+           (method url-fetch)
+           (uri "https://github.com/osresearch/msr-tools/archive/572ef8a2b873eda15a322daa48861140a078b92c.tar.gz")
+           (file-name "msr-tools-572ef8a2b873eda15a322daa48861140a078b92c.tar.gz")
+           (sha256
+            (base32 "1h3a1rai47r0dxiiv0i3xj0fjng15n6sxj8mw9gj0154s284fmc0"))))
+       ("coreboot-blobs"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-blobs-4.8.1.tar.xz")
+           (sha256
+            (base32 "15g222xj1zdn8i8qz0pw2jf28h66dljb1q5isw2ml05gwfd51ahq"))))
+       ("coreboot"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-4.8.1.tar.xz")
+           (sha256
+            (base32 "08xdd5drk8yd37a3z5hc81qmgsybv6201i28hcggxh980vdz9pgh"))))
+       ("linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.62.tar.xz")
+           (sha256
+            (base32 "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji"))))
+       ("musl" ; useless
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.musl-libc.org/releases/musl-1.1.15.tar.gz")
+           (sha256
+            (base32 "1ymhxkskivzph0q34zadwfglc5gyahqajm7chqqn2zraxv3lgr4p"))))
+       ("busybox"
+        ,(origin
+           (method url-fetch)
+           (uri "https://busybox.net/downloads/busybox-1.28.0.tar.bz2")
+           (sha256
+            (base32 "1701carjf02y7r3djm1yvyd5kzrcxm4szinp7agfv7fmvfvm6ib0"))))
+       ("zlib"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.zlib.net/zlib-1.2.11.tar.gz")
+           (sha256
+            (base32 "18dighcs333gsvajvvgqp8l4cx7h1x7yx9gd5xacnk80spyykrf3"))))
+       ("mbedtls"
+        ,(origin
+           (method url-fetch)
+           (uri "https://tls.mbed.org/download/mbedtls-2.4.2-gpl.tgz")
+           (sha256
+            (base32 "17r9qs585gqghcf5yavb1cnvsigl0f8r0k8rklr5a855hrajs7yh"))))
+       ("kexec-tools"
+        ,(origin
+           (method url-fetch)
+           (uri "https://kernel.org/pub/linux/utils/kernel/kexec/kexec-tools-2.0.20.tar.gz")
+           (sha256
+            (base32 "05ksnlzal3sfnix9qds6qql1sjn3fxbdwgp3ncxxxjg032cdf5nb"))))
+       ("qrencode"
+        ,(origin
+           (method url-fetch)
+           (uri "https://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz")
+           (sha256
+            (base32 "0wiagx7i8p9zal53smf5abrnh9lr31mv0p36wg017401jrmf5577"))))
+       ("pciutils"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/software/utils/pciutils/pciutils-3.5.4.tar.xz")
+           (sha256
+            (base32 "0rpy7kkb2y89wmbcbfjjjxsk2x89v5xxhxib4vpl131ip5m3qab4"))))
+       ("util-linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/util-linux/v2.29/util-linux-2.29.2.tar.xz")
+           (sha256
+            (base32 "1qz81w8vzrmy8xn9yx7ls4amkbgwx6vr62pl6kv9g7r0g3ba9kmc"))))
+       ("flashrom"
+        ,(origin
+           (method url-fetch)
+           (uri "https://download.flashrom.org/releases/flashrom-v1.2.tar.bz2")
+           (sha256
+            (base32 "0ax4kqnh7kd3z120ypgp73qy1knz47l6qxsqzrfkd97mh5cdky71"))))
+       ("popt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://launchpad.net/popt/head/1.16/+download/popt-1.16.tar.gz")
+           (sha256
+            (base32 "1j2c61nn2n351nhj4d25mnf3vpiddcykq005w2h6kw79dwlysa77"))))
+       ("lvm2"
+        ,(origin
+           (method url-fetch)
+           (uri "https://mirrors.kernel.org/sourceware/lvm2/LVM2.2.02.168.tgz")
+           (sha256
+            (base32 "03b62hcsj9z37ckd8c21wwpm07s9zblq7grfh58yzcs1vp6x38r3"))))
+       ("cryptsetup"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/cryptsetup/v1.7/cryptsetup-1.7.3.tar.xz")
+           (sha256
+            (base32 "00nwd96m9yq4k3cayc04i5y7iakkzana35zxky6hpx2w8zl08axg"))))
+       ("libgpg-error"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.32.tar.bz2")
+           (sha256
+            (base32 "1jj08ns4sh1hmafqp1giskvdicdz18la516va26jycy27kkwaif3"))))
+       ("libgcrypt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.3.tar.bz2")
+           (sha256
+            (base32 "0z5gs1khzyknyfjr19k8gk4q148s6q987ya85cpn0iv70fz91v36"))))
+       ("libksba"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libksba/libksba-1.3.5.tar.bz2")
+           (sha256
+            (base32 "0h53q4sns1jz1pkmhcz5wp9qrfn9f5g9i3vjv6dafwzzlvblyi21"))))
+       ("libassuan"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libassuan/libassuan-2.5.1.tar.bz2")
+           (sha256
+            (base32 "0jb4nb4nrjr949gd3lw8lh4v5d6qigxaq6xwy24w5apjnhvnrya7"))))
+       ("npth"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/npth/npth-1.6.tar.bz2")
+           (sha256
+            (base32 "1lg2lkdd3z1s3rpyf88786l243adrzyk9p4q8z9n41ygmpcsp4qk"))))
+       ("libusb"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.21/libusb-1.0.21.tar.bz2")
+           (sha256
+            (base32 "0jw2n5kdnrqvp7zh792fd6mypzzfap6jp4gfcmq4n6c1kb79rkkx"))))
+       ("libusb-compat"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-compat-0.1/libusb-compat-0.1.5/libusb-compat-0.1.5.tar.bz2")
+           (sha256
+            (base32 "0nn5icrfm9lkhzw1xjvaks9bq3w6mjg86ggv3fn7kgi4nfvg8kj0"))))
+       ("dropbear"
+        ,(origin
+           (method url-fetch)
+           (uri "https://matt.ucc.asn.au/dropbear/releases/dropbear-2016.74.tar.bz2")
+           (sha256
+            (base32 "14c8f4gzixf0j9fkx68jgl85q7b05852kk0vf09gi6h0xmafl817"))))
+       ("pinentry"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/pinentry/pinentry-1.1.0.tar.bz2")
+           (sha256
+            (base32 "0w35ypl960pczg5kp6km3dyr000m1hf0vpwwlh72jjkjza36c1v8"))))
+       ("gnupg"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.10.tar.bz2")
+           (sha256
+            (base32 "05f9804g72pffdxgvxjmjzkfcpjg1x221g9rwcr8fi51hrxd77br"))))
+       ("slang"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.jedsoft.org/releases/slang/slang-2.3.1a.tar.bz2")
+           (sha256
+            (base32 "0dlcy0hn0j6cj9qj5x6hpb0axifnvzzmv5jqq0wq14fygw0c7w2l"))))
+       ("newt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://releases.pagure.org/newt/newt-0.52.20.tar.gz")
+           (sha256
+            (base32 "1g3dpfnvaw7vljbr7nzq1rl88d6r8cmrvvng9inphgzwxxmvlrld"))))
+
+       ;;; coreboot cross.
+
+       ("gmp"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gmp/gmp-6.1.2.tar.xz")
+           (sha256
+            (base32 "04hrwahdxyqdik559604r7wrj9ffklwvipgfxgj4ys4skbl6bdc7"))))
+       ("mpfr"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/mpfr/mpfr-3.1.5.tar.xz")
+           (sha256
+            (base32 "1g32l2fg8f62lcyzzh88y3fsh6rk539qc6ahhdgvx7wpnf1dwpq1"))))
+       ("mpc"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/mpc/mpc-1.0.3.tar.gz")
+           (sha256
+            (base32 "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))
+       ("binutils-2.30"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/binutils/binutils-2.30.tar.xz")
+           (sha256
+            (base32 "1rhshw4m5m2pjz8g15hpiwhp52kn0pj0b5dxy0v7lwigmspbhikf"))))
+       ("gcc-8"
+        ,(origin
+           (method url-fetch)
+           (uri "https://ftpmirror.gnu.org/gcc/gcc-8.1.0/gcc-8.1.0.tar.xz")
+           (sha256
+            (base32 "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x"))))
+       ;; Note: Non-coreboot heads really doesn't need that.
+       ("acpica-coreboot"
+        ,(origin
+           (method url-fetch)
+           (uri "https://acpica.org/sites/acpica/files/acpica-unix2-20180531.tar.gz")
+           (sha256
+            (base32 "0q7vg1nr51f3rg16vjh4glz361a64r6gpm46fqkl2jf4fq7g43g5"))))))
+    (arguments
+     `(#:tests? #f ; Toplevel makefile has no tests.
+       #:make-flags
+       (list (string-append
+              "CROSS="
+              (assoc-ref %build-inputs "musl-cross")
+              "/crossgcc/x86_64-linux-musl/bin/x86_64-linux-musl-"))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; For edk2 and kexec-tools.
+             ;; FIXME: musl *musl-cross*/x86_64-linux-musl/bin/x86_64-linux-musl-gcc || ./x86_64-linux-musl/x86_64-linux-musl/bin/musl-gcc.
+             (setenv "BUILD_CC" (string-append (assoc-ref inputs "musl-cross") "/crossgcc/x86_64-linux-musl/bin/x86_64-linux-musl-gcc"))
+             ;; Disable wget.
+             (setenv "WGET" "true")
+             ;; Work around mcheck.h problem (in glibc!?)
+             (substitute* "modules/popt"
+              (("[.]/configure") "CFLAGS=\"-D__END_DECLS -D__BEGIN_DECLS -D__THROW\" ./configure"))
+             #t))
+         (add-after 'unpack 'unpack-heads-packages
+           (lambda* (#:key inputs #:allow-other-keys)
+             (define (install-file* source-key destination-directory destination-suffix)
+               (let* ((source-file (assoc-ref inputs source-key))
+                      (source-basename (basename source-file))
+                      (source-parts (string-split source-basename #\-))
+                      (drop (@ (srfi srfi-1) drop))
+                      (destination-file
+                       (string-join (drop source-parts 1) "-")))
+                 (copy-file source-file
+                  (string-append destination-directory "/"
+                                 destination-file destination-suffix))
+                 ;(invoke "tar" "-xf" source-file "-C" "build")
+))
+             (mkdir-p "packages")
+             (setenv "V" "1") ; verbose
+             (setenv "GUIX_C_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
+             (setenv "GUIX_CPLUS_INCLUDE_PATH" (getenv "CPLUS_INCLUDE_PATH"))
+             (setenv "GUIX_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
+             (setenv "GUIX_CPATH" (getenv "CPATH"))
+             (for-each (lambda (name)
+                         (install-file* name "packages" ".tmp"))
+                       '("linux" "coreboot-blobs" "coreboot" "busybox" "zlib" "mbedtls" "kexec-tools" "qrencode" "pciutils" "util-linux" "flashrom" "popt" "lvm2" "cryptsetup" "libgpg-error" "libgcrypt" "libksba" "libassuan" "npth" "libusb" "libusb-compat" "dropbear" "pinentry" "gnupg" "slang" "newt" "musl" "target-musl-cross" "tpmtotp" "msrtools"))
+             (mkdir-p "build")
+             (mkdir-p "build/musl-cross-git/tarballs")
+             (mkdir-p "build/coreboot-4.8.1/util/crossgcc/tarballs")
+             (for-each (lambda (name)
+                         (install-file* name "build/coreboot-4.8.1/util/crossgcc/tarballs" ""))
+                       '("gmp" "mpfr" "mpc" "binutils-2.30" "gcc-8" "acpica-coreboot"))
+             (copy-recursively (assoc-ref inputs "musl-cross") "build/musl-cross-git")
+             ; musl-cross-38e52db8358c043ae82b346a2e6e66bc86a53bc1.tar.gz
+             (copy-recursively (assoc-ref inputs "flashtools") "build/flashtools-0.0.1")
+
+             (setenv "MUSL_DIR" (assoc-ref inputs "musl-cross"))
+             ;(setenv "CROSS" (string-append (getenv "MUSL_DIR") "/crossgcc/x86_64-linux-musl/bin/x86_64-musl-linux-")) ; Note: Useless
+             (substitute* "Makefile"
+              ;; Disable our non-cross toolchain environment.
+              (("CROSS_TOOLS_NOCC := ")
+               ; CPP=" (getenv "CROSS") "cpp CXXCPP=" (getenv "CROSS") "cpp "
+               (string-append "CROSS_TOOLS_NOCC := C_INCLUDE_PATH= CPLUS_INCLUDE_PATH= LIBRARY_PATH= CPATH= "))
+              ;; Disable git.
+              (("git submodule update --init")
+               "true submodule update --init")
+              ;; Re-enable our non-cross toolchain environment selectively.
+              (("^WGET.*")
+               (string-append "HOSTCC =" ; for busybox
+                              " C_INCLUDE_PATH=" (or (getenv "GUIX_C_INCLUDE_PATH") "")
+                              " CPLUS_INCLUDE_PATH=" (or (getenv "GUIX_CPLUS_INCLUDE_PATH") "")
+                              " CPATH=" (or (getenv "GUIX_CPATH") "")
+                              " LIBRARY_PATH=" (or (getenv "GUIX_LIBRARY_PATH") "")
+                              " gcc\n"
+                              "CC_FOR_BUILD = $(HOSTCC)\n" ; for libgpg-error
+                              "BUILD_CC = $(HOSTCC)\n")) ; for kexec-tools
+              ;; Disable git, patch shebangs, and selectively re-enable host compiler.
+              ;; (Note: $HOSTCC is too complicated for bash, for example
+              ;; HOSTCC="a=b c=d gcc", then invoking $HOSTCC won't work).
+              (("(git clone.*)." _ tar)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed applets/busybox.mkll applets/busybox.mksuid po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' -e 's;^\\(\\$$$$HOSTCC[^|]*\\);(echo \\1 | bash);' \"$$$$s\" ; fi ; done)
+" "true" (assoc-ref inputs "bash") (assoc-ref inputs "bash") (assoc-ref inputs "bash")))
+              (("(tar -xf.*)." _ tar)
+               (format #f "(~a) && (cd $(build)/$($1_base_dir) && for s in Makefile Makefile.in configure lib/configure config.sub config.guess tools/install.sh tools/scripts/Makefile.include tools/power/cpupower/Makefile Makefile.rules scripts/* applets/usage_compressed applets/busybox.mkll applets/busybox.mksuid  po/Makefile.in.in po/Makefile.in po/Makefile make.tmpl.in *-config.in src/*-config.in src/Makefile.in applets/install.sh applets/busybox.mkll tests/pkits/* tests/openpgp/* tests/fake-pinentries/fake-pinentry.sh tests/*/Makefile tests/inittests tests/runtests tests/Makefile.in tests/runtest modules/test/runtests.sh src/test/runtests.sh mkfiles/build.sh autoconf/* demo/Makefile.in slsh/Makefile.in util/xcompile/xcompile util/genbuild_h/genbuild_h.sh ; do if [ -f \"$$$$s\" ] ; then sed -i -e 's;/bin/sh\\>;~a/bin/sh;' -e 's;^TERMCAP=-ltermcap;TERMCAP=;' -e 's;/bin/pwd\\>;pwd;' -e 's;/bin/ln\\>;ln;' -e 's;/usr/bin/file\\>;file;' -e 's;/bin/false\\>;false;' -e 's;/bin/bash\\>;~a/bin/bash;' -e 's;/usr/bin/env bash;~a/bin/bash;' -e 's;git clone;true clone;' -e 's;^HOSTCC.*$$$$;HOSTCC=C_INCLUDE_PATH=\"$(GUIX_C_INCLUDE_PATH)\" CPLUS_INCLUDE_PATH=\"$(GUIX_CPLUS_INCLUDE_PATH)\" CPATH=\"$(GUIX_CPATH)\" LIBRARY_PATH=\"$(GUIX_LIBRARY_PATH)\" gcc;' -e 's;^\\(\\$$$$HOSTCC[^|]*\\);(echo \\1 | bash);' \"$$$$s\" ; fi ; done)
+" tar (assoc-ref inputs "bash") (assoc-ref inputs "bash") (assoc-ref inputs "bash"))))
+             ;(substitute* "modules/musl-cross"
+             ; (("/bin/echo") "echo"))
+             (call-with-output-file "patches/coreboot-4.8.1/9999-shell.patch"
+               (lambda (port)
+                 (format port "--- coreboot-4.8.1/util/crossgcc/buildgcc.orig 2019-09-13 14:45:12.463998974 +0200
++++ coreboot-4.8.1/util/crossgcc/buildgcc 2019-09-13 14:46:49.808268216 +0200
+@@ -462,6 +462,13 @@
+ 			}
+ 		done
+ 		touch \"${dir}/.unpack_success\"
++  for s in \"${dir}/Makefile\" \"${dir}/configure\" \"${dir}/config.sub\" \"${dir}/config.guess\" \"${dir}/mpn/cpp-ccas\" \"${dir}/mpn/m4-ccas\" \"${dir}/missing\" \"${dir}/\"*\"/configure\" \"${dir}/move-if-change\" \"${dir}/libgcc/mkheader.sh\" \"${dir}/gcc/genmultilib\"
++  do
++   if [ -f \"${s}\" ]
++   then
++    sed -i -e 's;/bin/sh\\>;~a/bin/sh;' \"${s}\"
++   fi
++  done
+ 	)
+ }
+ 
+" (assoc-ref inputs "bash"))))
+             #t))
+         (add-after 'install 'install-images
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (make-flags-assoc (map (lambda (x)
+                                             (string-split x #\=))
+                                           make-flags))
+                    (BOARD (car (assoc-ref make-flags-assoc "BOARD")))
+                    (out-images (string-append out "/libexec/heads/" BOARD "/images")))
+               (mkdir-p out-images)
+               (copy-recursively (string-append "build/" BOARD) out-images)
+               ;; Contains timestamp.
+               (delete-file (string-append out-images "/hashes.txt"))
+               #t))))))
+    (home-page "https://github.com/osresearch/heads")
+    (synopsis "Heads: coreboot/LinuxBoot payload")
+    (description "A minimal Linux that runs as a coreboot or LinuxBoot ROM
+payload to provide a secure, flexible boot environment for laptops and
+servers.")
+    (license license:gpl2+))))
D
D
Danny Milosavljevic wrote on 2 May 2020 19:11
[WIP v5 6/8] gnu: Add heads-qemu-coreboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200502171118.19989-7-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-qemu-coreboot): New variable.
---
gnu/packages/heads.scm | 9 +++++++++
1 file changed, 9 insertions(+)

Toggle diff (17 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index f6482d5f5a..4e3d2ba216 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -636,3 +636,12 @@ servers.")
     (native-inputs
      `(("file" ,file)
        ,@(package-native-inputs heads)))))
+
+(define-public heads-qemu-coreboot
+  (package
+    (inherit heads-coreboot)
+    (name "heads-qemu-coreboot")
+    (arguments
+     `(#:make-flags
+       '("BOARD=qemu-coreboot")
+       ,@(package-arguments heads-coreboot)))))
D
D
Danny Milosavljevic wrote on 25 May 2020 00:32
[WIP v6 0/4] Add heads and co.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200524223210.10965-1-dannym@scratchpost.org
Danny Milosavljevic (4):
gnu: Add elfutils@0.174.
gnu: Add heads.
gnu: Add heads-linuxboot.
gnu: Add heads-qemu-linuxboot.

gnu/packages/heads.scm | 493 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 493 insertions(+)
D
D
Danny Milosavljevic wrote on 25 May 2020 00:32
[WIP v6 1/4] gnu: Add elfutils@0.174.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200524223210.10965-2-dannym@scratchpost.org
* gnu/packages/heads.scm (elfutils-0.174): New variable.
---
gnu/packages/heads.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (21 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index b28433431c..86ab487b0f 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -161,3 +161,16 @@ done
     (synopsis "Musl-cross gcc 5 toolchain")
     (description "Musl-cross toolchain: binutils, gcc 5 and musl.")
     (license license:isc))))
+
+(define elfutils-0.174
+  (package
+    (inherit elfutils)
+    (version "0.174")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://sourceware.org/elfutils/ftp/"
+                                  version "/elfutils-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "12nhr8zrw4sjzrvpf38vl55bq5nm05qkd7nq76as443f0xq7xwnd"))
+              (patches (search-patches "elfutils-tests-ptrace.patch"))))))
D
D
Danny Milosavljevic wrote on 25 May 2020 00:32
[WIP v6 3/4] gnu: Add heads-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200524223210.10965-4-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-linuxboot): New variable.
---
gnu/packages/heads.scm | 46 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)

Toggle diff (54 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 87ac871080..083a649783 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -599,3 +599,49 @@ done
 payload to provide a secure, flexible boot environment for laptops and
 servers.")
     (license license:gpl2+))))
+
+(define heads-linuxboot
+  (package
+    (inherit heads)
+    (name "heads-linuxboot")
+    (arguments
+     (substitute-keyword-arguments (package-arguments heads)
+      ((#:phases phases)
+       `(modify-phases ,phases
+          (add-before 'unpack-heads-packages 'unpack-linuxboot
+            (lambda* (#:key inputs #:allow-other-keys)
+               (mkdir-p "build")
+               (copy-recursively (assoc-ref inputs "linuxboot") "build/linuxboot-git")
+               (copy-recursively (assoc-ref inputs "edk2") "build/linuxboot-git/edk2")
+               (invoke "chmod" "-R" "u+w" "build/linuxboot-git")
+               (chmod "build/linuxboot-git/Makefile" #o664)
+               (substitute* "build/linuxboot-git/dxe/Makefile"
+                (("/usr/bin/") ""))
+               #t))))))
+    (native-inputs
+     `(("edk2"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/linuxboot/edk2")
+                   (commit "UDK2018")
+                   (recursive? #t))) ; openssl
+             (file-name "edk2-checkout")
+             (sha256
+              (base32 "0crjx1hg1m5mir2qm96dbcc3glrnww3ni0bc9f370qmm337wzlhi"))))
+       ("libuuid" ,util-linux) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("nasm" ,nasm) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("python" ,python-2) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("acpica" ,acpica) ; TODO: Move to heads' internal dependencies (for edk2).
+       ("file" ,file)
+       ("linuxboot"
+        ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/osresearch/linuxboot.git")
+                   (commit "b5376a441e8e85cbf722e943bb8294958e87c784")
+                   (recursive? #t)))
+             (file-name "linuxboot-checkout")
+             (sha256
+              (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
+       ,@(package-native-inputs heads)))))
D
D
Danny Milosavljevic wrote on 25 May 2020 00:32
[WIP v6 4/4] gnu: Add heads-qemu-linuxboot.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200524223210.10965-5-dannym@scratchpost.org
* gnu/packages/heads.scm (heads-qemu-linuxboot): New variable.
---
gnu/packages/heads.scm | 9 +++++++++
1 file changed, 9 insertions(+)

Toggle diff (17 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 083a649783..b7e1969947 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -645,3 +645,12 @@ servers.")
              (sha256
               (base32 "1bdj4m9dvih9fhp5q5c6cp5sphzbpag5gp4bz1p8g9lqi49lb7av"))))
        ,@(package-native-inputs heads)))))
+
+(define-public heads-qemu-linuxboot
+  (package
+    (inherit heads-linuxboot)
+    (name "heads-qemu-linuxboot")
+    (arguments
+     (substitute-keyword-arguments (package-arguments heads-linuxboot)
+      ((#:make-flags make-flags '())
+       `(cons "BOARD=qemu-linuxboot" ,make-flags))))))
D
D
Danny Milosavljevic wrote on 25 May 2020 00:32
[WIP v6 2/4] gnu: Add heads.
(address . 37466@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200524223210.10965-3-dannym@scratchpost.org
* gnu/packages/heads.scm (heads): New variable.
---
gnu/packages/heads.scm | 425 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 425 insertions(+)

Toggle diff (433 lines)
diff --git a/gnu/packages/heads.scm b/gnu/packages/heads.scm
index 86ab487b0f..87ac871080 100644
--- a/gnu/packages/heads.scm
+++ b/gnu/packages/heads.scm
@@ -174,3 +174,428 @@ done
                (base32
                 "12nhr8zrw4sjzrvpf38vl55bq5nm05qkd7nq76as443f0xq7xwnd"))
               (patches (search-patches "elfutils-tests-ptrace.patch"))))))
+
+(define heads
+  (let ((revision "3")
+        (commit "4245aec85796523945da51596d4d4af864288843"))
+  (package
+    (name "heads")
+    (version (git-version "0.1" revision commit))
+    (source
+     (origin
+      (method git-fetch)
+      (uri (git-reference
+             (url "https://github.com/osresearch/heads.git")
+             (commit commit)))
+      (file-name (git-file-name name version))
+      (sha256
+       (base32
+        "0ddph9bpbi6sf6dj5hp6018czfw46s553xzikw9xcd6x76j3q1c6"))
+      (patches (search-patches "heads-make-environment.patch"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bash" ,bash)
+       ("git" ,git)
+       ("perl" ,perl)
+       ("cpio" ,cpio)
+       ("m4" ,m4)
+       ("bison" ,bison)
+       ("flex" ,flex)
+       ("curl" ,curl) ; unused
+       ("zlibx" ,zlib)
+       ("musl-cross" ,musl-cross)
+       ;("musl-cross-i386" ,musl-cross-i386)
+       ("target-musl-cross"
+        ,(origin
+          (method url-fetch)
+          (uri "https://github.com/richfelker/musl-cross-make/archive/38e52db8358c043ae82b346a2e6e66bc86a53bc1.tar.gz")
+          (file-name "musl-cross-38e52db8358c043ae82b346a2e6e66bc86a53bc1.tar.gz")
+          (sha256
+           (base32
+            "0071ml3d42w8m59dc1zvl9pk931zcxsyflqacnwg5c6s7mnmvf5l"))))
+       ;; Ours would be too new for musl-cross binutils.
+       ;; See also https://bbs.archlinux.org/viewtopic.php?id=242682
+       ("elfutils" ,elfutils-0.174)
+       ("bc" ,bc)
+       ("findutils" ,findutils)
+       ("flashtools"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/osresearch/flashtools.git")
+                 (commit "9acce09aeb635c5bef01843e495b95e75e8da135")))
+           (file-name "flashtools-checkout")
+           (sha256
+            (base32 "0r4gj3nzr67ycd39k1vjzxfzkp90yacrdgxhc1z5jfvxfq4x91c1"))))
+       ("tpmtotp"
+        ,(origin
+           (method url-fetch)
+           (uri "https://github.com/osresearch/tpmtotp/archive/18b860fdcf5a55537c8395b891f2b2a5c24fc00a.tar.gz")
+           (file-name "tpmtotp-18b860fdcf5a55537c8395b891f2b2a5c24fc00a.tar.gz")
+           (sha256
+            (base32 "0v30biwwqyqf06xnhmnwwjgb77m3476fvp8d4823x0xgwjqg50hh"))))
+       ("msrtools"
+        ,(origin
+           (method url-fetch)
+           (uri "https://github.com/osresearch/msr-tools/archive/572ef8a2b873eda15a322daa48861140a078b92c.tar.gz")
+           (file-name "msr-tools-572ef8a2b873eda15a322daa48861140a078b92c.tar.gz")
+           (sha256
+            (base32 "1h3a1rai47r0dxiiv0i3xj0fjng15n6sxj8mw9gj0154s284fmc0"))))
+       ("coreboot-blobs"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-blobs-4.8.1.tar.xz")
+           (sha256
+            (base32 "15g222xj1zdn8i8qz0pw2jf28h66dljb1q5isw2ml05gwfd51ahq"))))
+       ("coreboot"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.coreboot.org/releases/coreboot-4.8.1.tar.xz")
+           (sha256
+            (base32 "08xdd5drk8yd37a3z5hc81qmgsybv6201i28hcggxh980vdz9pgh"))))
+       ("linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.62.tar.xz")
+           (sha256
+            (base32 "1ar29ikway5im17iw9ag1fxivr7sbj8nhxxw347xqmp1irz4vjji"))))
+       ("musl" ; useless
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.musl-libc.org/releases/musl-1.1.15.tar.gz")
+           (sha256
+            (base32 "1ymhxkskivzph0q34zadwfglc5gyahqajm7chqqn2zraxv3lgr4p"))))
+       ("busybox"
+        ,(origin
+           (method url-fetch)
+           (uri "https://busybox.net/downloads/busybox-1.28.0.tar.bz2")
+           (sha256
+            (base32 "1701carjf02y7r3djm1yvyd5kzrcxm4szinp7agfv7fmvfvm6ib0"))))
+       ("zlib"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.zlib.net/zlib-1.2.11.tar.gz")
+           (sha256
+            (base32 "18dighcs333gsvajvvgqp8l4cx7h1x7yx9gd5xacnk80spyykrf3"))))
+       ("mbedtls"
+        ,(origin
+           (method url-fetch)
+           (uri "https://tls.mbed.org/download/mbedtls-2.4.2-gpl.tgz")
+           (sha256
+            (base32 "17r9qs585gqghcf5yavb1cnvsigl0f8r0k8rklr5a855hrajs7yh"))))
+       ("kexec-tools"
+        ,(origin
+           (method url-fetch)
+           (uri "https://kernel.org/pub/linux/utils/kernel/kexec/kexec-tools-2.0.20.tar.gz")
+           (sha256
+            (base32 "05ksnlzal3sfnix9qds6qql1sjn3fxbdwgp3ncxxxjg032cdf5nb"))))
+       ("qrencode"
+        ,(origin
+           (method url-fetch)
+           (uri "https://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz")
+           (sha256
+            (base32 "0wiagx7i8p9zal53smf5abrnh9lr31mv0p36wg017401jrmf5577"))))
+       ("pciutils"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/software/utils/pciutils/pciutils-3.5.4.tar.xz")
+           (sha256
+            (base32 "0rpy7kkb2y89wmbcbfjjjxsk2x89v5xxhxib4vpl131ip5m3qab4"))))
+       ("util-linux"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/util-linux/v2.29/util-linux-2.29.2.tar.xz")
+           (sha256
+            (base32 "1qz81w8vzrmy8xn9yx7ls4amkbgwx6vr62pl6kv9g7r0g3ba9kmc"))))
+       ("flashrom"
+        ,(origin
+           (method url-fetch)
+           (uri "https://download.flashrom.org/releases/flashrom-v1.2.tar.bz2")
+           (sha256
+            (base32 "0ax4kqnh7kd3z120ypgp73qy1knz47l6qxsqzrfkd97mh5cdky71"))))
+       ("popt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://launchpad.net/popt/head/1.16/+download/popt-1.16.tar.gz")
+           (sha256
+            (base32 "1j2c61nn2n351nhj4d25mnf3vpiddcykq005w2h6kw79dwlysa77"))))
+       ("lvm2"
+        ,(origin
+           (method url-fetch)
+           (uri "https://mirrors.kernel.org/sourceware/lvm2/LVM2.2.02.168.tgz")
+           (sha256
+            (base32 "03b62hcsj9z37ckd8c21wwpm07s9zblq7grfh58yzcs1vp6x38r3"))))
+       ("cryptsetup"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.kernel.org/pub/linux/utils/cryptsetup/v1.7/cryptsetup-1.7.3.tar.xz")
+           (sha256
+            (base32 "00nwd96m9yq4k3cayc04i5y7iakkzana35zxky6hpx2w8zl08axg"))))
+       ("libgpg-error"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.37.tar.bz2")
+           (sha256
+            (base32 "0qwpx8mbc2l421a22l0l1hpzkip9jng06bbzgxwpkkvk5bvnybdk"))))
+       ("libgcrypt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.5.tar.bz2")
+           (sha256
+            (base32 "1hvsazms1bfd769q0ngl0r9g5i4m9mpz9jmvvrdzyzk3rfa2ljiv"))))
+       ("libksba"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libksba/libksba-1.3.5.tar.bz2")
+           (sha256
+            (base32 "0h53q4sns1jz1pkmhcz5wp9qrfn9f5g9i3vjv6dafwzzlvblyi21"))))
+       ("libassuan"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/libassuan/libassuan-2.5.3.tar.bz2")
+           (sha256
+            (base32 "00p7cpvzf0q3qwcgg51r9d0vbab4qga2xi8wpk2fgd36710b1g4i"))))
+       ("npth"
+        ,(origin
+           (method url-fetch)
+           (uri "https://gnupg.org/ftp/gcrypt/npth/npth-1.6.tar.bz2")
+           (sha256
+            (base32 "1lg2lkdd3z1s3rpyf88786l243adrzyk9p4q8z9n41ygmpcsp4qk"))))
+       ("libusb"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.21/libusb-1.0.21.tar.bz2")
+           (sha256
+            (base32 "0jw2n5kdnrqvp7zh792fd6mypzzfap6jp4gfcmq4n6c1kb79rkkx"))))
+       ("libusb-compat"
+        ,(origin
+           (method url-fetch)
+           (uri "https://downloads.sourceforge.net/project/libusb/libusb-compat-0.1/libusb-compat-0.1.5/libusb-compat-0.1.5.tar.bz2")
+           (sha256
+            (base32 "0nn5icrfm9lkhzw1xjvaks9bq3w6mjg86ggv3fn7kgi4nfvg8kj0"))))
+       ("dropbear"
+        ,(origin
+           (method url-fetch)
+           (uri "https://matt.ucc.asn.au/dropbear/releases/dropbear-2016.74.tar.bz2")
+           (sha256
+            (base32 "14c8f4gzixf0j9fkx68jgl85q7b05852kk0vf09gi6h0xmafl817"))))
+       ("pinentry"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/pinentry/pinentry-1.1.0.tar.bz2")
+           (sha256
+            (base32 "0w35ypl960pczg5kp6km3dyr000m1hf0vpwwlh72jjkjza36c1v8"))))
+       ("gnupg"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.20.tar.bz2")
+           (sha256
+            (base32 "0c6a4v9p6qzhsw1pfcwc459bxpc8hma0w9z8iqb9khvligack9q4"))))
+       ("slang"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.jedsoft.org/releases/slang/slang-2.3.1a.tar.bz2")
+           (sha256
+            (base32 "0dlcy0hn0j6cj9qj5x6hpb0axifnvzzmv5jqq0wq14fygw0c7w2l"))))
+       ("newt"
+        ,(origin
+           (method url-fetch)
+           (uri "https://releases.pagure.org/newt/newt-0.52.20.tar.gz")
+           (sha256
+            (base32 "1g3dpfnvaw7vljbr7nzq1rl88d6r8cmrvvng9inphgzwxxmvlrld"))))