janneke pushed a commit to branch wip-bootstrap in repository guix. commit de4e174dd2a855075536ea7ef7b9f6aa424c0927 Author: Jan Nieuwenhuizen <jann...@gnu.org> Date: Sat Jun 23 13:26:32 2018 +0200
gnu: Add binutils-boot0-cheat. * gnu/packages/mes.scm (binutils-boot0-cheat): New variable. (%cheat-binutils?): New variable. --- gnu/packages/mes.scm | 102 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 94 insertions(+), 8 deletions(-) diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm index f1c3c7f..2a78445 100644 --- a/gnu/packages/mes.scm +++ b/gnu/packages/mes.scm @@ -44,6 +44,7 @@ #:use-module (guix gexp)) (define %fake-bootstrap? #f) ; cheat using Guile instead of Mes for speed-up? +(define %cheat-binutils? #t) ; cheat using binutils-boot0 compiled with current tool-chain (define %mescc-tools-seed (let ((commit"29aae8c72e195cbb2f965f05a997b984a4f158fb")) @@ -633,12 +634,13 @@ standard.") (system* "./configure" (string-append "--prefix=" out))))))))))) -(define-public binutils-boot0 +(define-public binutils-boot0-real (package (inherit binutils) - (name "binutils-boot0") - (version "2.20.1a") - (source (origin + (name (if %cheat-binutils? "binutils-boot0-real" + "binutils-boot0")) + (version "2.20.1a") + (source (origin (method url-fetch) (uri (string-append "mirror://gnu/binutils/binutils-" version ".tar.bz2")) @@ -709,9 +711,95 @@ standard.") "--target=i386-unknown-linux" (string-append "--prefix=" out)))))))))))) +(define-public binutils-boot0-cheat + (let* ((triplet "i686-unknown-linux-gnu") + (tool-prefix (string-append triplet "-"))) + (package + (inherit binutils-boot0-real) + (name (if %cheat-binutils? "binutils-boot0" + "binutils-boot0-cheat")) + (supported-systems '("i686-linux")) + (native-inputs `(("flex" ,flex) ; cheat + ("binutils" ,(cross-binutils triplet)) + ("gcc" ,(cross-gcc triplet)) + ("glibc" ,(cross-libc triplet)) + ("kernel-headers" ,(linux-libre-headers-boot0)))) + (arguments + `(#:tests? #f ; runtest: command not found + #:parallel-build? #f + #:strip-binaries? #f + #:make-flags (list "RANLIB=true") + #:phases + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (glibc (assoc-ref %build-inputs "glibc")) + (headers (assoc-ref %build-inputs "kernel-headers")) + (cppflags (string-append " --static -static" + " -D MES_BOOTSTRAP=1" + " -B " glibc "/lib" + " -I " glibc "/include" + " -I " headers "/include")) + (ldflags (string-append " --static -static" + " -B " glibc "/lib"))) + (setenv "C_INCLUDE_PATH" + (string-append glibc "/include" + ":" headers "/include")) + (setenv "LIBRARY_PATH" + (string-append glibc "/lib")) + (setenv "PATH" + (string-append + (assoc-ref %build-inputs "flex") "/bin" + ":" (assoc-ref %build-inputs "gcc") "/bin" + ":" (assoc-ref %build-inputs "binutils") "/" ,triplet "/bin" + + ;; more bootstrap cheats + ":" (assoc-ref %build-inputs "bash") "/bin" + ":" (assoc-ref %build-inputs "bzip2") "/bin" + ":" (assoc-ref %build-inputs "coreutils") "/bin" + ":" (assoc-ref %build-inputs "diffutils") "/bin" + ;;":" (assoc-ref %build-inputs "file") "/bin" + ;;":" (assoc-ref %build-inputs "findutils") "/bin" + ":" (assoc-ref %build-inputs "gawk") "/bin" + + ":" (assoc-ref %build-inputs "grep") "/bin" + ":" (assoc-ref %build-inputs "gzip") "/bin" + ;;":" (assoc-ref %build-inputs "m4") "/bin" + ":" (assoc-ref %build-inputs "make") "/bin" + ;;":" (assoc-ref %build-inputs "patch") "/bin" + ":" (assoc-ref %build-inputs "sed") "/bin" + ":" (assoc-ref %build-inputs "tar") "/bin")) + + (setenv "CONFIG_SHELL" (string-append + (assoc-ref %build-inputs "bash") + "/bin/sh")) + (setenv "CPPFLAGS" cppflags) + (setenv "AR" "ar") + (setenv "RANLIB" "true") + (setenv "CC" (string-append ,tool-prefix "gcc" cppflags ldflags)) + (setenv "LD" (string-append ,tool-prefix "gcc" ldflags)) + (setenv "CPP" (string-append ,tool-prefix "gcc -E" " " cppflags)) + (setenv "CC_FOR_BUILD" (string-append ,tool-prefix "gcc" cppflags ldflags)) + + (format (current-error-port) "PATH=~a\n" (getenv "PATH")) + (format (current-error-port) "CC=~a\n" (getenv "CC")) + + (and (zero? (system* "./configure" + "--disable-nls" + "--disable-shared" + "--disable-werror" + "--host=i386-unknown-linux" + "--target=i386-unknown-linux" + (string-append "--prefix=" out))))))))))))) + +(define-public binutils-boot0 + (if %cheat-binutils? binutils-boot0-cheat + binutils-boot0-real)) + (define-public binutils-boot (package - (inherit binutils-boot0) + (inherit binutils-boot0-real) (name "binutils-boot") (native-inputs `(("flex" ,flex) ; cheat ("glibc" ,glibc-boot) @@ -948,9 +1036,7 @@ ac_cv_c_float_format='IEEE (little-endian)' (inherit gcc-core-boot) (name "gcc-boot") (supported-systems '("i686-linux")) - (native-inputs `(;;("binutils" ,binutils-boot) - ,(let ((triplet "i686-unknown-linux-gnu")) ;; MORTAL SIN HERE - `("binutils" ,(cross-binutils triplet))) + (native-inputs `(("binutils" ,binutils-boot0) ("gcc" ,gcc-core-boot) ("glibc" ,glibc-boot))) (outputs '("out"))