(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 (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) #:use-module (gnu packages bison) #: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)) (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)))) (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+)))) (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))))) (define-public heads-qemu-linuxboot (package (inherit heads-linuxboot) (name "heads-qemu-linuxboot") (arguments `(#: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)))))